This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.2.2. 将成员重新添加到集群
从 etcd 集群中删除成员后,请使用以下流程之一将成员添加到集群中:
- 如果 master 主机的 etcd 证书有效,请将 成员重新添加到 etcd 集群。
- 如果 master 主机没有 etcd 证书,或者它们已不再有效,请 生成 etcd 证书并将成员添加到 etcd 集群。
2.2.1. 将 master 主机重新添加到 etcd 集群 复制链接链接已复制到粘贴板!
按照以下步骤将 master 主机添加到 etcd 集群。此流程假设您之前从集群中删除了 master 主机,并且其 etcd 的依赖部分(如 TLS 证书和 DNS)有效。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。 - 可以 SSH 到 master 主机来添加到 etcd 集群。
- 有已存在的活跃 etcd 成员的 IP 地址。
流程
访问添加到 etcd 集群的 master 主机。
重要您必须在添加到 etcd 集群的 master 主机上运行这个步骤。
运行
etcd-member-add.sh
脚本并传递两个参数:- 现有 etcd 成员的 IP 地址
- 要添加的 etcd 成员的名称
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 etcd 成员是否已成功添加到 etcd 集群:
连接到正在运行的 etcd 容器:
[core@ip-10-0-147-172 ~] id=$(sudo crictl ps --name etcd-member | awk 'FNR==2{ print $1}') && sudo crictl exec -it $id /bin/sh
[core@ip-10-0-147-172 ~] id=$(sudo crictl ps --name etcd-member | awk 'FNR==2{ print $1}') && sudo crictl exec -it $id /bin/sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 etcd 容器中,导出连接到 etcd 所需的变量:
export ETCDCTL_API=3 ETCDCTL_CACERT=/etc/ssl/etcd/ca.crt ETCDCTL_CERT=$(find /etc/ssl/ -name *peer*crt) ETCDCTL_KEY=$(find /etc/ssl/ -name *peer*key)
sh-4.3# export ETCDCTL_API=3 ETCDCTL_CACERT=/etc/ssl/etcd/ca.crt ETCDCTL_CERT=$(find /etc/ssl/ -name *peer*crt) ETCDCTL_KEY=$(find /etc/ssl/ -name *peer*key)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 etcd 容器中,执行
etcdctl member list
并确定列出了新成员。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,新成员最多可能需要10分钟才能启动。
在 etcd 容器中,执行
etcdctl endpoint health
并确定新成员处于健康状态。etcdctl endpoint health --cluster
sh-4.3# etcdctl endpoint health --cluster https://10.0.128.73:2379 is healthy: successfully committed proposal: took = 4.5576ms https://10.0.147.172:2379 is healthy: successfully committed proposal: took = 5.1521ms https://10.0.171.108:2379 is healthy: successfully committed proposal: took = 4.2631ms
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证新成员是否处于与 etcd 关联的 Pod 列表中,其状态是否是
Running
。在一个已连接到集群的终端中,运行以下命令:
oc get pods -n openshift-etcd
$ oc get pods -n openshift-etcd NAME READY STATUS RESTARTS AGE etcd-member-ip-10-0-128-73.us-east-2.compute.internal 2/2 Running 0 15h etcd-member-ip-10-0-147-172.us-east-2.compute.internal 2/2 Running 7 122m etcd-member-ip-10-0-171-108.us-east-2.compute.internal 2/2 Running 0 15h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.2. 生成 etcd 证书并将成员添加到集群中 复制链接链接已复制到粘贴板!
如果节点是新节点,或者节点上的 etcd 证书已不再有效,则必须先生成 etcd 证书,然后才能将成员添加到 etcd 集群。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。 - 可以 SSH 到新的 master 主机来添加到 etcd 集群。
- 可以 SSH 到一个健康的 master 主机。
- 有一个健康的 master 主机的 IP 地址。
流程
在一个健康的 master 节点上设置临时 etcd 证书 signer 服务。
访问一个健康的 master 主机节点,使用以下命令以
cluster-admin
用户身份登录到集群。sudo oc login https://localhost:6443
[core@ip-10-0-143-125 ~]$ sudo oc login https://localhost:6443 Authentication required for https://localhost:6443 (openshift) Username: kubeadmin Password: Login successful.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取
kube-etcd-signer-server
镜像的pull规范。export KUBE_ETCD_SIGNER_SERVER=$(sudo oc adm release info --image-for kube-etcd-signer-server --registry-config=/var/lib/kubelet/config.json)
[core@ip-10-0-143-125 ~]$ export KUBE_ETCD_SIGNER_SERVER=$(sudo oc adm release info --image-for kube-etcd-signer-server --registry-config=/var/lib/kubelet/config.json)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行
tokenize-signer.sh
脚本。确保在
sudo
中使用-E
以便将环境变量正确传递给脚本。sudo -E /usr/local/bin/tokenize-signer.sh ip-10-0-143-125
[core@ip-10-0-143-125 ~]$ sudo -E /usr/local/bin/tokenize-signer.sh ip-10-0-143-125
1 Populating template /usr/local/share/openshift-recovery/template/kube-etcd-cert-signer.yaml.template Populating template ./assets/tmp/kube-etcd-cert-signer.yaml.stage1 Tokenized template now ready: ./assets/manifests/kube-etcd-cert-signer.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 部署 signer 的健康 master 主机的名称
使用生成的文件创建 signer Pod。
sudo oc create -f assets/manifests/kube-etcd-cert-signer.yaml
[core@ip-10-0-143-125 ~]$ sudo oc create -f assets/manifests/kube-etcd-cert-signer.yaml pod/etcd-signer created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确定 signer 在监听 master 节点。
ss -ltn | grep 9943
[core@ip-10-0-143-125 ~]$ ss -ltn | grep 9943 LISTEN 0 128 *:9943 *:*
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
将新的 master 主机添加到 etcd 集群。
访问要添加到集群中的新 master 主机,使用以下命令以
cluster-admin
用户身份登录到集群。sudo oc login https://localhost:6443
[core@ip-10-0-156-255 ~]$ sudo oc login https://localhost:6443 Authentication required for https://localhost:6443 (openshift) Username: kubeadmin Password: Login successful.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 导出
etcd-member-recover.sh
脚本所需的两个环境变量。export SETUP_ETCD_ENVIRONMENT=$(sudo oc adm release info --image-for machine-config-operator --registry-config=/var/lib/kubelet/config.json)
[core@ip-10-0-156-255 ~]$ export SETUP_ETCD_ENVIRONMENT=$(sudo oc adm release info --image-for machine-config-operator --registry-config=/var/lib/kubelet/config.json)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow export KUBE_CLIENT_AGENT=$(sudo oc adm release info --image-for kube-client-agent --registry-config=/var/lib/kubelet/config.json)
[core@ip-10-0-156-255 ~]$ export KUBE_CLIENT_AGENT=$(sudo oc adm release info --image-for kube-client-agent --registry-config=/var/lib/kubelet/config.json)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行
etcd-member-recover.sh
脚本。确保在
sudo
中使用-E
以便将环境变量正确传递给脚本。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定 signer 服务器运行的健康 master 的 IP 地址和新成员的 etcd 名称。
验证新 master 主机已被添加到etcd成员列表中。
访问健康 master,连接到正在运行的 etcd 容器。
[core@ip-10-0-143-125 ~] id=$(sudo crictl ps --name etcd-member | awk 'FNR==2{ print $1}') && sudo crictl exec -it $id /bin/sh
[core@ip-10-0-143-125 ~] id=$(sudo crictl ps --name etcd-member | awk 'FNR==2{ print $1}') && sudo crictl exec -it $id /bin/sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 etcd 容器中,导出连接到 etcd 所需的变量。
export ETCDCTL_API=3 ETCDCTL_CACERT=/etc/ssl/etcd/ca.crt ETCDCTL_CERT=$(find /etc/ssl/ -name *peer*crt) ETCDCTL_KEY=$(find /etc/ssl/ -name *peer*key)
sh-4.3# export ETCDCTL_API=3 ETCDCTL_CACERT=/etc/ssl/etcd/ca.crt ETCDCTL_CERT=$(find /etc/ssl/ -name *peer*crt) ETCDCTL_KEY=$(find /etc/ssl/ -name *peer*key)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在etcd容器中,执行
etcdctl member list
并确定列出了新成员。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,新成员最多可能需要 20 分钟才能启动。
添加新成员后,请删除 signer Pod,因为不再需要它。
在一个已连接到集群的终端中,运行以下命令:
oc delete pod -n openshift-config etcd-signer
$ oc delete pod -n openshift-config etcd-signer
Copy to Clipboard Copied! Toggle word wrap Toggle overflow