跨VPC网络-二进制ETCD集群
etcd 是分布式键值对数据库,应用于存储 k8s 集群的配置、运行数据等。
虽然 k8s 官方部署工具 kubeadm 可以快速地搭建起 etcd 集群,但是也造成一个不好的影响:etcd 的管理跟 k8s 集群耦合在一起。
在生产环境中,我们更希望数据库是独立于其他系统。
先部署独立的外部 etcd 集群,再部署 k8s 集群,既有利于后续部署高可用集群,又方便运维管理,是更加稳健的生产方案。
外部 etcd 集群部署极其灵活:在节点数量上,既可以是单个节点,也可以是多个节点;在部署位置上,既可以部署在 k8s 集群节点上,也可以部署在独立的非 k8s 集群节点上。
除了二进制手动部署之外,还有自动化工具 etcdadm,但是目前还是开发版本,不建议用它部署生产环境。
|节点名称|节点内网IP| 节点外面IP| |:---|:---|
172.19.200.6
43.129.25.161
etcd1
香港
172.22.0.10
43.134.80.11
etcd2
新加坡
172.26.0.9
43.135.160.117
etcd3
美国
注意私网IP,不要使用同一个网段,防止冲突
1. 在每台服务器中将三台服务器的内、外网 IP 和对应的 hostname 写入 hosts 文件
我们只走内网,所有不用加外网
cat >> /etc/hosts << EOF
172.19.200.6 etcd1
43.129.25.161 etcd1
172.22.0.10 etcd2
43.134.80.11 etcd2
172.26.0.9 etcd3
43.135.160.117 etcd3
EOF2. 创建存储目录(所有节点)
3. 制作安全证书(主节点)
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://43.129.25.161:2380, 并同步所有,重启服务
如下
启动新添加的节点
~... member list -w table 查看是信息
14. ETCD 节点扩容
先获取节点ID
删除节点ID
Last updated