9.3. 将现有的 master 替换为 etcd colocated
在将机器迁移到不同的数据中心以及分配给它的网络和 IP 将改变时,请按照以下步骤操作。
在 OpenShift Container Platform 版本 3.11 的初始发行版本中,scaleup.yml playbook 不会扩展 etcd。这个问题已在 OpenShift Container Platform 3.11.59 及更高版本中解决。
-
添加 master。在这一流程的第 3 步,在
[new_masters]
和[new_nodes]
中添加新数据中心的主机,运行 openshift_node_group.yml playbook,并运行 master scaleup.yml playbook。 - 将相同的主机放在 etcd 部分中,运行 openshift_node_group.yml playbook,并运行 etcd scaleup.yml playbook。
验证主机是否已添加:
# oc get nodes
验证 master 主机 IP 是否已添加:
# oc get ep kubernetes
验证已添加了 etcd。
ETCDCTL_API
的值取决于所使用的版本:# source /etc/etcd/etcd.conf # ETCDCTL_API=2 etcdctl --cert-file=$ETCD_PEER_CERT_FILE --key-file=$ETCD_PEER_KEY_FILE \ --ca-file=/etc/etcd/ca.crt --endpoints=$ETCD_LISTEN_CLIENT_URLS member list
将 /etc/origin/master/ca.serial.txt 从 /etc/origin/master 目录复制到清单文件中最先列出的新 master 主机。默认情况下,这是 /etc/ansible/hosts。
- 删除 etcd 主机。
- 将 /etc/etcd/ca 目录复制到清单文件中第一个列出的新 etcd 主机中。默认情况下,这是 /etc/ansible/hosts。
从 master-config.yaml 文件中删除旧的 etcd 客户端:
# grep etcdClientInfo -A 11 /etc/origin/master/master-config.yaml
重启 master:
# master-restart api # master-restart controllers
从集群中删除旧的 etcd 成员。
ETCDCTL_API
的值取决于所使用的版本:# source /etc/etcd/etcd.conf # ETCDCTL_API=2 etcdctl --cert-file=$ETCD_PEER_CERT_FILE --key-file=$ETCD_PEER_KEY_FILE \ --ca-file=/etc/etcd/ca.crt --endpoints=$ETCD_LISTEN_CLIENT_URLS member list
获取以上命令的输出中的 ID,并使用 ID 删除旧的成员:
# etcdctl --cert-file=$ETCD_PEER_CERT_FILE --key-file=$ETCD_PEER_KEY_FILE \ --ca-file=/etc/etcd/ca.crt --endpoints=$ETCD_LISTEN_CLIENT_URL member remove 1609b5a3a078c227
通过删除 etcd pod 定义来停止旧 etcd 主机上的 etcd 服务:
# mkdir -p /etc/origin/node/pods-stopped # mv /etc/origin/node/pods/* /etc/origin/node/pods-stopped/
通过将定义文件从静态 pod dir /etc/origin/node/pods 中移出,关闭旧的 master API 和控制器服务:
# mkdir -p /etc/origin/node/pods/disabled # mv /etc/origin/node/pods/controller.yaml /etc/origin/node/pods/disabled/:
- 从 HA 代理配置中删除 master 节点,该配置在原生安装过程中默认作为负载均衡器安装。
- 弃用机器。
通过删除 pod 定义并重启主机来停止 master 上的节点服务:
# mkdir -p /etc/origin/node/pods-stopped # mv /etc/origin/node/pods/* /etc/origin/node/pods-stopped/ # reboot
删除节点资源:
# oc delete node