このページでは、Google Kubernetes Engine(GKE)でノードの自動アップグレードを構成する方法について説明します。
概要
ノードの自動アップグレードを有効にすると、コントロール プレーンが更新されるときに、クラスタのコントロール プレーン(マスター)のバージョンを使用してクラスタ内のノードが最新の状態に維持されるようになります。Google Cloud Console または gcloud
コマンドを使用して新しいクラスタやノードプールを作成するときは、デフォルトでノード自動アップグレードが有効になっています。
クラスタとノードのアップグレードの詳細を確認できます。
ノードの自動アップグレードには次のようなメリットがあります。
- 管理オーバーヘッドの削減: コントロール プレーンがアップグレードされたときに、ノードを手動でトラッキングして更新する必要がなくなります。
- セキュリティの向上: セキュリティ上の問題を解決するために、新しいバイナリがリリースされることがあります。自動アップグレードでは、GKE によって自動的にセキュリティ アップデートが適用され、最新の状態が保たれます。
- 使いやすさ: ノードを最新の状態に保ち、Kubernetes の最新の機能を使用することが簡単にできます。
自動アップグレードが有効になっているノードプールでは、選択条件(リリースノートに記載)を満たすとアップグレードがスケジュール設定されます。クラスタとフリートの安定性を確保するために、ロールアウトが数週間にわたって段階的に行われます。アップグレードが実行されると、ノードがドレインされ、現在のクラスタ コントロール プレーンのバージョンと一致するように再作成されます。ノード VM のブートディスクに加えた変更は、ノードが再作成されると無効になります。ノードの再作成後も変更を維持するには、DaemonSet を使用します。
アルファ版のクラスタでは、ノードの自動アップグレードを使用できません。Windows Server ノードプールがあるクラスタを使用している場合は、ノードの自動アップグレードを有効にする前に Windows Server ノードプールのアップグレードを確認してください。
既存のノードプールの自動アップグレードの状態を確認する
ノードプールの自動アップグレードが有効か無効かを確認するには、Google Cloud Console や gcloud
コマンドを使用します。
gcloud
ノードプールの自動アップグレードの状態を確認するには、次のコマンドを実行します。
gcloud container node-pools describe node-pool-name \
--cluster cluster-name \
--zone compute-zone
ここで
- node-pool-name は、ノードプールの名前です。
- cluster-name は、ノードプールを含むクラスタの名前です。
- compute-zone はクラスタのゾーンです。
Console
ノードプールの自動アップグレードの状態を確認するには、次の手順を行います。
Cloud Console で Google Kubernetes Engine のメニューに移動します。
クラスタのリストで、表示するクラスタの名前をクリックします。
[ノード] タブをクリックします。
[ノードプール] で、表示するノードプールの名前をクリックします。
[ノードプールの詳細] ページの [管理] で、[自動アップグレード] フィールドの値を確認します。
既存のノードプールのノードの自動アップグレードを有効にする
Google Cloud Console または 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
既存のノードプールの自動アップグレードを有効にするには、次の手順を行います。
Cloud Console で Google Kubernetes Engine のメニューに移動します。
クラスタのリストで、変更するクラスタの名前をクリックします。
[ノード] タブをクリックします。
[ノードプール] で、変更するノードプールの名前をクリックします。
[ノードプールの詳細] ページで、[edit 編集] をクリックします。
[管理] で、[自動修復を有効化] チェックボックスをオンにします。
[保存] をクリックします。
ノードをアップグレード可能にする際の制御を容易にするには、メンテナンスの時間枠と除外の構成を検討してください。
ノードのアップグレードのステータスを確認する
アップグレードのステータスを確認するには、ノードのアップグレード ステータスの確認をご覧ください。
既存ノードプールのノードの自動アップグレードを無効にする
推奨されるわけではありませんが、基盤となるクラスタがリリース チャネルに登録されていない場合は、既存のノードプールのノードの自動アップグレードを無効にできます。ノードの自動アップグレードを無効にしても、クラスタのコントロール プレーンのアップグレードは妨げられません。ノードの自動アップグレードを無効にする場合は、クラスタのノードでクラスタ バージョンと互換性のあるバージョンを実行することと、それが Kubernetes のバージョンとねじれバージョンのサポート ポリシーを遵守することは、お客様の責任になります。
gcloud
既存のノードプールの自動アップグレードを無効にするには、次のコマンドを実行します。
gcloud container node-pools update node-pool-name --cluster cluster-name \ --zone compute-zone --no-enable-autoupgrade
Console
既存のノードプールの自動アップグレードを無効にするには、次の手順を行います。
Cloud Console で Google Kubernetes Engine のメニューに移動します。
クラスタのリストで、変更するクラスタの名前をクリックします。
[ノード] タブをクリックします。
[ノードプール] で、変更するノードプールの名前をクリックします。
[ノードプールの詳細] ページで、[edit 編集] をクリックします。
[管理] で、[自動修復を有効化] チェックボックスをオフにします。
[保存] をクリックして、クラスタを変更します。
ワークロードを以前のノード バージョンに移行する(一時的な緩和策)
ノードプールはダウングレードできません。ただし、ノードプールがアップグレードされた後にノード バージョンのダウングレードを行うには、一時的な緩和策として次のガイドラインに従って、ワークロードを目的のノード バージョンに移行してください。
- 現在ノードプールでホストされているすべての Pod をホストするため、使用しているサブネット範囲と Pod IP 範囲で、クラスタ内にノードを追加できるかどうかを確認します。サブネット範囲の最大 Pod 数と最大ノード数を確認します。
移行するノード バージョンがサポート対象かどうかを確認します。
ワークロードの移行が遅くなる可能性がある
PodDisruptionBudget
のワークロードがノードに存在するかどうかを確認します。以前のノード バージョンを使用して、現在ノードプールでホストされているすべての Pod をホストする容量(ノード数)のノードプールを新たに作成します。
最新バージョンのノードプール上のノードを、
kubectl drain <nodename>
を使用してドレインします。ドレインは 1 回に 1 ノードずつ行います。ノード上の Pod が新しいノードプール(以前のノード バージョンを実行している)上のノードに移動したことを確認します。非常に重要: すべての Pod が、以前のノード バージョンを実行しているノードプール上のノードに移行したことを確認します。
最新のノードプール バージョンを実行しているノードプールが不要になった場合は削除します。
ノードの自動アップグレードを有効にしてクラスタまたはノードプールを作成する
gcloud
デフォルト ノードプールの自動アップグレードが有効なクラスタを作成するには、gcloud container clusters
create
コマンドに --enable-autoupgrade
フラグを指定します。
gcloud container clusters create cluster-name --zone compute-zone \ --enable-autoupgrade
自動アップグレードが有効なノードプールを作成するには:
gcloud container node-pools create node-pool-name --cluster cluster-name \ --zone compute-zone --enable-autoupgrade
Console
Cloud Console で作成されたクラスタとノードプールは、デフォルトで自動アップグレードが有効になっています。クラスタおよびノードプールの作成手順については、クラスタを作成するまたはノードプールの追加と管理をご覧ください。
新しいノードプールの自動アップグレードを無効にできます。クラスタ作成ページで、変更するノードプールの名前をクリックし、[自動アップグレードを有効化] をオフにします。
サージ アップグレード パラメータを変更する
サージ アップグレードを使用すると、GKE が一度にアップグレードするノード数とアップグレードでワークロードが中断される回数を変更できます。
max-surge-upgrade
フラグと max-unavailable-upgrade
フラグは、ノードプールごとに定義されています。適切なパラメータの選択について詳しくは、最適なサージ構成の決定をご覧ください。
これらの設定は、クラスタやノードプールを作成または更新するときに変更できます。
後述するコマンドでは、次の変数を使用しています。
CLUSTER_NAME
: ノードプールのクラスタの名前。COMPUTE_ZONE
: クラスタのゾーン。NODE_POOL_NAME
: ノードプールの名前。NUMBER_NODES
: クラスタの各ゾーンにあるノードプール内のノード数。SURGE_NODES
: ノードプールのアップグレードのたびに作成される余分な(サージ)ノードの数。UNAVAILABLE_NODES
: ノードプールの各アップグレードで、同時に使用できなくなる可能性があるノードの数。
特定のパラメータでクラスタを作成する
サージ アップグレードに固有の設定でクラスタを作成するには、max-surge-upgrade
フラグと max-unavailable-upgrade
フラグを使用します。
gcloud container clusters create CLUSTER_NAME \ --max-surge-upgrade=SURGE_NODES --max-unavailable-upgrade=UNAVAILABLE_NODES
サージ アップグレードが無効なクラスタを作成する
サージ アップグレードなしでクラスタを作成するには、max-surge-upgrade
フラグの値を 0
に設定します。
gcloud container clusters create CLUSTER_NAME \ --max-surge-upgrade=0 --max-unavailable-upgrade=1
特定のサージ パラメータでノードプールを作成する
サージ アップグレードに固有の設定で既存のクラスタにノードプールを作成するには、max-surge-upgrade
フラグと max-unavailable-upgrade
フラグを使用します。
gcloud container node-pools create NODE_POOL_NAME \ --num-nodes=NUMBER_NODES --cluster=CLUSTER_NAME \ --max-surge-upgrade=SURGE_NODES --max-unavailable-upgrade=UNAVAILABLE_NODES
既存のノードプールのサージ アップグレードをオンまたはオフにする
既存のノードプールのアップグレード設定を更新するには、max-surge-upgrade
フラグと max-unavailable-upgrade
フラグを使用します。max-surge-upgrade
を 0
よりも大きい値に設定すると、GKE によってサージノードが作成されます。max-surge-upgrade
を 0
に設定すると、サージノードは作成されません。
gcloud beta container node-pools update NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --max-surge-upgrade=SURGE_NODES --max-unavailable-upgrade=UNAVAILABLE_NODES
ノードプールでサージ アップグレードが有効になっていることを確認する
ノードプールでサージ アップグレードが有効になっていることを確認するには、gcloud
を使用してクラスタのパラメータを表示します。
gcloud container node-pools describe NODE_POOL_NAME \ --cluster=CLUSTER_NAME
アップグレードの通知を受信する
GKE は Pub/Sub にアップグレードの通知を公開し、クラスタに関する情報を GKE から受け取るためのチャネルをユーザーに提供します。
詳細については、クラスタのアップグレード通知の受信をご覧ください。
次のステップ
- ノードプールの詳細を確認する。
- クラスタとノードプールのアップグレードを確認する。
- クラスタまたはノードプールを手動でアップグレードする。