使用 Docker 部署 etcd、启用身份验证
一、etcd 介绍
etcd 是一个高可用的键值存储系统,主要用于共享配置和服务发现。它使用 Go 语言开发,具有快速、可靠和简单等特点。
etcd 在分布式系统中的应用非常广泛,主要用于共享配置和服务发现。它提供了一个可靠的键值存储,可用于存储应用程序配置、服务发现信息和其他重要的元数据。
etcd 基于 Raft 协议,能够提供分布式一致性,并且可以在多个节点之间复制数据以确保数据的可靠性和可用性。etcd 还提供了易于使用的 HTTP API,使得客户端可以轻松地与它进行交互。它广泛应用于容器编排、微服务架构、分布式系统等领域。
etcd 的 watch 功能是一种实时监听机制,用于监控 etcd 数据库中的数据变化。当 watch 指定的 key 或范围发生变化时,etcd 会通知 watch 的回调函数,以便执行相应的操作。
二、从 docker hub 查找 etcd 镜像
排在前面的是星数最多的,这里选择第一个,即 bitnami/etcd
二、拉取 etcd 镜像
拉取镜像后,可以使用 docker images 命令查看镜像
二、准备 etcd 数据保存文件夹和 etcd 配置文件
etcd 的配置文件保存在宿主机中,方便以后修改配置
Linux 的系统卷的空间一般都不大,所以 etcd 数据保存在宿主机的 /data 文件夹
1、创建 data 和 conf 文件夹
-p 参数用于递归创建文件夹。
不带选项 -p 参数时,所创建的文件夹的父文件夹必须已存在。
2、文件夹授权
授权后,以便 docker 容器有权读写这 data 和 conf 文件夹
3、编辑 etcd 配置文件
etcd 的配置文件是 yaml 格式文件。
vim /data/etcd/etcd01/conf/etcd.yml
etcd 示例配置文件参考:
https://github.com/etcd-io/etcd/blob/main/etcd.conf.yml.sample
三、创建容器并启动
1、启动容器
2、参数说明
--name 指定容器名称
-d 在后台允许容器
-p 容器端口号,格式:主机端口:容器端口
-e 给容器设置环境变量
-v 将宿主机的目录挂载到容器里,格式:主机目录:容器目录
环境变量 ALLOW_NONE_AUTHENTICATION etcd 不使用身份认证
环境变量 ETCD_CONFIG_FILE 指定 etcd 配置文件
3、容器启动失败时,可查看容器的日志
4、设置容器开机自动启动
三、进入 etcd 容器
进入容器命令需要添加 -u root 参数
未使用 -u root 参数时,会出现 I have no name!
四、验证安装
1、查看 etcd 版本
etcd Version: 3.5.9
Git SHA: bdbbde9
Go Version: go1.19.10
Go OS/Arch: linux/amd64
2、查看 etcd 集群成员
其中 name etc01 是配置文件 /data/etcd/etcd01/conf/etcd.yml 指定的。
四、etcd 基本操作
1、设置 key 的值
foo 是 key, f1 是值
2、获取 key 的值
3、获取指定前缀的所有 key 和值
获取 foo 开头的所有 key 的值。
如果要获取所有的 key 可以用空字符串代替 foo,即,单引号、双引号都可以:
etcdctl get '' --prefix 或 etcdctl get "" --prefix
4、获取 key 历史版本值
rev 是服务端全局数据版本号
6、监控 key 的值的变化
执行上面的命令后,会阻塞等待
在另外一个终端修改 foo 的值进行测试(如:etcdctl put foo f2)
7、查询数据版本号
{"header":{"cluster_id":7218864286076089875,"member_id":1942583214888227186,"revision":130,"raft_term":4},"kvs":[{"key":"Zm9v","create_revision":129,"mod_revision":130,"version":2,"value":"ZjE="}],"count":1}
说明:
cluster_id : 请求的 etcd 集群 ID
member_id : 请求的 etcd 节点 ID
revision : etcd 服务端当前全局数据版本号。对任一 key 的 put 或 delete 操作都会使 revision 加 1。revision=1 是 etcd 的保留版本号,因此用户的 key 版本号将从 2 开始
raft_term : etcd 当前 raft 主节点任期号
create_revision : 当前 key 创建时全局数据版本号 revision 的值
mod_revision : 当前 key 最后一次修改时全局数据版本号 revision 的值
version : 当前 key 的数据版本号。key 创建时 version 为 1,对当前 key 进行 put 操作会使 version 自增 1,将 key 删除后,重新创建,version 又会从 1 开始
8、删除 key
五、启用 etcd 身份验证
1、查看是否启用身份认证
Authentication Status: false
AuthRevision: 6
2、查看角色列表
3、查看用户列表
4、新增角色
5、新增用户
6、给用户分配角色
7、获取用户信息
8、获取角色信息
9、为角色设置某个 key 的权限
10、启用身份验证
Authentication Enabled
启用身份验证后,绝大部分的命令都需要添加用户和密码参数:--user=root --password=密码
11、禁用身份验证
Authentication Disabled
13、修改密码
版权声明: 本文为 InfoQ 作者【向东是大海】的原创文章。
原文链接:【http://xie.infoq.cn/article/ffb0703096f0de1045e1ab028】。文章转载请联系作者。
评论