ノードの自動アップグレード

このページでは、Google Kubernetes Engine(GKE)でノードの自動アップグレードを構成する方法について説明します。

概要

ノードの自動アップグレードを有効にすると、コントロール プレーンが更新されるときに、クラスタのコントロール プレーンのバージョンを使用してクラスタ内のノードが最新の状態に維持されるようになります。Google Cloud Console または gcloud コマンドを使用して新しいクラスタやノードプールを作成するときは、デフォルトでノード自動アップグレードが有効になっています。

クラスタとノードのアップグレードの詳細を確認できます。

ノードの自動アップグレードには次のようなメリットがあります。

  • 管理オーバーヘッドの削減: コントロール プレーンがアップグレードされたときに、ノードを手動でトラッキングして更新する必要がなくなります。
  • セキュリティの向上: セキュリティ上の問題を解決するために、新しいバイナリがリリースされることがあります。自動アップグレードでは、GKE によって自動的にセキュリティ アップデートが適用され、最新の状態が保たれます。
  • 使いやすさ: ノードを最新の状態に保ち、Kubernetes の最新の機能を使用することが簡単にできます。

自動アップグレードが有効になっているノードプールでは、選択条件(リリースノートに記載)を満たすとアップグレードがスケジュール設定されます。クラスタとフリートの安定性を確保するために、ロールアウトが数週間にわたって段階的に行われます。アップグレードが実行されると、ノードがドレインされ、現在のクラスタ コントロール プレーンのバージョンと一致するように再作成されます。ノード VM のブートディスクに加えた変更は、ノードが再作成されると無効になります。ノードの再作成後も変更を維持するには、DaemonSet を使用します。

アルファ版のクラスタでは、ノードの自動アップグレードを使用できません。Windows Server ノードプールがあるクラスタを使用している場合は、ノードの自動アップグレードを有効にする前に Windows Server ノードプールのアップグレードを確認してください。

既存のノードプールの自動アップグレードの状態を確認する

ノードプールの自動アップグレードが有効か無効かを確認するには、Google Cloud コンソールや gcloud コマンドを使用します。

gcloud

ノードプールの自動アップグレードの状態を確認するには、次のコマンドを実行します。

gcloud container node-pools describe NODE_POOL_NAME \
  --cluster CLUSTER_NAME \
  --zone COMPUTE_ZONE

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

  • NODE_POOL_NAME: ノードプールの名前。
  • CLUSTER_NAME: ノードプールが含まれているクラスタの名前。
  • COMPUTE_ZONE: クラスタのコンピューティング ゾーン

Console

ノードプールの自動アップグレードの状態を確認するには、次の手順を行います。

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

    Google Kubernetes Engine に移動

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

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

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

  5. [ノードプールの詳細] ページの [管理] で、[自動アップグレード] フィールドの値を確認します。

既存のノードプールのノードの自動アップグレードを有効にする

Google Cloud コンソールまたは gcloud コマンドを使用して新しいクラスタを作成するときは、デフォルトでノード自動アップグレードが有効になっています。

ノード自動アップグレードが無効な場合は有効にできます。

gcloud

既存のノードプールの自動アップグレードを有効にするには、次のコマンドを実行します。

gcloud container node-pools update NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --zone COMPUTE_ZONE \
    --enable-autoupgrade

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

  • NODE_POOL_NAME: ノードプールの名前。
  • CLUSTER_NAME: ノードプールが含まれているクラスタの名前。
  • COMPUTE_ZONE: クラスタのコンピューティング ゾーン

Console

既存のノードプールの自動アップグレードを有効にするには、次の手順を行います。

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

    Google Kubernetes Engine に移動

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

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

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

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

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

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

ノードをアップグレード可能にする際の制御を容易にするには、メンテナンスの時間枠と除外の構成を検討してください。

ノードのアップグレードのステータスを確認する

アップグレードのステータスは、gcloud container operations で確認できます。

クラスタ内の実行中のオペレーションと完了したオペレーションの全リストを表示します。

gcloud container operations list

各オペレーションには、開始時刻と終了時刻、ターゲット クラスタ、ステータスとともに、オペレーション ID とオペレーション タイプが割り当てられています。このリストの表示例を次に示します。

NAME                              TYPE                ZONE           TARGET              STATUS_MESSAGE  STATUS  START_TIME                      END_TIME
operation-1505407677851-8039e369  CREATE_CLUSTER      us-west1-a     my-cluster                          DONE    20xx-xx-xxT16:47:57.851933021Z  20xx-xx-xxT16:50:52.898305883Z
operation-1505500805136-e7c64af4  UPGRADE_CLUSTER     us-west1-a     my-cluster                          DONE    20xx-xx-xxT18:40:05.136739989Z  20xx-xx-xxT18:41:09.321483832Z
operation-1505500913918-5802c989  DELETE_CLUSTER      us-west1-a     my-cluster                          DONE    20xx-xx-xxT18:41:53.918825764Z  20xx-xx-xxT18:43:48.639506814Z

特定のオペレーションに関する詳細情報を取得するには、次のコマンドでオペレーション ID を指定します。

gcloud container operations describe OPERATION_ID

次に例を示します。

gcloud container operations describe operation-1507325726639-981f0ed6
endTime: '20xx-xx-xxT21:40:05.324124385Z'
name: operation-1507325726639-981f0ed6
operationType: UPGRADE_CLUSTER
selfLink: https://container.googleapis.com/v1/projects/.../kubernetes-engine/docs/zones/us-central1-a/operations/operation-1507325726639-981f0ed6
startTime: '20xx-xx-xxT21:35:26.639453776Z'
status: DONE
targetLink: https://container.googleapis.com/v1/projects/.../kubernetes-engine/docs/zones/us-central1-a/clusters/...
zone: us-central1-a

ノードプールのアップグレード設定を確認する

ノードプールで使用されているノードプールのアップグレード戦略の詳細を確認するには、gcloud container node-pools describe コマンドを使用します。Blue/Green アップグレードの場合、アップグレードの現在のフェーズも返されます。

次のコマンドを実行します。

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

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

  • NODE_POOL_NAME: 記述するノードプールの名前。
  • CLUSTER_NAME: 記述するノードプールのクラスタの名前。

このコマンドは、現在のアップグレード設定を出力します。次の例は、Blue/Green アップグレード戦略を使用する場合の出力を示しています。

upgradeSettings:
  blueGreenSettings:
    nodePoolSoakDuration: 1800s
    standardRolloutPolicy:
      batchNodeCount: 1
      batchSoakDuration: 10s
  strategy: BLUE_GREEN

Blue/Green アップグレード戦略を使用している場合は、Blue/Green アップグレード設定とその現在の中間フェーズの詳細も出力に含まれます。次の例は、これがどのように見えるかを示しています。

updateInfo:
  blueGreenInfo:
    blueInstanceGroupUrls:
    - https://www.googleapis.com/compute/v1/projects/{PROJECT_ID}/zones/{LOCATION}/instanceGroupManagers/{BLUE_INSTANCE_GROUP_NAME}
    bluePoolDeletionStartTime: {BLUE_POOL_DELETION_TIME}
    greenInstanceGroupUrls:
    - https://www.googleapis.com/compute/v1/projects/{PROJECT_ID}/zones/{LOCATION}/instanceGroupManagers/{GREEN_INSTANCE_GROUP_NAME}
    greenPoolVersion: {GREEN_POOL_VERSION}
    phase: DRAINING_BLUE_POOL

既存のノードプールのノードの自動アップグレードを無効にする

推奨されるわけではありませんが、基盤となるクラスタがリリース チャネルに登録されていない場合は、既存のノードプールのノードの自動アップグレードを無効にできます。ノードの自動アップグレードを無効にしても、クラスタのコントロール プレーンのアップグレードは妨げられません

ノードの自動アップグレードを無効にする場合は、クラスタのノードがクラスタ バージョンと互換性のあるバージョンを実行するようにすることと、バージョンが Kubernetes のバージョンとバージョン スキューのサポート ポリシーに準拠するようにすることは、お客様の責任になります。サポート終了のバージョンを実行しているノードは、サポート性とバージョン スキューとの互換性を維持するため、自動アップグレードが無効になっていても自動アップグレードされます。

gcloud

既存のノードプールの自動アップグレードを無効にするには、次のコマンドを実行します。

gcloud container node-pools update NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --zone COMPUTE_ZONE \
    --no-enable-autoupgrade

Console

既存のノードプールの自動アップグレードを無効にするには、次の手順を行います。

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

    Google Kubernetes Engine に移動

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

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

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

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

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

  7. [保存] をクリックして、クラスタを変更します。

ワークロードを以前のノード バージョンに移行する(一時的な緩和策)

ノードプールはダウングレードできません。ただし、ノードプールがアップグレードされた後にノード バージョンのダウングレードを行うには、一時的な緩和策として次のガイドラインに従って、ワークロードを目的のノード バージョンに移行してください。

  1. 現在ノードプールでホストされているすべての Pod をホストするため、使用しているサブネット範囲と Pod IP 範囲で、クラスタ内にノードを追加できるかどうかを確認します。サブネット範囲の最大 Pod 数と最大ノード数を確認します。
  2. 移行するノード バージョンがサポート対象かどうかを確認します。

  3. ワークロードの移行が遅くなる可能性がある PodDisruptionBudget のワークロードがノードに存在するかどうかを確認します。

  4. 以前のノード バージョンを使用して、現在ノードプールでホストされているすべての Pod をホストする容量(ノード数)のノードプールを新たに作成します。

  5. 最新バージョンのノードプール上のノードを、kubectl drain <nodename> を使用してドレインします。ドレインは 1 回に 1 ノードずつ行います。ノード上の Pod が新しいノードプール(以前のノード バージョンを実行している)上のノードに移動したことを確認します。

  6. 非常に重要: すべての Pod が、以前のノード バージョンを実行しているノードプール上のノードに移行したことを確認します。

  7. 最新のノードプール バージョンを実行しているノードプールが不要になった場合は削除します。

ノードの自動アップグレードを有効にしてクラスタまたはノードプールを作成する

gcloud

デフォルト ノードプールの自動アップグレードが有効なクラスタを作成するには、gcloud container clusters create コマンドに --enable-autoupgrade フラグを指定します。

gcloud container clusters create CLUSTER_NAME \
    --zone COMPUTE_ZONE \
    --enable-autoupgrade

自動アップグレードが有効なノードプールを作成するには、gcloud container node-pools create コマンドで --enable-autoupgrade フラグを指定します。

gcloud container node-pools create NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --zone COMPUTE_ZONE \
    --enable-autoupgrade

Console

コンソールで作成されたクラスタとノードプールは、デフォルトで自動アップグレードが有効になっています。クラスタおよびノードプールの作成手順については、クラスタを作成するまたはノードプールの追加と管理をご覧ください。

新しいノードプールの自動アップグレードを無効にできます。クラスタ作成ページで、変更するノードプールの名前をクリックし、[自動アップグレードを有効化] をオフにします。

アップグレードの通知を受信する

GKE は Pub/Sub にアップグレードの通知を公開し、クラスタに関する情報を GKE から受け取るためのチャネルをユーザーに提供します。

詳細については、クラスタのアップグレード通知の受信をご覧ください。

サージ アップグレード パラメータを変更する

サージ アップグレード パラメータの変更方法については、サージ アップグレードの構成をご覧ください。

ノードプールのアップグレード中の演習を行う

自動アップグレード中および手動で開始したノードプールのアップグレード中に、次の操作を行えます。

ノードプールのアップグレードをキャンセルする

アップグレードはいつでもキャンセルできます。サージ アップグレードをキャンセルした場合の詳細については、サージ アップグレードをキャンセルするをご覧ください。Blue/Green アップグレードをキャンセルした場合の影響については、Blue/Green アップグレードをキャンセルするをご覧ください。

  1. アップグレードのオペレーション ID を取得します。

    gcloud container operations list
    
  2. アップグレードをキャンセルします。

    gcloud container operations cancel OPERATION_ID
    

詳しくは、gcloud container operations cancel のドキュメントをご覧ください。

ノードプールのアップグレードを再開する

アップグレードを手動で開始することで、アップグレードを再開できます。ここでも、元のアップグレードのターゲット バージョンを指定します。

たとえば、バージョン 1.23.1-gke.100 への進行中のアップグレードを一時停止した場合、バージョン 1.23.1-gke.100 を対象とするノードプールで同じアップグレードを再度開始すると、キャンセルしたアップグレードを再開できます。

アップグレードを再開した場合の詳細については、サージ アップグレードを再開するBlue/Green アップグレードをご覧ください。

アップグレードを再開するには、次のコマンドを使用します。

    gcloud container clusters upgrade CLUSTER_NAME \
      --node-pool=NODE_POOL_NAME \
      --cluster-version VERSION

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

  • NODE_POOL_NAME: ノードプールのアップグレードを再開するノードプールの名前。
  • CLUSTER_NAME: アップグレードを再開するノードプールのクラスタの名前。
  • VERSION: キャンセルしたノードプールのアップグレードのターゲット バージョン。

詳細については、gcloud container clusters upgrade ドキュメントをご覧ください。

ノードプールのアップグレードをロールバックする

アップグレードがキャンセルされたか失敗した場合は、ノードプールをロールバックして元の状態に戻すことができます。正常にアップグレードされたノードプールをロールバックすることはできません。

ノードプールのアップグレードをロールバックする方法の詳細については、サージ アップグレードのロールバックまたは Blue/Green アップグレードのロールバックをご覧ください。

アップグレードをロールバックするには、次のコマンドを実行します。

gcloud container node-pools rollback NODE_POOL_NAME \
  --cluster CLUSTER_NAME

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

  • NODE_POOL_NAME: ノードプールのアップグレードをロールバックするノードプールの名前。
  • CLUSTER_NAME: アップグレードをロールバックするノードプールのクラスタの名前。

詳しくは、gcloud container node-pools rollback のドキュメントをご覧ください。

ノードプールのアップグレードを完了する

Blue/Green アップグレード戦略を使用している場合は、ソークフェーズ中にノードプールのアップグレードを完了し、残りのソーク時間をスキップできます。

ノードプールのアップグレードを完了する方法については、ノードプールのアップグレードを完了するをご覧ください。

Blue/Green アップグレード戦略を使用しているときにアップグレードを完了するには、次のコマンドを実行します。

gcloud container node-pools complete-upgrade NODE_POOL_NAME \
  --cluster CLUSTER_NAME

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

  • NODE_POOL_NAME: アップグレードを完了するノードプールの名前。
  • CLUSTER_NAME: アップグレードを完了するノードプールのクラスタの名前。

詳しくは、gcloud container node-pools complete-upgrade のドキュメントをご覧ください。

次のステップ