このページでは、Google Kubernetes Engine クラスタが実行する Kubernetes のバージョンをアップグレードまたはダウングレードする方法について説明します。
クラスタ マスターとノードで Kubernetes のバージョンを使用可能にする方法については、バージョニングとアップグレードをご覧ください。クラスタについて詳しくは、クラスタ アーキテクチャを参照してください。
始める前に
このタスクの準備として、次の手順を行います。
- Google Kubernetes Engine API が有効になっていることを確認します。 Google Kubernetes Engine API の有効化
- Cloud SDK がインストール済みであることを確認します。
- デフォルトのプロジェクト 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
クラスタのアップグレードについて
サポート対象のバージョン
アップグレードとダウングレードでサポートされている Kubernetes のマスターおよびノードのバージョンを確認するには、次のコマンドを実行します。
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.7": specified version is not
newer than the current version.
クラスタを以前のパッチ バージョンにダウングレードするには、gcloud
コマンドライン ツールを使用してクラスタ マスター バージョンを更新します。
GKE バージョンは、サポート対象のバージョンのスケジュールに従ってロールアウトされます。ロールアウトがすべてのゾーンに到達するまでに数日かかります。gcloud container get-server-config
を使用して、ゾーンまたはリージョンで利用可能なバージョンを確認できます。
ノードプールをダウングレードすることはできません。その代わりに、目的のバージョンで新しいノードプールを作成して、ワークロードを移行します。ノードプールでノードの自動アップグレードを有効にすると、マスター バージョンに合わせてノードがアップグレードされます。
データを永続ディスクに保存する
ノードプールをアップグレードする前に、保持したいデータが、永続ディスクを使用する永続ボリュームを使用したポッドに保存されていることを確認する必要があります。永続ディスクは、アップグレード時にデータを消去せずにマウント解除され、そのデータはポッド間で「引き渡され」ます。
永続ディスクには次の制限があります。
- ポッドを実行しているノードが Compute Engine VM であること
- これらの VM が永続ディスクと同じ Compute Engine プロジェクトおよびゾーンに存在すること
既存のノード インスタンスに永続ディスクを追加する方法については、永続ディスクの追加またはサイズ変更をご覧ください。
マスターのアップグレード
以降のセクションの「アップグレード」は、「ダウングレード」に置き換えることもできます。クラスタまたはノードプールをダウングレードする前に、クラスタのダウングレードに関する注意事項を理解しておいてください。
マスターの自動アップグレード
クラスタのマスターは自動的にアップグレードされます。クラスタが受信するアップグレードを詳細に制御するには、リリース チャンネルに登録します。
クラスタの GKE バージョンの管理について詳しくは、バージョニングとアップグレードをご覧ください。
手動アップグレードは、新しいバージョンの提供後であればいつでも開始できます。
手動でマスターをアップグレードする
クラスタ マスター アップグレードを開始するとき、コントロール プレーンが再びアクセス可能になるまで、クラスタの構成を数分間変更できません。マスター アップグレードの際にダウンタイムが発生しないようにするには、リージョン クラスタの使用を検討してください。
マスターは、GCP Console または gcloud
コマンドライン ツールを使用して、手動でアップグレードできます。クラスタのマスターをアップグレードしたら、ノードも同じバージョンにアップグレードできます。ノードの自動アップグレードが有効化されている場合、コントロール プレーンのアップグレードの後にノードもアップグレードされます。
リリース チャンネルに登録したクラスタを手動でアップグレードすることはできません(また、必要もありません)。
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
クラスタ マスターを手動で更新するには、次の手順に従います。
Google Cloud Platform Console で Google Kubernetes Engine のメニューに移動します。
目的のクラスタを選択します。
[マスターのバージョン] の横にある [アップグレード可能] リンクをクリックします。
目的のバージョンを選択し、[変更] をクリックします。
画面の上部にある矢印をクリックすると、クラスタの概要ページに戻ります。
ノードのアップグレード
クラスタノードをアップグレードすると、GKE はアップグレード中のノードへの新しいポッドのスケジュールを停止し、それらのポッドを別のノードで再スケジュールします。置換ノードは、ノードを再作成するその他のイベントと同じように前のノードと同じ名前で再作成されます。
リリース チャンネルに登録したクラスタを持つノードを手動でアップグレードすることはできません(また、必要もありません)。リリース チャンネルを使用する場合、クラスタとノードの自動アップグレード中の短期間を除き、クラスタとノードで同じバージョンが使用されます。
ノードの停止中の一般的な動作については、ポッドに関するトピックをご覧ください。
アップグレードは、すべてのノードが再作成され、クラスタが目的の状態になったときにはじめて完了します。新しくアップグレードされたノードがマスターに登録されると、GKE ではノードがスケジューリング可能であるとマークされます。
新しいノード インスタンスでは、目的の Kubernetes バージョンと次のものが実行されます。
- ベース OS イメージ
- Docker デーモン
kubelet
kube-proxy
ノードの自動アップグレード
ノードの自動アップグレードは新しいクラスタでデフォルトで有効になります。ノードの自動アップグレードが有効化されている場合、ノード上の GKE バージョンがマスターで実行されているバージョンに合わせて最新バージョンに保たれていることが保証されます。
ノードの自動アップグレードを有効にするには、ノードの自動アップグレードのドキュメントをご覧ください。リリース チャンネルは、各クラスタが受信する自動アップグレードをより詳細に制御します。
手動でノードをアップグレードする
アップグレードできるノードプールのバージョンは、マスターと同じバージョン、または引き続き提供され、かつマスターとの互換性がある以前のバージョンに限られます。Kubernetes では、マスターに最大で 2 つ古いマイナー バージョンまでのノードと互換性があることが保証されます。たとえば、Kubernetes 1.13 マスターは Kubernetes 1.11 ノードと互換性があります。
ノードプールはダウングレードできません。その代わりに、古いバージョンでノードプールを新規に作成し、そのノードプールにワークロードを移行します。
Google Cloud Platform 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.2
や cluster-version=latest
です。
バージョンの指定について詳しくは、バージョニングとアップグレードのドキュメントをご覧ください。
詳細については、gcloud container clusters upgrade
のドキュメントをご覧ください。
Console
GCP Console を使用してノードプールをアップグレードするには、次の手順を行います。
GCP Console で Google Kubernetes Engine のメニューに移動します。
鉛筆の形をしたクラスタの [編集] ボタンをクリックします。
[ノードプール] セクションで、アップグレードするノードプールの開示矢印を展開します。
[ノードのバージョン] の横にある [変更] リンクをクリックします。
目的のバージョンを選択し、[変更] をクリックします。
[保存] をクリックします。
ノードのアップグレード ステータスの確認
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
ノードのアップグレードをキャンセルする
アップグレードはいつでもキャンセルできます。アップグレードをキャンセルすると、次のようになります。
- アップグレードを開始したノードのアップグレードは完了します
- アップグレードを開始していないノードはアップグレードされません
- アップグレードがすでに完了したノードは影響を受けず、ロールバックされません
まず、次のコマンドを使用してアップグレードのオペレーション ID を取得します。
gcloud container operations list
次に、次のコマンドを実行してアップグレードをキャンセルします。
gcloud beta container operations cancel [OPERATION_ID]
gcloud container operations cancel
のドキュメントをご覧ください。
ノードのアップグレードをロールバックする
アップグレードに失敗したノードプールまたはアップグレードがキャンセルされたノードプールを以前のバージョンの Kubernetes にロールバックできます。正常にアップグレードされたノードプールをロールバックすることはできません。アップグレードを開始していないノードは影響を受けません。
アップグレードをロールバックするには、次のコマンドを実行します。
gcloud container node-pools rollback [POOL_NAME] --cluster [CLUSTER_NAME]
ここで
- [POOL_NAME] はロールバックするノードプールの名前です。
- [CLUSTER_NAME] はロールバックするノードプールが含まれるクラスタの名前です。
- [COMPUTE_ZONE] はプロジェクトのコンピューティング ゾーンです。
gcloud container node-pools rollback
のドキュメントをご覧ください。