ノードの自動修復の構成

このページでは、Anthos clusters on VMware(GKE On-Prem) クラスタのノード自動修復を有効にする方法について説明します。

ノードの自動修復機能は、クラスタ内の異常なノードを継続的に検出して修復します。この機能はデフォルトで無効になっています。この機能は、管理クラスタまたはユーザー クラスタの作成時に有効にできます。既存のユーザー クラスタでこの機能を有効にすることもできますが、既存の管理クラスタで有効にすることはできません。

異常であることの条件

次の状態は、ノードが異常であることを示します。

  • ノード条件 NotReady が約 10 分間、true である。

  • 正常に作成されてから、マシンの状態が約 10 分間 Unavailable である。

  • VM が作成されてから、マシンの状態が約 30 分間 Available にならない。

  • 約 10 分間 Available 状態のマシンに対応するノード オブジェクトがない(nodeRef が nil)。

  • ノード条件 DiskPressure が約 30 分間、true である。

修復方法

Anthos clusters on VMware では、ノードが上記の一覧の条件のうち少なくとも 1 つを満たしている場合に、ノードでの修復を開始します。

修復によって異常なノードがドレインされ、新しい VM が作成されます。ノードのドレインが 1 時間失敗しつづけると、修復プロセスによってドレインが強制され、アタッチされた Kubernetes 管理ディスクが安全にアタッチ解除されます。

同じ MachineDeployment に異常なノードが複数ある場合、一度に修復が行われるのはそのうちのいずれか 1 つのノードに対してのみです。

v1 クラスタの構成ファイル

ノードの自動修復を有効にするには、v1 構成ファイル(v1 管理クラスタ構成ファイルまたは v1 ユーザー クラスタ構成ファイル)を使用する必要があります。ノードの自動修復は v0 構成ファイルではサポートされていません。

新しいクラスタのノードの自動修復を有効にする

管理クラスタ、またはユーザー クラスタの構成ファイルで、autoRepair.enabledtrue に設定します。

autoRepair:
  enabled: true

管理クラスタ、またはユーザー クラスタの作成手順を続行します。

既存のユーザー クラスタのノードの自動修復を有効にする

ユーザー クラスタの構成ファイルで、autoRepair.enabledtrue に設定します。

autoRepair:
  enabled: true

クラスタを更新します。

gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_KUBECONFIG

次のように置き換えます。

  • USER_CLUSTER_CONFIG: ユーザー クラスタの構成ファイルのパス

  • ADMIN_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス

ユーザー クラスタのノードの自動修復を無効にする

ユーザー クラスタの構成ファイルで、autoRepair.enabledfalse に設定します。

autoRepair:
  enabled: false

クラスタを更新します。

gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_KUBECONFIG

管理クラスタのノードの自動修復を無効にする

管理クラスタのノードの自動修復を無効にするには、cluster-health-controller Deployment を削除します。

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

マシン オブジェクトのうちの 1 つを記述します。

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 は、マシン オブジェクトの名前に置き換えます。

マシン オブジェクトを削除します。

kubectl delete --kubeconfig KUBECONFIG machine MACHINE_NAME