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


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

概要

ノードの自動アップグレードを有効にすると、コントロール プレーンが自動更新されるときに、クラスタのコントロール プレーンのバージョンを使用してクラスタ内のノードが最新の状態に維持されるようになります。Google Cloud コンソールまたは 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: クラスタのコンピューティング ゾーン

コンソール

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

  1. Google Cloud コンソールで 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: クラスタのコンピューティング ゾーン

コンソール

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

  1. Google Cloud コンソールで 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

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

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

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

ノードプールのノードの自動アップグレードを無効にすると、GKE でノードのバージョンは更新されません。ノードの自動アップグレードを無効にしても、GKE でクラスタのコントロール プレーンのアップグレードは妨げられません。

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

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

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

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

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

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

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

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

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

gcloud

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

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

コンソール

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

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

    Google Kubernetes Engine に移動

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

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

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

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

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

  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

コンソール

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

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

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

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 のドキュメントをご覧ください。

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

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

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

アップグレードを再開した場合の影響については、サージ アップグレードを再開する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 のドキュメントをご覧ください。

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

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

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

ノードプールのアップグレードをロールバックした場合の影響については、サージ アップグレードをロールバックするまたは 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 のドキュメントをご覧ください。

次のステップ