8.2. 恢复不健康的 etcd 集群
在高可用性 control plane 中,三个 etcd pod 作为 etcd 集群中有状态集的一部分运行。要恢复 etcd 集群,请通过检查 etcd 集群健康状况来识别不健康的 etcd pod。
8.2.1. 检查 etcd 集群的状态
您可以通过登录到任何 etcd pod 来检查 etcd 集群健康状态。
流程
输入以下命令登录到 etcd pod:
$ oc rsh -n openshift-etcd -c etcd <etcd_pod_name>
输入以下命令输出 etcd 集群的健康状况:
sh-4.4# etcdctl endpoint status -w table
输出示例
+------------------------------+-----------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ | ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS | +------------------------------+-----------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ | https://192.168.1xxx.20:2379 | 8fxxxxxxxxxx | 3.5.12 | 123 MB | false | false | 10 | 180156 | 180156 | | | https://192.168.1xxx.21:2379 | a5xxxxxxxxxx | 3.5.12 | 122 MB | false | false | 10 | 180156 | 180156 | | | https://192.168.1xxx.22:2379 | 7cxxxxxxxxxx | 3.5.12 | 124 MB | true | false | 10 | 180156 | 180156 | | +-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
8.2.2. 恢复失败的 etcd pod
3 节点集群的每个 etcd pod 都有自己的持久性卷声明 (PVC) 来存储其数据。由于数据损坏或缺少数据,etcd pod 可能会失败。您可以恢复 etcd pod 及其 PVC 失败。
流程
要确认 etcd pod 失败,请输入以下命令:
$ oc get pods -l app=etcd -n openshift-etcd
输出示例
NAME READY STATUS RESTARTS AGE etcd-0 2/2 Running 0 64m etcd-1 2/2 Running 0 45m etcd-2 1/2 CrashLoopBackOff 1 (5s ago) 64m
失败的 etcd pod 可能具有
CrashLoopBackOff
或Error
状态。输入以下命令删除失败的 pod 及其 PVC:
$ oc delete pods etcd-2 -n openshift-etcd
验证
输入以下命令验证新 etcd pod 是否正在运行:
$ oc get pods -l app=etcd -n openshift-etcd
输出示例
NAME READY STATUS RESTARTS AGE etcd-0 2/2 Running 0 67m etcd-1 2/2 Running 0 48m etcd-2 2/2 Running 0 2m2s