4.3. 扩展 etcd
您可以通过在 etcd 主机中添加更多资源或通过添加更多 etcd 主机来纵向扩展 etcd 集群。
由于 etcd 使用的投票系统,集群必须始终包含奇数个成员数。
拥有奇数 etcd 主机的集群可考虑容错。etcd 主机数量为奇数不会改变仲裁所需的数量,但会增加故障的容错能力。例如,对于包含三个成员的群集,仲裁为 2,保留一个失败容错能力。这可确保集群在两个成员健康时继续运行。
建议具有三个 etcd 主机的生产环境级别的集群。
新主机需要一个全新的 Red Hat Enterprise Linux 7 专用主机。etcd 存储应位于 SSD 磁盘上,以实现最佳性能和在 /var/lib/etcd
中挂载的专用磁盘上。
先决条件
- 在添加新的 etcd 主机前,备份 etcd 配置和数据以防止数据丢失。
检查当前的 etcd 集群状态,以避免添加新主机到不健康的集群。运行这个命令:
# ETCDCTL_API=3 etcdctl --cert="/etc/etcd/peer.crt" \ --key=/etc/etcd/peer.key \ --cacert="/etc/etcd/ca.crt" \ --endpoints="https://*master-0.example.com*:2379,\ https://*master-1.example.com*:2379,\ https://*master-2.example.com*:2379" endpoint health https://master-0.example.com:2379 is healthy: successfully committed proposal: took = 5.011358ms https://master-1.example.com:2379 is healthy: successfully committed proposal: took = 1.305173ms https://master-2.example.com:2379 is healthy: successfully committed proposal: took = 1.388772ms
在运行
scaleup
playbook 前,请确保新主机已注册到正确的红帽软件频道:# subscription-manager register \ --username=*<username>* --password=*<password>* # subscription-manager attach --pool=*<poolid>* # subscription-manager repos --disable="*" # subscription-manager repos \ --enable=rhel-7-server-rpms \ --enable=rhel-7-server-extras-rpms
etcd 托管在
rhel-7-server-extras-rpms
软件频道中。确保从 etcd 集群中删除所有未使用的 etcd 成员。这必须在运行
scaleup
playbook 之前完成。列出 etcd 成员:
# etcdctl --cert="/etc/etcd/peer.crt" --key="/etc/etcd/peer.key" \ --cacert="/etc/etcd/ca.crt" --endpoints=ETCD_LISTEN_CLIENT_URLS member list -w table
复制未使用的 etcd 成员 ID(如果适用)。
通过使用以下命令指定其 ID 来删除未使用的成员:
# etcdctl --cert="/etc/etcd/peer.crt" --key="/etc/etcd/peer.key" \ --cacert="/etc/etcd/ca.crt" --endpoints=ETCD_LISTEN_CLIENT_URL member remove UNUSED_ETCD_MEMBER_ID
在当前 etcd 节点上升级 etcd 和 iptables:
# yum update etcd iptables-services
- 为 etcd 主机备份 /etc/etcd 配置。
- 如果新的 etcd 成员也是 OpenShift Container Platform 节点,将所需的主机数量添加到集群中。
- 此流程的其余部分假定您添加了一台主机,但是如果您添加多个主机,请在每个主机上执行所有步骤。
4.3.1. 使用 Ansible 添加新 etcd 主机
流程
在 Ansible 清单文件中,创建一个名为
[new_etcd]
的新组,再添加新主机。然后,将new_etcd
组添加为[OSEv3]
组的子组:[OSEv3:children] masters nodes etcd new_etcd 1 ... [OUTPUT ABBREVIATED] ... [etcd] master-0.example.com master-1.example.com master-2.example.com [new_etcd] 2 etcd0.example.com 3
注意将旧的
etcd 主机条目
替换为清单文件中的新etcd
主机条目。在替换旧的etcd 主机
时,必须创建一个/etc/etcd/ca/
目录的副本。另外,您可以在扩展etcd 主机
前重新部署 etcd ca 和 certs。在安装 OpenShift Container Platform 并托管 Ansible 清单文件的主机中,切换到 playbook 目录并运行 etcd
scaleup
playbook:$ cd /usr/share/ansible/openshift-ansible $ ansible-playbook playbooks/openshift-etcd/scaleup.yml
在 playbook 运行后,通过将新 etcd 主机从
[new_etcd]
组移到[etcd]
组来修改清单文件,使其反映当前的状态:[OSEv3:children] masters nodes etcd new_etcd ... [OUTPUT ABBREVIATED] ... [etcd] master-0.example.com master-1.example.com master-2.example.com etcd0.example.com
如果使用 Flannel,修改位于
/etc/sysconfig/flanneld
主机上的flanneld
服务配置,使其包含新的 etcd 主机:FLANNEL_ETCD_ENDPOINTS=https://master-0.example.com:2379,https://master-1.example.com:2379,https://master-2.example.com:2379,https://etcd0.example.com:2379
重启
flanneld
服务:# systemctl restart flanneld.service