このページでは、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.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
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