クラスタまたはノードプールの手動アップグレード

デフォルトで、Google Kubernetes Engine クラスタとノードプールは Google によって自動的にアップグレードされます。このページでは、GKE クラスタまたはそのノードのアップグレードとダウングレードを手動で要求する方法について説明します。詳細については、自動および手動クラスタ アップグレードの動作をご覧ください。メンテナンスの時間枠と除外対象を構成することで、自動アップグレードのタイミングを管理することもできます。

新しいバージョンの GKE は定期的に発表されています。使用可能なバージョンについては、バージョニングとアップグレードをご覧ください。クラスタの詳細については、クラスタのアーキテクチャをご覧ください。

始める前に

作業を始める前に、次のことを確認してください。

次のいずれかの方法で gcloud のデフォルトの設定を指定します。

  • gcloud init。デフォルトの設定全般を確認する場合に使用します。
  • gcloud config。プロジェクト ID、ゾーン、リージョンを個別に設定する場合に使用します。

gcloud init の使用

  1. gcloud init を実行して、次の操作を行います。

    gcloud init

    リモート サーバーで SSH を使用している場合は、--console-only フラグを指定して、コマンドがブラウザを起動しないようにします。

    gcloud init --console-only
  2. 手順に従って gcloud を承認し、Google Cloud アカウントを使用します。
  3. 新しい構成を作成するか、既存の構成を選択します。
  4. Google Cloud プロジェクトを選択します。
  5. デフォルトの Compute Engine ゾーンを選択します。

gcloud config の使用

  • デフォルトのプロジェクト ID を設定します。
    gcloud config set project project-id
  • ゾーンクラスタを使用する場合は、デフォルトのコンピューティング ゾーンを設定します。
    gcloud config set compute/zone compute-zone
  • リージョン クラスタを使用する場合は、デフォルトのコンピューティング リージョンを設定します。
    gcloud config set compute/region compute-region
  • gcloud を最新バージョンに更新します。
    gcloud components update

データを永続ディスクに保存する

ノードプールをアップグレードする前に、保持するデータが、永続ディスクを使用する永続ボリュームを使用した Pod に保存されていることを確認する必要があります。永続ディスクは、アップグレード時にデータを消去せずにマウント解除され、そのデータは Pod 間で「引き渡され」ます。

永続ディスクには次の制限があります。

  • Pod を実行しているノードが Compute Engine VM であること
  • これらの VM が永続ディスクと同じ Compute Engine プロジェクトおよびゾーンに存在すること

既存のノード インスタンスに永続ディスクを追加する方法については、永続ディスクの追加またはサイズ変更をご覧ください。

クラスタのアップグレードについて

クラスタのマスターノードは個別にアップグレードされます。

制限事項

リリース チャンネルに登録されているクラスタとそのノードは、手動でアップグレードまたはダウングレードできません。登録したリリース チャンネルで新しいバージョンが利用可能になると、常にアップグレードが実行されます。

アルファ クラスタはアップグレードできません。

サポート対象のバージョン

新しいバージョンがリリースされたときや、古いバージョンが廃止されたときに、リリースノートで通知されます。次のコマンドを使用すると、サポート対象のクラスタとノードのバージョンをいつでも確認できます。

gcloud container get-server-config
    

ダウングレードの制限事項

クラスタをダウングレードすることはおすすめしません。ノードは、クラスタ バージョンより古いパッチ バージョンにダウングレードできます。クラスタをマイナー バージョン間でダウングレードすることはできません。たとえば、クラスタで GKE 1.11.5 を実行している場合、まだ利用可能であれば 1.11.4 にダウングレードできますが、1.10.9 にはダウングレードできません。次のようなエラーが生成されます。

ERROR: (gcloud.container.clusters.upgrade) ResponseError: code=400,
    message=Master cannot be upgraded to "1.10.9-gke.9": specified version is not
    newer than the current version.
    

クラスタのアップグレード

クラスタとノードは自動的にアップグレードされます。クラスタの自動アップグレードとそのノードが受け取る内容をより細かく管理するには、リリース チャンネルに登録します。

クラスタの GKE バージョンの管理について詳しくは、バージョニングとアップグレードをご覧ください。

手動アップグレードは、新しいバージョンの提供後であればいつでも開始できます。

マスターの手動アップグレード

クラスタのアップグレードを開始すると、コントロール プレーンに再びアクセスできるまで、数分間はクラスタの構成を変更できません。マスター アップグレードの際にダウンタイムが発生しないようにするには、リージョン クラスタの使用を検討してください。

クラスタを手動でアップグレードするには、Cloud Console を使用するか、gcloud コマンドライン ツールを使用します。クラスタをアップグレードした後、そのノードをアップグレードできます。デフォルトでは、Google Cloud Console で作成したノードでは自動アップグレードが有効になります。このため、アップグレードは自動的に行われます。

リリース チャンネルに登録したクラスタを手動でアップグレードすることはできません(また、必要もありません)。

gcloud

クラスタ マスターのバージョンをアップグレードするには、まず次のコマンドを実行して利用可能なバージョンを表示します。

gcloud container get-server-config
    

デフォルトのクラス タバージョンにアップグレードするには、次のコマンドを実行します。

gcloud container clusters upgrade cluster-name --master
    

デフォルト以外の特定のバージョンにアップグレードするには、次のコマンドを実行します。

gcloud container clusters upgrade cluster-name \
      --master --cluster-version cluster-version
    

詳しくは、gcloud container clusters upgrade のドキュメントをご覧ください。

Console

クラスタ マスターを手動で更新するには、次の手順に従います。

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

    Google Kubernetes Engine のメニューに移動

  2. 目的のクラスタを選択します。

  3. [マスターのバージョン] の横にある [アップグレード可能] リンクをクリックします。

  4. 目的のバージョンを選択し、[変更] をクリックします。

  5. 画面の上部にある矢印をクリックすると、クラスタの概要ページに戻ります。

クラスタのダウングレード

クラスタを以前のパッチ バージョンにダウングレードするには、gcloud コマンドライン ツールを使用してクラスタ マスター バージョンを更新します。

クラスタの自動アップグレードの無効化

クラスタのアップグレードを無効にすることはできません。推奨ではありませんが、ノードの自動アップグレードは無効にできます

ノードのアップグレード

デフォルトでは、クラスタのノードで自動アップグレードが有効になっています。無効にすることはおすすめしません。

ノードプールをアップグレードするときに、GKE はノードを 1 つずつ順番にアップグレードします。

ノードがアップグレードされている間、GKE は新しい Pod のスケジュールを停止し、実行中の Pod を他のノードにスケジュールします。ノードは新しいバージョンで再作成されますが、以前と同じ名前が使用されます。これは、ノードプールで機能を有効または無効にする場合など、ノードの再作成を行う他のイベントも同様です。

リリース チャンネルに登録したクラスタを持つノードを手動でアップグレードすることはできません(また、必要もありません)。リリース チャンネルを使用する場合、クラスタとノードの自動アップグレード中の短期間を除き、クラスタとノードで同じバージョンが使用されます。

アップグレードは、すべてのノードが再作成され、クラスタが目的の状態になったときにはじめて完了します。新しくアップグレードされたノードがマスターに登録されると、GKE ではノードがスケジューリング可能であるとマークされます。

新しいノード インスタンスでは、目的の Kubernetes バージョンと次のものが実行されます。

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

手動でアップグレードできるノードプールのバージョンは、マスターと同じバージョン、または引き続き提供され、かつマスターとの互換性がある以前のバージョンです。Kubernetes バージョンとバージョン スキューのサポート ポリシーにより、マスターは、マスターの 2 つ前までのマイナー バージョンのノードと互換性が保証されています。たとえば、Kubernetes 1.13 マスターは Kubernetes 1.11 ノードと互換性があります。

ノードをマスターと互換性のあるバージョンに手動でアップグレードするには、Google Cloud Console または gcloud コマンドライン ツールを使用します。

リリース チャンネルに登録したクラスタを持つノードを手動でアップグレードすることはできません(また、必要もありません)。リリース チャンネルを使用する場合、クラスタとノードの自動アップグレード中の短期間を除き、クラスタとノードで同じバージョンが使用されます。

gcloud

次のコマンドは、ノードをマスターで実行されているバージョンにアップグレードします。

gcloud container clusters upgrade cluster-name \
      --node-pool=node-pool-name
    

cluster-name は、アップグレードされるクラスタの名前です。

ノードで GKE の別のバージョンを指定するには、オプションの --cluster-version フラグを使用します。

gcloud container clusters upgrade cluster-name \
      --node-pool=node-pool-name \
      --cluster-version cluster-version
    

cluster-version は、ノードのアップグレード先の Kubernetes バージョンです。たとえば、--cluster-version=1.7.2cluster-version=latest です。

バージョンの指定について詳しくは、バージョニングとアップグレードのドキュメントをご覧ください。

詳細については、gcloud container clusters upgrade のドキュメントをご覧ください。

Console

Cloud Console を使用してノードプールをアップグレードするには、次の手順を行います。

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

    Google Kubernetes Engine のメニューに移動

  2. 鉛筆の形をしたクラスタの [編集] ボタンをクリックします。

  3. [ノードプール] セクションで、アップグレードするノードプールの開示矢印を展開します。

  4. [ノードのバージョン] の横にある [変更] リンクをクリックします。

  5. 目的のバージョンを選択し、[変更] をクリックします。

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

ノードのダウングレード

ノードプールをダウングレードすることはできません。その代わりに、目的のバージョンで新しいノードプールを作成して、ワークロードを移行します。自動アップグレードが有効になっているノードは、マスター バージョンに合わせてアップグレードされます。

ノードのアップグレード ステータスの確認

アップグレードのステータスは、gcloud beta container operations で確認できます。

クラスタ内の実行中のオペレーションと完了したオペレーションの全リストを表示するには、次のコマンドを実行します。

gcloud beta 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 beta container operations describe operation-id
    

例:

gcloud beta 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
    

ノードのアップグレードをキャンセルする

アップグレードはいつでもキャンセルできます。アップグレードをキャンセルすると、次のようになります。

  • アップグレードを開始したノードのアップグレードは完了します。
  • アップグレードを開始していないノードはアップグレードされません。
  • アップグレードがすでに完了したノードは影響を受けず、ロールバックされません。
  1. アップグレードのオペレーション ID を取得するには、次のコマンドを使用します。

    gcloud container operations list
        
  2. アップグレードをキャンセルするには、次のコマンドを実行します。

    gcloud beta container operations cancel operation-id
        

詳しくは、gcloud container operations cancel のドキュメントをご覧ください。

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

アップグレードに失敗したノードプールまたはアップグレードがキャンセルされたノードプールを以前のバージョンの Kubernetes にロールバックできます。正常にアップグレードされたノードプールをロールバックすることはできません。アップグレードを開始していないノードは影響を受けません。

アップグレードをロールバックするには、次のコマンドを実行します。

gcloud container node-pools rollback node-pool-name \
      --cluster cluster-name
    

ここで

  • node-pool-name はロールバックするノードプールの名前です。
  • cluster-name は、ロールバックするノードプールを含むクラスタの名前です。

詳しくは、gcloud container node-pools rollback のドキュメントをご覧ください。

サージ アップグレード パラメータの変更

サージ アップグレードを使用すると、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

次のステップ