ノードの自動修復


このページでは、ノードの自動修復の仕組みと、Standard Google Kubernetes Engine(GKE)クラスタでこの機能を使用する方法について説明します。

ノードの自動修復は、GKE クラスタ内のノードの実行状態を正常に保つための機能です。この機能を有効にすると、GKE でクラスタ内の各ノードのヘルス状態が定期的にチェックされます。ノードが長期にわたって連続してヘルスチェックに失敗すると、GKE はそのノードの修復プロセスを開始します。

Autopilot と Standard の設定

Autopilot クラスタは常にノードを自動で修復します。この設定は無効にできません。

Standard クラスタでは、新しいノードプールに対するノードの自動修復は、デフォルトで有効になっています。既存のノードプールに対する自動修復を無効にすることはできますが、デフォルト構成のままにしておくことをおすすめします。

修復基準

GKE はノードのヘルス ステータスを使用して、ノードを修復する必要があるかどうかを判別します。Ready ステータスを報告しているノードは、正常と見なされます。しきい値として指定された時間の間、ノードが連続して異常ステータスを報告すると、GKE は修復アクションをトリガーします。 異常ステータスとは、次のような状況を意味します。

  • しきい値として指定された時間の間(約 10 分間)、ノードが連続して NotReady ステータスを報告する。
  • しきい値として指定された時間の間(約 10 分間)、ノードがステータスを何も報告しない。
  • ノードのブートディスクが長期間(約 30 分間)にわたり容量不足になっている。

ノードのヘルスシグナルは、kubectl get nodes コマンドを使用して、いつでも手動で確認できます。

ノードの修復プロセス

修復を必要とするノードが GKE によって検出されると、そのノードはドレインされ、再作成されます。GKE はドレインが完了するまで 1 時間待ちます。ドレインが完了しない場合、ノードはシャットダウンされ、新しいノードが作成されます。

複数のノードで修復が必要な場合、GKE はそれらのノードを並行して修復することもできます。GKE は、クラスタのサイズと障害が発生したノードの数に応じて修復の数を調整します。大規模なクラスタの場合、GKE はより多くのノードを並列して修復しますが、異常なノードの数が増えると並列で修復するノードの数が少なくなります。

修復プロセスの最中にノードの自動修復を無効にした場合、処理中の修復はキャンセルされず、修復の対象になっているすべてのノードの修復が引き続き行われます。

ノード修復履歴

GKE は、自動修復イベントのログエントリを生成します。ログを確認するには、次のコマンドを実行します。

gcloud container operations list

TPU スライスノードでのノードの自動修復

マルチホスト TPU スライス ノードプール内の TPU スライスノードが異常で、自動修復が必要な場合、ノードプール全体が再作成されます。TPU スライスノードの状態の詳細については、TPU スライスノードの自動修復をご覧ください。

既存の Standard ノードプールの自動修復を有効にする

ノードの自動修復は、ノードプール単位で有効にします。

Standard クラスタの既存のノードプールで自動修復が無効になっている場合は、次の手順で有効にします。

gcloud

gcloud container node-pools update POOL_NAME \
    --cluster CLUSTER_NAME \
    --region=COMPUTE_REGION \
    --enable-autorepair

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

  • POOL_NAME: ノードプールの名前。
  • CLUSTER_NAME: Standard クラスタの名前。
  • COMPUTE_REGION: クラスタの Compute Engine のリージョン。ゾーンクラスタの場合は、--zone COMPUTE_ZONE オプションを使用します。

コンソール

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタのリストで、変更するクラスタの名前をクリックします。

  3. [ノード] タブをクリックします。

  4. [ノードプール] で、変更するノードプールの名前をクリックします。

  5. [ノードプールの詳細] ページで、[ 編集] をクリックします。

  6. [管理] で、[自動修復を有効化] チェックボックスをオンにします。

  7. [保存] をクリックします。

Standard ノードプールでノードの自動修復が有効になっていることを確認する

ノードの自動修復は、ノードプール単位で有効になります。クラスタのノードプールでノードの自動修復が有効になっていることは、Google Cloud CLI または Google Cloud コンソールで確認できます。

gcloud

ノードプールの詳細を取得します。

gcloud container node-pools describe NODE_POOL_NAME \
--cluster=CLUSTER_NAME

ノードの自動修復が有効になっている場合、コマンドの出力には次の行が含まれます。

management:
  ...
  autoRepair: true

コンソール

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. Google Kubernetes Engine ページで、検査するノードプールのクラスタ名をクリックします。

  3. [ノード] タブをクリックします。

  4. [ノードプール] で、検査するノードプールの名前をクリックします。

  5. [管理] の [自動修復] フィールドで、自動修復が有効になっていることを確認します。

ノードの自動修復を無効にする

Standard クラスタでは、gcloud CLI または Google Cloud コンソールを使用して、既存のノードプールに対するノードの自動修復を無効にできます。

gcloud

gcloud container node-pools update POOL_NAME \
    --cluster CLUSTER_NAME \
    --region=COMPUTE_REGION \
    --no-enable-autorepair

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

  • POOL_NAME: ノードプールの名前。
  • CLUSTER_NAME: Standard クラスタの名前。
  • COMPUTE_REGION: クラスタの Compute Engine のリージョン。ゾーンクラスタの場合は、--zone COMPUTE_ZONE オプションを使用します。

コンソール

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタのリストで、変更するクラスタの名前をクリックします。

  3. [ノード] タブをクリックします。

  4. [ノードプール] で、変更するノードプールの名前をクリックします。

  5. [ノードプールの詳細] ページで、[ 編集] をクリックします。

  6. [管理] で、[自動修復を有効化] チェックボックスをオフにします。

  7. [保存] をクリックします。

次のステップ