配置 MachineHealthCheck
概述
MachineHealthCheck 是 Cluster API 中的一个资源,允许用户定义在何种条件下集群中的 Machines 应被视为不健康。MachineHealthCheck 在管理集群中定义,并针对特定的业务集群进行作用域限定。
在定义 MachineHealthCheck 时,用户需要为他们定义的每个检查 Machine 的 Node 的条件指定一个超时时间。如果这些条件中的任何一个在超时时间内持续满足,Machine 将被修复。默认情况下,修复 Machine 的操作应触发创建一个新的 Machine 来替换故障的实例,但提供者可以接入更复杂的外部修复方案。
WARNING
MachineHealthCheck 依赖于 Cluster API 的滚动更新机制。在滚动更新期间,任何之前挂载的磁盘都会被移除,并在新创建的机器上替换为新的磁盘。请确保集群功能或工作负载不依赖于原始磁盘上存储的数据。
前提条件
在尝试配置 MachineHealthCheck 之前,您应当拥有一个可用的管理集群,并且至少部署了一个 MachineDeployment 或 KubeadmControlPlane。
为 MachineDeployment 配置 MachineHealthCheck
要为 MachineDeployment 配置 MachineHealthCheck,您需要在管理集群中创建一个 MachineHealthCheck 资源。
为控制平面节点配置 MachineHealthCheck
WARNING
控制平面节点的限制和风险
- Etcd Leader 故障伴随 Kubelet 停止: 如果不健康的节点是当前的 etcd leader 且其
kubelet服务停止,自动修复可能会失败。Cluster API 会尝试在删除节点之前迁移 etcd 领导权,但依赖于kubelet代理请求到本地 etcd 实例。如果kubelet无响应,领导权转移无法进行,导致轮换被阻塞。 - 丢失法定人数的风险: 配置控制平面节点的
MachineHealthCheck时需谨慎。过于激进的超时设置或配置错误可能导致多个控制平面节点被移除,进而破坏 etcd 的法定人数,使集群控制平面不可用。