このトピックでは、v1beta1 API を使用してプロビジョニングされた TKG サービス クラスタの MachineHealthCheck を構成する方法について説明します。

v1beta1 クラスタの MachineHealthCheck

MachineHealthCheck は、健全でないマシンを修正するための条件を定義する Kubernetes クラスタ API リソースです。Kubernetes では、マシンは kubelet を実行できるカスタム リソースです。vSphere IaaS control plane では、Kubernetes マシン リソースが vSphere 仮想マシンによってバッキングされます。詳細については、アップストリームのドキュメントを参照してください。

TKG サービス を使用してクラスタをプロビジョニングすると、デフォルトの MachineHealthCheck オブジェクトが作成されます。1 つはすべての制御プレーン用、もう 1 つは各マシンのデプロイ用です。vSphere 8 Update 3 以降では、v1beta1 クラスタに対してマシンの健全性チェックを構成できます。サポートされる設定は次のとおりです。

  • maxUnhealthy
  • nodeStartupTimeout
  • unhealthyConditions
  • unhealthyRange
次の表に、サポートされているマシンの健全性チェックの操作を示します。
表 1. マシンの健全性チェック
フィールド 説明
maxUnhealthy

文字列

絶対数またはパーセンテージ

健全でないマシンの数がこの値を超えると、修正は実行されません。
nodeStartupTimeout

文字列

XhXmXs 形式(時間、分、秒)の期間

クラスタに参加する期間よりも作成に時間がかかるマシンは、問題があると見なされて修正されます。
unhealthyConditions

unhealthyConditions タイプの配列 []

使用可能な条件タイプは次のとおりです。

[Ready, MemoryPressure, DiskPressure, PIDPressure, NetworkUnavailable]

使用可能な条件ステータスは次のとおりです。

[True, False, Unknown]

制御プレーン ノードが健全でないと見なされるかどうかを決定する条件のリスト。
unhealthyRange 文字列

「セレクタ」によって健全でないとして選択されたマシンの数が unhealthyRange の範囲内にある場合にのみ追加の修正が許可されます。

maxUnhealthy よりも優先されます。たとえば、「[3-5]」は、(a) 3 台以上の健全でないマシンがあり、(かつ) (b) 最大 5 台の健全でないマシンがある場合にのみ修正が許可されることを意味します。

注: MachineHealthCheck オブジェクトは v1alpha3 クラスタ用にデプロイされますが、構成できません。詳細については、 kubectl を使用した TKG クラスタのマシンの健全性の確認を参照してください。

MachineHealthCheck の例

次の例では、特定の machineDeploymentmachineHealthCheck を構成します。
...
  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

get と set に加えて、システムでは削除 (delete) 操作がサポートされます。例:

制御プレーンでは、次のコマンドを使用できます。
tanzu cluster mhc control-plane delete <cluster-name>
ノードでは、次のコマンドを使用できます。
tanzu cluster mhc <cluster-name> --machine-deployment <machine deployment name>