Docker 搭建 etcd 单实例并使用图形界面进行访问

一、etcd 了解

阿蛮君最近在学习 k8s 相关的内容,了解到 etcd 是 k8s 一大重要的组件,所以来了解下相关的内容和使用。

etcd 是一个分布式、可靠的键值存储,可用于分布式系统中存储关键核心数据。可以发现,etcd 归根结底是一个存储组件,且可以实现配置共享和服务发现。在分布式系统中,各种服务配置信息的管理共享和服务发现是一个很基本也是很重要的问题,无论调用服务还是调度容器,都需要知道对应的服务实例和容器节点地址信息。etcd 就是这样一款实现了元数据信息可靠存储的组件。

etcd 可集中管理配置信息。服务端将配置信息存储于 etcd,客户端通过 etcd 得到服务配置信息,etcd 监听配置信息的改变,发现改变通知客户端。

特性

  • 简单:etcd 的安装简单,且为用户提供了 HTTP API,使用起来也很简单。
  • 存储:etcd 的基本功能,数据分层存储在文件目录中,类似于我们日常使用的文件系统。
  • Watch 机制:Watch 指定的键、前缀目录的更改,并对更改时间进行通知。
  • 安全通信:支持 SSL 证书验证。
  • 高性能:etcd 单实例可以支持 2K/s 读操作,每个实例1000次写入/秒,官方也有提供基准测试脚本。
  • 一致可靠:基于 Raft 共识算法,实现分布式系统内部数据存储、服务调用的一致性和高可用性。

使用场景

  • 键值对存储:etcd 是一个用于键值存储的组件,存储是 etcd 最基本的功能。
  • 消息发布与订阅:通过构建 etcd 消息中间件,服务提供者发布对应主题的消息,消费者则订阅他们关心的主题,一旦对应的主题有消息发布,就会产生订阅事件,消息中间件就会通知该主题所有的订阅者。
  • 分布式锁:分布式系统中涉及多个服务实例,存在跨进程之间资源调用,对于资源的协调分配,单体架构中的锁已经无法满足需要,需要引入分布式锁的概念。etcd 基于 Raft 算法,实现分布式集群的一致性,存储到 etcd 集群中的值必然是全局一致的,因此基于 etcd 很容易实现分布式锁。

63f0680146f82.webp

二、etcd 搭建

1. server 搭建

etcd 总归是提供 http 服务,etcdctl 工具也是通过 http 进行调用。

# 1. 创建网卡,方便etcdctl进行访问
docker network create etcd-net

# 2. 启动etcd-server
# 不需要验证
docker run -d \
--name etcd-server \
--net etcd-net \
-p 2379:2379 \
-p 2380:2380 \
-e ALLOW_NONE_AUTHENTICATION=yes \
-e ETCD_ADVERTISE_CLIENT_URLS=http://etcd-server:2379 \
bitnami/etcd

# 需要root密码
docker run -d \
--name etcd-server \
--net etcd-net \
-p 2379:2379 \
-p 2380:2380 \
-e ETCD_ROOT_PASSWORD=123456 \
-e ETCD_ADVERTISE_CLIENT_URLS=http://etcd-server:2379 \
bitnami/etcd

2. 客户端访问

# 1. 查看成员列表-无需密码
docker run -it --rm \
--net etcd-net \
-e ALLOW_NONE_AUTHENTICATION=yes \
bitnami/etcd \
etcdctl --endpoints http://etcd-server:2379 member list -w table

# 2. 存储键值对
docker run -it --rm \
--net etcd-net \
-e ALLOW_NONE_AUTHENTICATION=yes \
bitnami/etcd \
etcdctl --endpoints http://etcd-server:2379 put /message Hello
# 带密码请求
docker run -it --rm \
--net etcd-net \
-e ALLOW_NONE_AUTHENTICATION=yes \
bitnami/etcd \
etcdctl --endpoints http://etcd-server:2379 \
--user="root" --password="123456" put /message Hello

# 3. 获取键值对
docker run -it --rm \
--net etcd-net \
-e ALLOW_NONE_AUTHENTICATION=yes \
bitnami/etcd \
etcdctl --endpoints http://etcd-server:2379 get /message
# 带密码请求
docker run -it --rm \
--net etcd-net \
-e ALLOW_NONE_AUTHENTICATION=yes \
bitnami/etcd \
etcdctl --endpoints http://etcd-server:2379 \
--user="root" --password="123456" get /message

三、etcd 可视化工具搭建

docker run -d \
--name=etcdui \
--net etcd-net \
-p 9980:80 \
joinsunsoft/etcdv3-browser

访问9980端口,用户名/密码:ginghan/123456。

点击新增连接,如图所示:

63f06817b291b.webp

查询所有键,发现刚刚存储的键值对。

63f0682666c43.webp

阅读剩余
THE END