このページでは、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
: クラスタのコンピューティング ゾーン。
コンソール
ノードプールの自動アップグレードの状態を確認するには、次の手順で操作します。
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
クラスタのリストで、表示するクラスタの名前をクリックします。
[ノード] タブをクリックします。
[ノードプール] で、表示するノードプールの名前をクリックします。
[ノードプールの詳細] ページの [管理] で、[自動アップグレード] フィールドの値を確認します。
既存のノードプールのノードの自動アップグレードを有効にする
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
: クラスタのコンピューティング ゾーン。
コンソール
既存のノードプールの自動アップグレードを有効にするには、次の手順で操作します。
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
クラスタのリストで、変更するクラスタの名前をクリックします。
[ノード] タブをクリックします。
[ノードプール] で、変更するノードプールの名前をクリックします。
[ノードプールの詳細] ページで、[edit 編集] をクリックします。
[管理] で、[自動アップグレードを有効化] チェックボックスをオンにします。
[保存] をクリックします。
ノードの自動アップグレードを可能にするタイミングを容易に制御するには、メンテナンスの時間枠と除外の構成を検討してください。
ノードのアップグレードのステータスを確認する
アップグレードのステータスは、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 の移行を行ったりすると、ノードプールで選択されているバージョンに関係なく、すべてのノードがコントロール・プレーンと同じバージョンで再作成されます。メンテナンスのタイミングを制御する方法については、メンテナンスの時間枠と除外をご覧ください。
無効にすると、コントロール プレーン ノードの互換性についての責任が生じる
ノードの自動アップグレードを無効にする場合は、クラスタのノードがクラスタ バージョンと互換性のあるバージョンを実行するようにすることと、バージョンが Kubernetes のバージョンとバージョン スキューのサポート ポリシーを遵守するようにすることは、お客様の責任になります。GKE バージョン 1.19 およびそれ以降では、バージョンのサポート終了後にサポート対象外となったバージョンを実行しているノードがアップグレードされ、クラスタの健全性とオープンソースのバージョン スキュー ポリシーとの整合性が確保されます。サポート対象外のバージョンを実行しているノードは、バージョンがサポート終了となってもすぐにアップグレードされない場合があります。実際のタイミングは Google の裁量で変わる可能性があります。
無効にしても、進行中のオペレーションが停止しはない
ノードの自動アップグレードを無効にしても、ノードプール内のノードで進行中のアップグレードが停止またはキャンセルされることはありません。進行中のアップグレードをキャンセルまたは停止するには、ノードのアップグレードをキャンセルするをご覧ください。ノードのアップグレードのキャンセルは、アップグレード済みのノードでワークロードが失敗し、さらなる停止を回避したい状況で頼りになります。
ノードプール全体のアップグレードが完了している場合は、アップグレードをロールバックしたり、キャンセルしたりすることはできません。ノードプールをダウングレードするには、ノードプールのダウングレードをご覧ください。
既存のノードプールのノードの自動アップグレードを無効にする
gcloud
既存のノードプールの自動アップグレードを無効にするには、次のコマンドを実行します。
gcloud container node-pools update NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--zone COMPUTE_ZONE \
--no-enable-autoupgrade
コンソール
既存のノードプールの自動アップグレードを無効にするには、次の手順で操作します。
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
クラスタのリストで、変更するクラスタの名前をクリックします。
[ノード] タブをクリックします。
[ノードプール] で、変更するノードプールの名前をクリックします。
[ノードプールの詳細] ページで、[edit 編集] をクリックします。
[管理] で、[自動アップグレードを有効化] チェックボックスをオフにします。
[保存] をクリックして、クラスタを変更します。
ノードの自動アップグレードを有効にしてクラスタまたはノードプールを作成する
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 アップグレードをキャンセルするをご覧ください。
アップグレードのオペレーション ID を取得します。
gcloud container operations list
アップグレードをキャンセルします。
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
のドキュメントをご覧ください。
ノードプールのアップグレードをロールバックする
ノードプールをロールバックして、アップグレードしたノードをノードプールのアップグレードを開始する前の元の状態にダウングレードできます。
進行中のアップグレードがキャンセルされた場合、アップグレードが失敗した場合、またはメンテナンスの時間枠のタイムアウトが原因でアップグレードが完了していない場合は、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
のドキュメントをご覧ください。
次のステップ
- ノードプールの詳細を確認する。
- クラスタとノードプールのアップグレードを確認する。
- クラスタまたはノードプールを手動でアップグレードする。