2.3. 安装后进行故障排除和恢复
带有隔离的双节点 OpenShift 集群只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
使用以下小节帮助您通过隔离在双节点 OpenShift 集群中恢复问题。
2.3.3. 使用隔离替换双节点 OpenShift 集群中的 control plane 节点 复制链接链接已复制到粘贴板!
您可以替换双节点 OpenShift 集群中失败的 control plane 节点。替换节点必须使用与故障节点相同的主机名和 IP 地址。
先决条件
- 您有一个可正常工作的 survivor control plane 节点。
- 您已确认机器没有运行,或者该节点未就绪。
-
您可以使用具有
cluster-admin角色的用户访问集群。 - 您知道故障节点的主机名和 IP 地址。
在继续操作前进行 etcd 备份,以确保在出现问题时可以恢复集群。
流程
运行以下命令检查仲裁状态:
sudo pcs quorum status
$ sudo pcs quorum statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 quorum 丢失,且一个 control plane 节点仍在运行,请运行以下命令在 survivor 节点上手动恢复仲裁:
sudo pcs quorum unblock
$ sudo pcs quorum unblockCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果只有一个节点失败,请运行以下命令验证 etcd 是否在 survivor 节点上运行:
sudo pcs resource status etcd
$ sudo pcs resource status etcdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 etcd 没有运行,请运行以下命令重启 etcd:
sudo pcs resource cleanup etcd
$ sudo pcs resource cleanup etcdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 etcd 仍然没有启动,请手动在 survivor 节点上强制进行隔离,跳过隔离:
重要在运行此命令前,请确保被替换的节点无法访问。否则,您面临 etcd 崩溃的风险。
sudo pcs resource debug-stop etcd
$ sudo pcs resource debug-stop etcdCopy to Clipboard Copied! Toggle word wrap Toggle overflow sudo OCF_RESKEY_CRM_meta_notify_start_resource='etcd' pcs resource debug-start etcd
$ sudo OCF_RESKEY_CRM_meta_notify_start_resource='etcd' pcs resource debug-start etcdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 恢复后,etcd 必须在 survivor 节点上成功运行。
运行以下命令,为故障节点删除 etcd secret:
oc project openshift-etcd
$ oc project openshift-etcdCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete secret etcd-peer-<node_name>
$ oc delete secret etcd-peer-<node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete secret etcd-serving-<node_name>
$ oc delete secret etcd-serving-<node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete secret etcd-serving-metrics-<node_name>
$ oc delete secret etcd-serving-metrics-<node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意要替换失败的节点,您必须首先删除其 etcd secret。当 etcd 运行时,API 服务器可能需要一些时间才能响应这些命令。
删除故障节点的资源:
如果您有
BareMetalHost(BMH)对象,请运行以下命令来识别您要替换的主机:oc get bmh -n openshift-machine-api
$ oc get bmh -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,删除故障节点的 BMH 对象:
oc delete bmh/<bmh_name> -n openshift-machine-api
$ oc delete bmh/<bmh_name> -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,列出
Machine对象来识别映射到您要替换的节点的对象:oc get machines.machine.openshift.io -n openshift-machine-api
$ oc get machines.machine.openshift.io -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,从
Machine对象获取带有机器哈希值的标签:oc get machines.machine.openshift.io/<machine_name> -n openshift-machine-api \ -o jsonpath='Machine hash label: {.metadata.labels.machine\.openshift\.io/cluster-api-cluster}{"\n"}'$ oc get machines.machine.openshift.io/<machine_name> -n openshift-machine-api \ -o jsonpath='Machine hash label: {.metadata.labels.machine\.openshift\.io/cluster-api-cluster}{"\n"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<machine_name> 替换为集群中的Machine对象的名称。例如:ostest-bfs7w-ctrlplane-0。您需要此标签来置备新的
Machine对象。运行以下命令,删除故障节点的
Machine对象:oc delete machines.machine.openshift.io/<machine_name>-<failed nodename> -n openshift-machine-api
$ oc delete machines.machine.openshift.io/<machine_name>-<failed nodename> -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在删除
Machine对象后,节点对象会被自动删除。
使用相同的名称和 IP 地址重新创建失败的主机:
重要只有在使用安装程序置备的基础架构或 Machine API 创建原始节点时,才需要执行此步骤。有关替换失败的裸机 control plane 节点的详情,请参考"在裸机中替换不健康的 etcd 成员"。
-
删除 BMH 和
Machine对象。机器控制器自动删除节点对象。 使用以下示例配置置备新机器:
Machine对象配置示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
metadata.annotations.metal3.io/BareMetalHost: 将{bmh_name}替换为与您要替换的主机关联的 BMH 对象的名称。 -
labels.machine.openshift.io/cluster-api-cluster: 将{machine_hash_label}替换为从您删除的机器中获取的标签。 -
metadata.name:将{machine_name}替换为您删除的机器的名称。
-
运行以下命令,创建新的 BMH 对象和 secret 来存储 BMC 凭证:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
metadata.name:指定 secret 的名称。 -
metadata.name:将{bmh_name}替换为您删除的 BMH 对象的名称。 -
BMC.address: 将{uuid}替换为您创建的节点的 UUID。 -
BMC.credentialsName:将name替换为您创建的 secret 的名称。 -
bootMACAddress:指定 provisioning 网络接口的 MAC 地址。这是节点在调配期间与 Ironic 通信时使用的 MAC 地址。
-
-
删除 BMH 和
运行以下命令验证新节点是否已达到
Provisioned状态:oc get bmh -o wide
$ oc get bmh -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令输出中的
STATUS列的值必须是Provisioned。注意完成置备过程可能需要 10 到 20 分钟。
运行以下命令,验证两个 control plane 节点都处于
Ready状态:oc get nodes
$ oc get nodesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令输出中的
STATUS列值对于两个节点都必须是Ready。运行以下命令,将
分离注解应用到 BMH 对象以防止 Machine API 管理它:oc annotate bmh <bmh_name> -n openshift-machine-api baremetalhost.metal3.io/detached='' --overwrite
$ oc annotate bmh <bmh_name> -n openshift-machine-api baremetalhost.metal3.io/detached='' --overwriteCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将替换节点重新加入到 pacemaker 集群中:
注意在 survivor control plane 节点上运行以下命令,而不是被替换的节点。
sudo pcs cluster node remove <node_name>
$ sudo pcs cluster node remove <node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo pcs cluster node add <node_name> addr=<node_ip> --start --enable
$ sudo pcs cluster node add <node_name> addr=<node_ip> --start --enableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,删除故障节点的过时作业:
oc project openshift-etcd
$ oc project openshift-etcdCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete job tnf-auth-job-<node_name>
$ oc delete job tnf-auth-job-<node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete job tnf-after-setup-job-<node_name>
$ oc delete job tnf-after-setup-job-<node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
有关验证 control plane 节点和 etcd 是否正常运行的详情,请参考"使用隔离在双节点 OpenShift 集群中验证 etcd 健康状况"。
2.3.5. 在带有隔离的双节点 OpenShift 集群中验证 etcd 健康状况 复制链接链接已复制到粘贴板!
完成节点恢复或维护过程后,验证 control plane 节点和 etcd 是否在正确运行。
先决条件
-
您可以使用具有
cluster-admin权限的用户访问集群。 - 您可以通过 SSH 访问至少一个 control plane 节点。
流程
运行以下命令检查整个节点状态:
oc get nodes
$ oc get nodesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令验证 control plane 节点是否处于
Ready状态,表示它们是否可以接收调度的工作负载。运行以下命令,验证
cluster-etcd-operator的状态:oc describe co/etcd
$ oc describe co/etcdCopy to Clipboard Copied! Toggle word wrap Toggle overflow cluster-etcd-operator管理并报告 etcd 设置的健康状况。查看其状态可帮助您识别任何持续的问题或降级条件。运行以下命令来查看 etcd 成员列表:
oc rsh -n openshift-etcd <etcd_pod> etcdctl member list -w table
$ oc rsh -n openshift-etcd <etcd_pod> etcdctl member list -w tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令显示当前的 etcd 成员及其角色。查找标记为 learner
的任何节点,这表示它们正在成为投票成员。在 control plane 节点上运行以下命令来查看 Pacemaker 资源状态:
sudo pcs status --full
$ sudo pcs status --fullCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令提供 Pacemaker 管理的所有资源的详细概述。您必须确保满足以下条件:
- 两个节点都在线。
-
kubelet和etcd资源正在运行。 - 两个节点的隔离都正确配置。