配置 MachineHealthCheck
概述
MachineHealthCheck 是 Cluster API 中的一个资源,允许用户定义 Cluster 中的 Machines 在什么条件下应被视为不健康。MachineHealthCheck 在 management cluster 上定义,并作用于特定的 workload cluster。
在定义 MachineHealthCheck 时,用户需要为其定义的每个条件指定一个超时时间,用于检查 Machine 的 Node。如果这些条件中的任意一项在超时时间内持续满足,Machine 将被修复。默认情况下,修复 Machine 的操作应触发创建一个新的 Machine 来替换失败的那个,但 provider 也可以接入更复杂的外部修复方案。
WARNING
MachineHealthCheck 依赖 Cluster API 的滚动更新机制。在滚动更新期间,任何之前附加的磁盘都会被移除,并在新创建的 machines 上替换为新的磁盘。请确保没有集群功能或 workload 依赖存储在原始磁盘上的数据。
前提条件
在尝试配置 MachineHealthCheck 之前,你应该已经有一个可正常工作的 management cluster,并且至少已部署一个 MachineDeployment 或 KubeadmControlPlane。
为 MachineDeployment 配置 MachineHealthCheck
要为 MachineDeployment 配置 MachineHealthCheck,你需要在 management cluster 中创建一个 MachineHealthCheck 资源。
为 control plane 节点配置 MachineHealthCheck
WARNING
control plane 节点的限制与风险
- 在 Kubelet 停机时发生 Etcd Leader 失败: 如果不健康的节点当前是 etcd leader,并且其
kubelet服务已停止,自动修复可能会失败。Cluster API 会尝试在删除节点之前迁移 etcd leadership,但它依赖kubelet将请求代理到本地 etcd 实例。如果kubelet无响应,则无法进行 leadership 转移,从而阻止轮转。 - Quorum 丢失风险: 在为 control plane 节点配置
MachineHealthCheck时请谨慎。过于激进的超时时间或配置错误可能导致移除多个 control plane 节点,从而可能破坏 etcd quorum,并使集群的 control plane 无法使用。