配置节点自动修复功能

本页面介绍如何为 VMware 上的 Anthos 集群 (GKE On-Prem) 启用节点自动修复功能。

节点自动修复功能会持续检测并修复集群中运行状况不佳的节点。此功能默认处于停用状态。您可以在管理员或用户集群创建期间启用该功能。您还可以为现有用户集群启用此功能,但不为现有管理员集群启用该功能。

运行状况不佳条件

以下条件表明节点的运行状况不佳:

  • 节点条件 NotReady 处于 true 大约 10 分钟。

  • 成功创建后 10 分钟左右,机器处于 Unavailable 状态。

  • 虚拟机创建后 30 分钟左右,机器处于 Available 状态。

  • 没有与机器对应的节点对象(nodeRef 为 nil)处于 Available 状态大约 10 分钟。

  • 节点条件 DiskPressure 处于 true 大约 30 分钟。

修复策略

如果节点满足上述列表中的至少一个条件,Anthos clusters on VMware 将对节点启动修复。

修复操作会排空运行状况不佳的节点并创建一个新的虚拟机。如果节点排空失败一个小时,则修复操作会强制排空并安全分离所连接 Kubernetes 托管的磁盘。

如果同一 MachineDeployment 中有多个运行状况不佳的节点,则一次只能对其中一个节点执行修复操作。

v1 集群配置文件

如需启用节点自动修复功能,您必须使用 v1 配置文件(v1 管理员集群配置文件v1 用户集群配置文件)v0 配置文件不支持节点自动修复功能。

为新集群启用节点自动修复功能

管理员用户集群配置文件中,将 autoRepair.enabled 设置为 true

autoRepair:
  enabled: true

继续执行创建管理员用户集群的步骤。

为现有用户集群启用节点自动修复功能:

用户集群配置文件中,将 autoRepair.enabled 设置为 true

autoRepair:
  enabled: true

更新集群:

gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_KUBECONFIG

替换以下内容:

  • USER_CLUSTER_CONFIG:用户集群配置文件的路径

  • ADMIN_KUBECONFIG:管理员集群 kubeconfig 文件的路径

为用户集群停用节点自动修复功能

用户集群配置文件中,将 autoRepair.enabled 设置为 false

autoRepair:
  enabled: false

更新集群:

gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_KUBECONFIG

为管理员集群停用节点自动修复功能

如需为管理员集群停用节点自动修复功能,请删除 cluster-health-controller 部署:

kubectl --kubeconfig ADMIN_KUBECONFIG] delete deployment cluster-health-controller --namespace kube-system

调试节点自动修复功能

您可以通过在管理员集群中描述机器和节点对象来调查节点自动修复功能的问题。示例如下:

列出机器对象:

kubectl --kubeconfig kubeconfig get machines

输出:

default     gke-admin-master-wc
default     gke-admin-node-7458969ff8-5cg8d
default     gke-admin-node-7458969ff8-svqj7
default     xxxxxx-user-cluster-41-25j8d-567f9c848f-fwjqt

描述其中一个机器对象:

kubectl --kubeconfig kubeconfig describe machine gke-admin-master-wcbrj

在输出中,查找来自 cluster-health-controller 的事件。

同样,您可以列出和描述节点对象。例如:

kubectl --kubeconfig kubeconfig get nodes
...
kubectl --kubeconfig kubeconfig describe node gke-admin-master-wcbrj

手动修复节点

如果自动修复逻辑未涵盖节点问题,或者您未启用节点自动修复功能,则可以手动修复节点。此操作会删除并重新创建节点。

获取与节点对应的机器对象的名称:

kubectl --kubeconfig KUBECONFIG get machines

KUBECONFIG 替换为管理员或用户集群 kubeconfig 文件的路径。

向机器对象添加 repair 注释:

kubectl annotate --kubeconfig KUBECONFIG machine MACHINE_NAME onprem.cluster.gke.io/repair-machine=true

MACHINE_NAME 替换为机器对象的名称。

删除 Machine 对象:

kubectl delete --kubeconfig KUBECONFIG machine MACHINE_NAME