このページでは、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
: クラスタのコンピューティング ゾーン。
Console
ノードプールの自動アップグレードの状態を確認するには、次の手順を行います。
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
: クラスタのコンピューティング ゾーン。
Console
既存のノードプールの自動アップグレードを有効にするには、次の手順を行います。
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
既存のノードプールのノードの自動アップグレードを無効にする
推奨されるわけではありませんが、基盤となるクラスタがリリース チャネルに登録されていない場合は、既存のノードプールのノードの自動アップグレードを無効にできます。ノードの自動アップグレードを無効にしても、クラスタのコントロール プレーンのアップグレードは妨げられません。
ノードの自動アップグレードを無効にする場合は、クラスタのノードでクラスタ バージョンと互換性のあるバージョンを実行することと、それが Kubernetes のバージョンとねじれバージョンのサポート ポリシーを遵守することは、お客様の責任になります。GKE バージョン 1.19 以降では、GKE によりバージョンのサポート終了後にサポート対象外となったバージョンを実行しているノードがアップグレードされ、クラスタの健全性およびオープンソースのバージョン スキュー ポリシーとの整合性が確保されます。サポート対象外のバージョンを実行しているノードは、バージョンが終了してもすぐにアップグレードされない場合があります。実際のタイミングは Google の裁量で変わる可能性があります。
gcloud
既存のノードプールの自動アップグレードを無効にするには、次のコマンドを実行します。
gcloud container node-pools update NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--zone COMPUTE_ZONE \
--no-enable-autoupgrade
Console
既存のノードプールの自動アップグレードを無効にするには、次の手順を行います。
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
Console
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
のドキュメントをご覧ください。
次のステップ
- ノードプールの詳細を確認する。
- クラスタとノードプールのアップグレードを確認する。
- クラスタまたはノードプールを手動でアップグレードする。