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

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

概要

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

詳細については、クラスタとノードのアップグレードに関する記事をご覧ください。

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

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

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

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

始める前に

作業を始める前に、次のタスクが完了していることを確認してください。

  • Google Kubernetes Engine API を有効にする。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。gcloud CLI をインストール済みの場合は、gcloud components update コマンドを実行して最新のバージョンを取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。
  • 既存の Standard クラスタがあることを確認する。 Google Cloud コンソールまたは Google Cloud CLI コマンドを使用して新しいクラスタを作成すると、デフォルトでノードの自動アップグレードが有効になります。Standard クラスタを作成する方法については、リージョン クラスタを作成するをご覧ください。

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

ノードプールのノードの自動アップグレードは、デフォルトで有効になっています。

メンテナンスの除外によって設定される

「マイナー アップグレードまたはノード アップグレードなし」スコープのクラスタ メンテナンスの除外を使用すると、クラスタ内のすべてのノードプールのノードの自動アップグレードを無効にできます。また、一部のノードプールでは自動アップグレードを無効にするが、すべてのノードプールでは無効にしないクラスタがある場合は、ノードプール メンテナンスの除外を使用します。クラスタがリリース チャンネルに登録されている場合は、これらの除外のいずれかを使用できます。これらの除外をすでに構成しているかどうかを確認するには、 クラスタのメンテナンス ポリシーを表示します。

ノードの自動アップグレード フィールドによって設定される

レガシー構成であり、推奨されていませんが、個々のノードプールの autoUpgrade フィールドを構成して、ノードの自動アップグレードを無効にすることもできます。このフィールドを使用して、 Google Cloud コンソールまたは gcloud コマンドでノードプール の自動アップグレードが有効か無効かを確認できます。

gcloud

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

gcloud container node-pools describe NODE_POOL_NAME \
  --cluster CLUSTER_NAME \
  --location CONTROL_PLANE_LOCATION

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

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

出力で autoUpgrade フィールドを探して、ノードプールで自動アップグレードが有効か無効かを確認します。

management:
  autoUpgrade: true

コンソール

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

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

    Google Kubernetes Engine に移動

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

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

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

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

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

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

無効になっている場合は、ノードの自動アップグレードを有効にできます。これは、GKE がノードを自動アップグレードしないようにするための推奨方法であるメンテナンスの除外の構成には影響しません。ノードの自動アップグレードを可能にするタイミングを容易に制御するには、メンテナンスの時間枠と 除外の構成を検討してください。

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

gcloud

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

gcloud container node-pools update NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location CONTROL_PLANE_LOCATION \
    --enable-autoupgrade

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

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

コンソール

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

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

    Google Kubernetes Engine に移動

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

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

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

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

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

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

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

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

オペレーションの数が 5,000 件未満の場合は過去 12 日間、5,000 件以上の場合は過去 5,000 件の、クラスタ内の実行中のオペレーションと完了したオペレーションの全リストを表示します。

gcloud container operations list \
    --location=CONTROL_PLANE_LOCATION

各オペレーションには、開始時刻と終了時刻、ターゲット クラスタ、ステータスとともに、オペレーション 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 \
    --location=CONTROL_PLANE_LOCATION

例:

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 \
    --location=CONTROL_PLANE_LOCATION

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

  • NODE_POOL_NAME: 記述するノードプールの名前。
  • CLUSTER_NAME: 記述するノードプールのクラスタの名前。
  • CONTROL_PLANE_LOCATION: コントロール プレーンのロケーション(リージョンまたはゾーン)。例: us-central1us-central1-a

このコマンドにより、現在のアップグレード設定が出力されます。次の例は、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

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

ノードプールのノードのアップグレードを手動で管理する必要がある場合は、既存のノードプールのノードの自動アップグレードを無効にできます。クラスタ内のすべてのノードプールのノード の自動アップグレードを無効にする場合は、 「マイナー アップグレードまたはノード アップグレードなし」スコープのクラスタ メンテナンスの除外 を使用することをおすすめします。また、一部のノードプールでは自動アップグレードを無効にするが、すべてのノードプールでは無効にしないクラスタがある場合は、ノードプール メンテナンスの除外を使用します。クラスタがリリース チャンネルに登録されている場合は、これらの除外のいずれかを使用できます。

この方法はおすすめしませんが、このセクションの手順に沿って、個々のノードプールのノードの自動アップグレードを無効にすることもできます。

ノードの自動アップグレードを無効にする前に、次の考慮事項を理解してください。

ノードの自動アップグレードを無効にする際の考慮事項

使用可能な 方法でノードプールのノードの自動アップグレードを無効にすると、GKE はサポート 終了時に次のマイナー バージョンに 更新する場合を除き、ノードのバージョンを更新しません。ノードの自動アップグレードを無効にしても、GKE でクラスタのコントロール プレーンのアップグレードは妨げられません。

無効にするとバージョンは更新されなくなるものの、影響を受けないメンテナンス タスクもある

ノードの自動アップグレードを無効にすると、ノードのバージョンが更新されなくなるだけで、GKE でその他のメンテナンス タスクの開始が妨げられることはありません。たとえば、ノードの自動アップグレードが無効になっていても、 IP アドレスのローテーションCloud DNSネットワーク・ポリシーの有効化、または PSC の移行を クラスタ上でトリガーすると、ノードプールで選択されているバージョンに 関わらず、すべてのノードがコントロール・プレーンと同じバージョンで再作成されます。メンテナンスのタイミングを制御する方法については、 メンテナンスの時間枠と 除外をご覧ください。

無効にすると、コントロール プレーン ノードの互換性についての責任が生じる

ノードプールでノードの自動アップグレードを無効にする場合は、クラスタのノードがクラスタのコントロール プレーンのバージョンと互換性のあるバージョンを実行することと、GKE バージョン スキュー ポリシーに準拠するようにすることは、お客様の責任になります。ノードの自動アップグレードを無効にすると、標準サポートの終了まで、ノードプールのアップグレードは行われません。GKE は、クラスタの健全性を維持するため、サポート終了後にサポート対象外となったバージョンを実行しているノードをアップグレードします。

サポート終了のタイミングについて詳しくは、リリース チャンネルのおおよそのスケジュールをご覧ください。サポート対象外のバージョンを実行しているノードは、バージョンがサポート終了となってもすぐにアップグレードされない場合があります。実際のタイミングは Google の裁量で変わる可能性があります。

無効にしても、進行中のオペレーションが停止しはない

ノードの自動アップグレードを無効にしても、ノードプール内のノードで進行中のアップグレードが停止またはキャンセルされることはありません。進行中のアップグレードをキャンセルまたは停止するには、ノードのアップグレードをキャンセルするをご覧ください。ノードのアップグレードのキャンセルは、アップグレード済みのノードでワークロードが失敗し、さらなる停止を回避したい状況で頼りになります。

ノードプール全体のアップグレードが完了している場合は、アップグレードをロールバックしたり、キャンセルしたりすることはできません。ノードプールをダウングレードするには、ノードプールのダウングレードをご覧ください。

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

1 つの既存のノードプールのノードの自動アップグレードを無効にする必要がある場合は、 ノードプール メンテナンス の除外を使用することをおすすめします。手順については、 既存のノード プールにノードプール メンテナンスの除外を追加するをご覧ください。 クラスタ内のすべてのノードプールのノードの自動アップグレードを無効にする必要がある場合は、「マイナー アップグレードまたはノード アップグレードなし」スコープのクラスタ メンテナンスの除外を使用します。

おすすめしませんが、次の手順を使用して、既存のノードプールのノードの自動アップグレードを無効にすることもできます。

gcloud

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

gcloud container node-pools update NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location CONTROL_PLANE_LOCATION \
    --no-enable-autoupgrade

コンソール

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

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

    Google Kubernetes Engine に移動

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

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

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

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

  6. [管理] で、[自動アップグレードを有効化] チェックボックスをオフにします。

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

ノードの自動アップグレードが有効なノードプールを作成する

GKE ノードプールでは、デフォルトで自動アップグレードが有効になっています。ただし、このデフォルト設定を明示的に指定する場合は、次の手順を行います。

gcloud

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

gcloud container node-pools create NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location CONTROL_PLANE_LOCATION \
    --enable-autoupgrade

コンソール

クラスタおよびノードプールの作成手順については、クラスタの作成またはノードプールの追加 と管理に関する記事をご覧ください。

アップグレードの通知を受け取る

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

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

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

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

ノードプールのアップグレード中に管理を行う

自動アップグレード中および手動で開始したノードプールのアップグレード中は、次の操作を行うことができます。

ノードプールの同時アップグレードを構成する

デフォルトでは、GKE は一度に 1 つのノードプールを自動的にアップグレードします。 ノードプールが多いクラスタの場合は、ノードプールの同時アップグレードを構成して、クラスタのアップグレードに必要な合計時間を短縮できます。これは、GKE が同時に自動アップグレードできるノードプールの最大数を設定することで構成します。Standard クラスタでは、この設定によって Standard ノードプールと Autopilot 管理ノードプールのノードアップグレードの同時実行数が決まります。Autopilot クラスタでは、この設定によってノードグループのノードアップグレードの同時実行数が決まります。

同時実行数の上限は、gcloud CLI を使用して新しいクラスタを作成するとき、または既存のクラスタを更新するときに構成できます。同時に自動アップグレードするノードプールで 自動アップグレードが有効になっていることを確認してください。

カスタム ステージでロールアウト シーケンスに登録されているクラスタでは、この機能を有効にすることはできません(プレビュー)。

ノードプールの同時アップグレードを構成するには、次のいずれかのコマンドを実行します。

  • ノードプールの同時アップグレードが構成された新しいクラスタを作成します。

    gcloud beta container clusters create CLUSTER_NAME \
        --project=PROJECT_NAME
        --location CONTROL_PLANE_LOCATION \
        --node-pool-upgrade-concurrency-config=max-count=MAX_COUNT
    
  • 既存のクラスタを更新して、ノードプールを同時にアップグレードします。

    gcloud beta container clusters update CLUSTER_NAME \
        --project=PROJECT_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --node-pool-upgrade-concurrency-config=max-count=MAX_COUNT
    

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

  • CLUSTER_NAME: クラスタの名前。
  • PROJECT_NAME: プロジェクトの名前。
  • LOCATION: クラスタの Compute Engine のロケーション。
  • MAX_COUNT: 同時にアップグレードするノードプールの最大数。値には 1100 の整数を指定してください。デフォルトのシーケンシャル動作に戻すには、この値を 1 に設定します。

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

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

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

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

    gcloud container operations cancel OPERATION_ID \
          --location=CONTROL_PLANE_LOCATION
    

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

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

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

たとえば、アップグレードが失敗した場合や、進行中のアップグレードを一時停止した場合は、最初のアップグレード オペレーションのターゲット バージョンを指定して、ノードプールで同じアップグレードを再度開始することで、キャンセルしたアップグレードを再開できます。

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

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

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

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

  • NODE_POOL_NAME: ノードプールのアップグレードを再開するノードプールの名前。
  • CLUSTER_NAME: アップグレードを再開するノードプールのクラスタの名前。
  • CONTROL_PLANE_LOCATION: コントロール プレーンのロケーション(リージョンまたはゾーン)。例: us-central1us-central1-a
  • VERSION: キャンセルされたノードプールのアップグレードのターゲット バージョン。

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

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

ノードプールをロールバックして、アップグレードしたノードをノードプールのアップグレードを開始する前の元の状態にダウングレードできます。

進行中のアップグレードがキャンセルされた場合、アップグレードが失敗した場合、またはメンテナンスの時間枠のタイムアウトが原因でアップグレードが完了していない場合は、rollback コマンドを使用します。バージョンを指定する場合は、手順に沿ってノードプールをダウングレードします。

ノードプールのアップグレードをロールバックした場合の影響については、サージ アップグレードをロールバックするまたは Blue/Green アップグレードをロールバックするをご覧ください。

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

gcloud container node-pools rollback NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION

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

  • NODE_POOL_NAME: ノードプールのアップグレードをロールバックするノードプールの名前。
  • CLUSTER_NAME: アップグレードをロールバックするノードプールのクラスタの名前。
  • CONTROL_PLANE_LOCATION: コントロール プレーンのロケーション(リージョンまたはゾーン)。例: us-central1us-central1-a

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

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

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

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

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

gcloud container node-pools complete-upgrade NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION

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

  • NODE_POOL_NAME: アップグレードを完了するノードプールの名前。
  • CLUSTER_NAME: アップグレードを完了するノードプールのクラスタの名前。
  • CONTROL_PLANE_LOCATION: コントロール プレーンのロケーション(リージョンまたはゾーン)。例: us-central1us-central1-a

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

次のステップ