ノードをメンテナンス モードにする

ノードの修復またはメンテナンスが必要な場合は、まずノードをメンテナンス モードにする必要があります。ノードをメンテナンス モードにすると、Pod / ワークロードがドレインされ、Pod のスケジューリングからノードが除外されます。メンテナンス モードでは、Pod トラフィックが中断されるリスクなしに、ノードを操作できます。

仕組み

Anthos clusters on bare metal は、ノードをメンテナンス モードにする手段を提供します。この方法により、他のクラスタ コンポーネントで、ノードがメンテナンス モードであることを正しく認識できます。ノードをメンテナンス モードにすると、ノードで追加の Pod をスケジュールできず、既存の Pod が停止します。

メンテナンス モードを使用する代わりに、特定のノードで kubectl cordonkubectl drain などの Kubernetes コマンドを手動で使用できます。Anthos clusters on bare metal 1.12.0(anthosBareMetalVersion: 1.12.0)またはそれ以前のバージョンを実行する場合、メンテナンス モード手順を使用しない場合、ノードが閉鎖解除されるという既知の問題をご覧ください。

メンテナンス モードのプロセスを使用すると、Anthos clusters on bare metal は次の処理を行います。

  • Node Taints が指定されたノードに追加され、ノードで Pod をスケジュールできず、実行もできないことを示します。

  • ノードが Pod の停止を待機して停止するのを防ぐために、20 分のタイムアウトが適用されます。すべての taint を容認するように構成されている場合、またはファイナライザを使用している場合、Pod は停止しないことがあります。Anthos clusters on bare metal はすべての Pod を停止しようとしますが、タイムアウトを超えるとノードがメンテナンス モードになります。このタイムアウトにより、実行中の Pod がアップグレードをブロックできなくなります。

  • ノードで VM ベースのワークロードが実行されている場合、ベアメタル版 Anthos クラスタは仮想マシン インスタンス(VMI)Pod に NodeSelector を適用してから、Pod を停止します。NodeSelector は、ノードがメンテナンス モードを解除されたときに、VMI Pod が同じノードで再起動されるようにします。

ノードをメンテナンス モードにする

クラスタ構成ファイルの maintenanceBlocks で選択したノードの IP 範囲を指定して、メンテナンス モードにするノードを選択します。選択するノードは、準備完了状態で、クラスタで機能している必要があります。

ノードをメンテナンス モードにするには:

  1. クラスタ構成ファイルを編集して、メンテナンス モードにするノードを選択します。

    任意のエディタを使用して構成ファイルを編集するか、次のコマンドを実行して、クラスタのカスタム リソースを直接編集できます。

    kubectl -n CLUSTER_NAMESPACE edit cluster CLUSTER_NAME

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

    • CLUSTER_NAMESPACE: クラスタの名前空間。
    • CLUSTER_NAME: クラスタの名前。
  2. メンテナンス モードにするノードの単一の IP アドレスかアドレス範囲を指定するため、クラスタ構成ファイルに maintenanceBlocks セクションを追加します。

    次のサンプルでは、IP アドレスの範囲を指定して複数のノードを選択する方法を示します。

    metadata:
      name: my-cluster
      namespace: cluster-my-cluster
    spec:
      maintenanceBlocks:
        cidrBlocks:
        - 172.16.128.1-172.16.128.64
    
  3. 更新したクラスタ構成を保存して適用します。

    ベアメタル版 Anthos クラスタで、ノードをメンテナンス モードにします。

  4. 次のコマンドを実行して、クラスタ内のノードのステータスを取得します。

    kubectl get nodes -n CLUSTER_NAME

    結果は次のようになります。

    NAME                              STATUS                     ROLES    AGE     VERSION
    user-anthos-baremetal-01          Ready                      master   2d22h   v1.17.8-gke.16
    user-anthos-baremetal-04          Ready                      <none>   2d22h   v1.17.8-gke.16
    user-anthos-baremetal-05          Ready,SchedulingDisabled   <none>   2d22h   v1.17.8-gke.16
    user-anthos-baremetal-06          Ready                      <none>   2d22h   v1.17.8-gke.16
    

    ステータスが SchedulingDisabled の場合、ノードはメンテナンス モードです。

  5. 次のコマンドを実行して、メンテナンス モードのノード数を取得します。

    kubectl get nodepools

    レスポンスは次の出力のようになります。

    NAME   READY   RECONCILING   STALLED   UNDERMAINTENANCE   UNKNOWN
    np1    3       0             0         1                  0
    

    このサンプルの UNDERMAINTENANCE 列は、1 つのノードがメンテナンス モードであることを示しています。

    ベアメタル版 Anthos クラスタでは、ノードがメンテナンス モードになると、ノードに次の taint も追加されます。

    • baremetal.cluster.gke.io/maintenance:NoExecute
    • baremetal.cluster.gke.io/maintenance:NoSchedule

ノードのメンテナンス モードを解除する

メンテナンス モードからノードを削除するには:

  1. クラスタの構成ファイルを編集して、メンテナンス モードから削除するノードを消去します。

    任意のエディタを使用して構成ファイルを編集するか、次のコマンドを実行して、クラスタのカスタム リソースを直接編集できます。

    kubectl -n CLUSTER_NAMESPACE edit cluster CLUSTER_NAME

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

    • CLUSTER_NAMESPACE: クラスタの名前空間。
    • CLUSTER_NAME: クラスタの名前。
  2. IP アドレスを編集してメンテナンス モードから特定のノードを削除するか、maintenanceBlocks セクションを削除してメンテナンス モードからすべてを削除します。

  3. 更新したクラスタ構成を保存して適用します。

  4. kubectl コマンドを使用して、ノードのステータスを確認します。