配置 MachineHealthCheck
概述
MachineHealthCheck 是 Cluster API 中的一种资源,允许用户定义用于判断 Cluster 中 Machine 是否不健康的条件。MachineHealthCheck 定义在管理集群上,并限定作用于特定的业务集群。
定义 MachineHealthCheck 时,用户需要为所定义的每个条件指定超时时间,这些条件用于检查 Machine 的节点。如果任一条件在超时时间内持续满足,系统将对该 Machine 执行修复。默认情况下,修复 Machine 的操作应触发创建新的 Machine 来替换故障 Machine,但 provider 可以接入更复杂的外部修复方案。
WARNING
MachineHealthCheck 依赖 Cluster API 的滚动更新机制。在滚动更新期间,之前挂载的磁盘会被移除,并在新创建的 Machine 上替换为新磁盘。请确保没有任何集群功能或工作负载依赖存储在原始磁盘上的数据。
前提条件
在尝试配置 MachineHealthCheck 之前,您应拥有一个正常运行的管理集群,并且其中至少已部署一个 MachineDeployment 或 KubeadmControlPlane。若要在 global 集群本身上使用 MachineHealthCheck,必须先在 global 上安装基础设施 provider 和 Cluster Bootstrap Provider;请参阅在 Alauda OS 集群上管理节点。
为 MachineDeployment 配置 MachineHealthCheck
要为 MachineDeployment 配置 MachineHealthCheck,您需要在管理集群中创建 MachineHealthCheck 资源。
为控制平面节点配置 MachineHealthCheck
WARNING
控制平面节点的限制和风险
- Etcd leader 故障与 Kubelet 停机:如果不健康的节点当前是 etcd leader,且其
kubelet服务已停止,自动修复可能会失败。Cluster API 会在删除节点前尝试迁移 etcd leader,但依赖kubelet将请求代理到本地 etcd 实例。如果kubelet无响应,则无法继续执行 leader 转移,从而阻止轮换。 - 丢失法定人数的风险:为控制平面节点配置
MachineHealthCheck时请谨慎。过于激进的超时时间或错误配置可能导致移除多个控制平面节点,从而破坏 etcd 法定人数,使集群的控制平面无法使用。WARNING