ノードの自動修復

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

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

Autopilot と Standard の設定

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

Standard クラスタでは、新しいノードプールに対するノードの自動修復は、デフォルトで有効になっています。既存のノードプールの自動修復を無効にすることはできますが、デフォルトの構成のままにすることをおすすめします。自動修復を無効にすると、意図しない結果が生じる可能性があります。たとえば、自動修復が無効になっているときに kubectl を使用して異常なノードを削除すると、基盤となる VM インスタンスがクラスタから孤立し、引き続き課金される可能性があります。ノードを削除する必要がある場合は、代わりにノードプールのサイズを変更できます。

修復基準

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

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

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

ノードの修復プロセス

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

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

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

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

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

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

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

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

コンソール

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

    Google Kubernetes Engine に移動

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

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

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

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

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

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

gcloud

gcloud container node-pools update POOL_NAME \
    --cluster CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --enable-autorepair

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

  • POOL_NAME: ノードプールの名前。
  • CLUSTER_NAME: Standard クラスタの名前。
  • CONTROL_PLANE_LOCATION: クラスタのコントロール プレーンの Compute Engine のロケーション。リージョン クラスタの場合はリージョン、ゾーンクラスタの場合はゾーンを指定します。

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

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

コンソール

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

    Google Kubernetes Engine に移動

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

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

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

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

gcloud

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

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

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

management:
  ...
  autoRepair: true

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

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

コンソール

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

    Google Kubernetes Engine に移動

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

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

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

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

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

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

gcloud

gcloud container node-pools update POOL_NAME \
    --cluster CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --no-enable-autorepair

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

  • POOL_NAME: ノードプールの名前。
  • CLUSTER_NAME: Standard クラスタの名前。
  • CONTROL_PLANE_LOCATION: クラスタのコントロール プレーンの Compute Engine のロケーション。リージョン クラスタの場合はリージョン、ゾーンクラスタの場合はゾーンを指定します。

最近の自動修復イベントに関する情報を取得する

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

  1. オペレーションを一覧表示します。

    gcloud container operations list --location=CONTROL_PLANE_LOCATION
    

    CONTROL_PLANE_LOCATION は、クラスタのコントロール プレーンの Compute Engine のロケーションに置き換えます。リージョン クラスタの場合はリージョン、ゾーンクラスタの場合はゾーンを指定します。

  2. 次のコマンドを実行して、ノードの自動修復オペレーションがトリガーされた理由を確認します。

    gcloud container operations describe OPERATION_NAME --location=CONTROL_PLANE_LOCATION
    

    OPERATION_NAME は、前のコマンドの出力に表示されたオペレーションの名前に置き換えます。

コマンドの出力で、修復オペレーションがトリガーされた理由を示す operationReason を確認します。たとえば、AUTO_REPAIR_LONG_UNHEALTHY は、ノードが 10 分間異常だったため、ノードの自動修復がトリガーされたことを意味します。

次のステップ