本主題介紹如何為使用 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. 刪除 worker 節點 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. 使用所需設定建立或更新 worker 節點 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>