本主题介绍如何为使用 v1beta1 API 置备的 TKG 服务 集群配置 MachineHealthCheck。

v1beta1 集群的 MachineHealthCheck

MachineHealthCheck 是一个 Kubernetes 集群 API 资源,它定义了用于修复不正常计算机的条件。在 Kubernetes 中,计算机是可以运行 kubelet 的自定义资源。在 vSphere IaaS control plane 中,Kubernetes 计算机资源由 vSphere 虚拟机提供。有关详细信息,请参阅上游 文档

使用 TKG 服务 置备集群时,系统会创建默认 MachineHealthCheck 对象,一个对象用于所有控制平面,一个对象用于每个计算机部署。从 vSphere 8 Update 3 开始,可以为 v1beta1 集群配置计算机运行状况检查。支持的设置包括:

  • maxUnhealthy
  • nodeStartupTimeout
  • unhealthyConditions
  • unhealthyRange
下表介绍了支持的计算机运行状况检查操作。
表 1. 计算机运行状况检查
字段 描述
maxUnhealthy

string

绝对数字或百分比

当不正常计算机的数量超过该值时,将不会执行修复。
nodeStartupTimeout

string

XhXmXs 形式表示的持续时间(小时、分钟、秒)

如果所创建的任何计算机加入集群所用的时间超过此持续时间,则会将这些虚拟机视为出现故障并对其进行修复。
unhealthyConditions

unhealthyConditions 类型的数组 []

可用条件类型:

[ReadyMemoryPressureDiskPressurePIDPressureNetworkUnavailable]

可用条件状态:

[TrueFalseUnknown]

用于确定控制平面节点是否被视为不正常的条件列表。
unhealthyRange string

仅当被“选择器”判定为不正常的计算机数量在 unhealthyRange 范围内时,才允许进行进一步修复。

优先级高于 maxUnhealthy。例如:“[3-5]”表示仅当同时满足以下两个条件时才允许进行修复:(a) 至少有 3 个不正常的计算机,(b) 最多有 5 个不正常的计算机时。

注: MachineHealthCheck 对象部署用于 v1alpha3 集群,但不可配置。有关详细信息,请参见 使用 Kubectl 检查 TKG 集群计算机运行状况

MachineHealthCheck 示例

以下示例为给定 machineDeployment 配置 machineHealthCheck
...
  topology:
    class: tanzukubernetescluster
    version: v1.28.8---vmware.1-fips.1-tkg.2
    controlPlane:
      machineHealthCheck:
        enable: true
        maxUnhealthy: 100%
        nodeStartupTimeout: 4h0m0s
        unhealthyConditions:
        - status: Unknown
          timeout: 5m0s
          type: Ready
       - status: "False"
          timeout: 12m0s
          type: Ready
      ...
    workers:
      machineDeployments:
      - class: node-pool
        failureDomain: np1
        machineHealthCheck:
          enable: true
          maxUnhealthy: 100%
          nodeStartupTimeout: 4h0m0s
          unhealthyConditions:
          - status: Unknown
            timeout: 5m0s
            type: Ready
          - status: "False"
            timeout: 12m0s
            type: Ready

使用 Kubectl 修补 MachineHealthCheck

要在置备 v1beta1 集群后为其更新 MachineHealthCheck,请使用 patch 方法。
小心: 以下说明提供了有关修补现有集群的一般指导。使用的值取决于您的环境以及要修补的已部署集群。请考虑使用 Tanzu CLI 为现有集群修补 MachineHealthCheck
  1. 从集群资源定义中获取 machineDeployment
    kubectl get cluster CLUSTER_NAME -o yaml

    spec.topology.workers.machineDeployments 部分中,您应该会看到标识每个 machineDeployment 的值。

  2. 删除工作节点 MachineHealthCheck。
    kubectl patch cluster <Cluster Name> -n <cluster namespace>  --type json -p='{"op": "replace", "path": "/spec/topology/workers/machineDeployments/<index>/machineHealthCheck", "value":{"enable":false}}'
  3. 删除控制平面 MachineHealthCheck。
    kubectl patch cluster <cluster-name> -n <cluster-namespace> --type json -p='{"op": "replace", "path": "/spec/topology/controlPlane/machineHealthCheck", "value":{"enable":false}}'
  4. 使用所需设置创建或更新控制平面 MachineHealthCheck。
    kubectl patch cluster <cluster-name> -n <cluster-namespace> --type json -p='[{"op": "replace", "path": "/spec/topology/controlPlane/machineHealthCheck", "value":{"enable":true,"nodeStartupTimeout":"1h58m","unhealthyConditions":[{"status":"Unknown","timeout":"5m10s","type":"Unknown"},{"status":"Unknown","timeout":"5m0s","type":"Ready"}],"maxUnhealthy":"100%"}}]'
  5. 使用所需设置创建或更新工作节点 MachineHealthCheck。
    kubectl patch cluster <cluster-name> -n <cluster-namespace> --type json -p='[{"op": "replace", "path": "/spec/topology/workers/machineDeployments/<index>/machineHealthCheck", "value":{"enable":true,"nodeStartupTimeout":"1h58m","unhealthyConditions":[{"status":"Unknown","timeout":"5m10s","type":"Unknown"},{"status":"Unknown","timeout":"5m0s","type":"Ready"}],"maxUnhealthy":"100%"}}]'

使用 Tanzu CLI 配置 MachineHealthCheck

可以使用 Tanzu CLI 为 v1beta1 集群配置 MachineHealthCheck。

例如,运行以下命令以创建或更新控制平面 MachineHealthCheck 设置。
tanzu cluster mhc control-plane set <cluster-name> --node-startup-timeout 2h7m10s
运行以下命令以检查设置是否已更新且未协调。
tanzu cluster mhc control-plane get <cluster-name>
运行以下命令以创建或更新计算机部署 MachineHealthCheck 设置。
tanzu cluster mhc node set <cluster-name> --machine-deployment node-pool-1 --node-startup-timeout 1h59m0s
运行以下命令以检查设置是否已更新且未协调。
tanzu cluster mhc node get <cluster-name> -m <cluster-name>-node-pool-1-nr7r5

除了获取和设置之外,系统还支持删除操作。例如:

对于控制平面,可以使用以下命令:
tanzu cluster mhc control-plane delete <cluster-name>
对于节点,可以使用以下命令:
tanzu cluster mhc <cluster-name> --machine-deployment <machine deployment name>