生产环境ETCD高可用集群
etcd 是分布式键值对数据库,应用于存储 k8s 集群的配置、运行数据等。 虽然 k8s 官方部署工具 kubeadm 可以快速地搭建起 etcd 集群,但是也造成一个不好的影响:etcd 的管理跟 k8s 集群耦合在一起。在生产环境中,我们更希望数据库是独立于其他系统。 先部署独立的外部 etcd 集群,再部署 k8s 集群,既有利于后续部署高可用集群,又方便运维管理,是更加稳健的生产方案。 外部 etcd 集群部署极其灵活:在节点数量上,既可以是单个节点,也可以是多个节点;在部署位置上,既可以部署在 k8s 集群节点上,也可以部署在独立的非 k8s 集群节点上。 除了二进制手动部署之外,还有自动化工具 etcdadm,但是目前还是开发版本,不建议用它部署生产环境。
etcd1
172.22.0.12
etcd2
172.22.0.14
etcd3
172.22.0.4
1. 在每台服务器中将三台服务器的内、外网 IP 和对应的 hostname 写入 hosts 文件
我们只走内网,所有不用加外网
cat >> /etc/hosts << EOF
172.22.0.12 etcd1
172.22.0.14 etcd2
172.22.0.4 etcd3
EOF2. 创建存储目录(所有节点)
mkdir /data/etcd
mkdir /data/etcd/data
mkdir /data/etcd/bin
mkdir /data/etcd/ssl3. 制作安全证书(主节点)
etcd 通过证书来实现安全验证。可以通过 cfssl 或者 openssl 工具制作证书。本文采用 cfssl。 在主节点 etcd1 安装 cfssl 套件,制作证书后传输给其他节点。
4. 制作 CA 根证书(主节点)
生成 csr 文件
创建证书
填写 CA 的 csr 信息,json 格式 csr 全称 Certificate Signing Request,即“证书签名请求”,类似于申请表,填写申请人的基本信息
4.1 填写 CA 的 csr 信息,json 格式
4.2 创建 CA 根证书,以 ca 为前缀,保存在 /data/etcd/ssl/
ca.pem 是公钥,ca-key.pem 是私钥。 有了根证书,我们这台服务器就可以算一个 CA 机构了,能够给 etcd 颁发证书。
4.3 配置证书策略
profiles:为不同角色配置不同的证书参数,此处只设了 etcd 一个角色,有需要的话可以添加多个角色。 重要的参数包括有效期、用途(签名、密钥加密、服务端认证、客户端认证)
4.4 颁发 etcd 的安全证书
此处多了个 hosts 字段,需要包括所有 etcd 节点的内、外网 IP 地址(这里只使用内网)。 如果 etcd 的配置包含了本地回环地址,也需要加上去。 如果后面新增加 etcd 节点,需要先更新 etcd 的 csr 信息,重新制作证书。
4.5 创建 etcd 的安全证书,以 etcd 为前缀,保存在 /data/etcd/ssl/
4.6 分发 etcd 证书到其他 etcd 节点, 要提前在 etcd2 和 etcd3 创建 ssl 目录
5. 部署 etcd 集群(所有节点)
成员标记的环境变量,其中的 url 是内部可见的 IP(内网 IP、本地回环 IP)
ETCD_NAME:节点的 hostname
ETCD_LISTEN_PEER_URLS:本地 etcd 端对端监听 url
ETCD_LISTEN_CLIENT_URLS:本地 etcd 客户端监听 url
集群标记的环境变量,其中的 url 可用内网IP || (外网 IP)
ETCD_INITIAL_ADVERTISE_PEER_URLS:初始化对外端对端通讯 url
ETCD_INITIAL_CLUSTER:初始化集群的所有 etcd 节点 url 的集合
ETCD_ADVERTISE_CLIENT_URLS:对外客户端监听 url
安全标记部分用到了刚刚创建的证书,所有 url 用 https 协议。
此处列举的是 etcd1 的配置,其他 etcd 节点的配置类似,只需要修改 ETCD_NAME 和与 url 相关的所有环境变量。
6. 用 systemd 服务启动 etcd (所有节点)
7. 在任意的 etcd 节点检查 etcd 集群健康状况
8. 优化一下
9. 时间同步一下
10. 重启服务器,重新查看状态
11. ETCD集群备份
12. ETCD集群恢复
找到备份的 ETCD 数据文件
通过命令恢复
13. ETCD 节点扩容
例如新加节点IP: 172.22.0.8
所有同步
/etc/hosts节点信息
添加节点到
/data/etcd/ssl/etcd-csr.json, 重新生成新的证书
同步证书到所有节点
scp /data/etcd/ssl/* 节点地址:/data/etcd/ssl/
新节点安装 etcd 二进制
修改配置文件 etcd.conf, 在 ETCD_INITIAL_CLUSTER 后添加 etcd4=https://172.22.0.8:2380, 并同步所有,重启服务
如下
启动新添加的节点
~... member list -w table 查看是信息
14. ETCD 节点扩容
先获取节点ID
删除节点ID
Last updated