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

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

概要

ノードの自動アップグレードを有効にすると、クラスタ コントロール プレーン(マスター)が更新されるときに、コントロール プレーンのバージョンを使用してクラスタ内のノードを最新の状態に維持できます。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

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

  1. Cloud Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

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

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

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

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

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

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

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

  1. Cloud Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

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

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

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

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

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

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

ノードをアップグレード可能にする際の制御を容易にするには、メンテナンスの時間枠と除外の構成を検討してください。

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

基盤となるクラスタがリリース チャンネルに登録されていない場合、既存のノードプールのノード自動アップグレードを無効にできます。その場合は、クラスタのノードが実行するバージョンがクラスタのバージョンと互換性のあることを確認してください。

gcloud

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

gcloud container node-pools update node-pool-name --cluster cluster-name \
    --zone compute-zone --no-enable-autoupgrade

Console

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

  1. Cloud Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

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

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

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

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

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

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

ワークロードを以前のノード バージョンに移行する(一時的な緩和策)

ノードプールはダウングレードできません。ただし、ノードプールがアップグレードされた後にノード バージョンのダウングレードを行うには、一時的な緩和策として次のガイドラインに従って、ワークロードを目的のノード バージョンに移行してください。

  1. サブネット範囲と Pod IP 範囲で、現在のノードプールで現在ホストされているすべての Pod をクラスタ内の他のノードでホストできるかどうかを確認します。サブネット範囲の最大 Pod と最大ノードを確認します。
  2. 移行するノード バージョンがサポート対象かどうかを確認します。

  3. ノードにワークロードの移行が遅くなる可能性がある PodDisruptionBudget のワークロードが存在するかどうかを確認します。

  4. 現在のノードプールで現在ホストされているすべてのポッドをホストする容量(ノード数)を持つ以前のノードプールを使用して、別のノードプールを作成します。

  5. 最新のノードを使用して、ノードプールでノードをドレインします。kubectl drain <nodename> は一度に 1 ノードずつ使用します。ノードの Pod が新しいノードプールのノード(以前のノード バージョンを実行しているノード)に移動したことを確認します。

  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 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-upgrade0 よりも大きい値に設定すると、GKE によってサージノードが作成されます。max-surge-upgrade0 に設定すると、サージノードは作成されません。

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 から受け取るためのチャネルをユーザーに提供します。

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

次のステップ