LoginSignup
0
0

More than 3 years have passed since last update.

GKEの同時ノードアップグレード数は各インスタンスグループのノード数に制限される

Last updated at Posted at 2020-11-10

結論

GKEの同時ノードアップグレード数(maxSurge)を大きな値にしても同時アップグレードされるノード数は各インスタンスグループのノード数に制限される

ノードサージアップグレードとは

GKEのノードはkubernetesのバージョンアップやaddonの追加等でアップグレードが必要となります。メンテナンス枠での自動アップグレードやgcloudコマンドを用いた手動アップグレードではローリングアップグレードとなり、順繰りにインスタンスの入替えが発生します。その際、デフォルトだとmaxSurge=1となっており、1ノードずつの入替えとなります。そのため、ノード数分に比例してアップグレード時間が増加してしまいます。アップグレード時間を短縮するためにはmaxSurgeの値を大きくし、同時に入替えできるノード数を増やす必要があります。なお、1ノードずつの入替えでも言えることなのですが、入替え中のpod数を制御したい(必ず1つ以上のpodのhealthcheckが通った状態を保つ等)場合はPodDisruptionBudgetを設定しておきましょう。maxSurgeはnode pool毎に設定することができます。

GKE のサージ アップグレードで運用効率が大幅に改善

maxSurgeはインスタンスグループのノード数に制限される

シングルゾーンクラスタの場合

1つのzoneのみにノードがあるGKEクラスタをシングルゾーンクラスタと言います。シングルゾーンクラスタの場合は1つのnode poolに1つのインスタンスグループしか存在しないため、maxSurgeに設定した値の数で同時アップグレードが行われます。例えば、6ノードあるシングルゾーンクラスタのnode poolにmaxSurge=6を設定した場合の挙動を見てみましょう。

# asia-northeast1-aに6ノードあるシングルゾーンクラスタを作成
gcloud container clusters create test-single-zone --zone asia-northeast1-a --node-locations asia-northeast1-a --num-nodes 6

# node-poolのmaxSurgeを6に設定
gcloud container node-pools update default-pool --cluster test-single-zone --max-surge-upgrade 6 --max-unavailable-upgrade 0 --zone asia-northeast1-a

# NodeLocal DNSCacheを有効化し、ノード入替えを発生させる
gcloud container clusters update test-single-zone --zone asia-northeast1-a --update-addons NodeLocalDNS=ENABLED

以下はアップグレード開始直後のノード一覧です。maxSurge=6を設定しているので6ノードが新規に立ち上がって、旧6ノードから新6ノードへpod移行が行われます。
GKE-singlezone.png

マルチゾーンクラスタ及びリージョンクラスタの場合

複数zoneにノードがあるGKEクラスタはマルチゾーンクラスタリージョンクラスタがあります。マルチゾーンクラスタはコントロールプレーンが1つのzoneのみに存在し、リージョンクラスタはコントロールプレーンが複数zoneに存在する点で違いがあります。これらのクラスタの場合は1つのnode poolに複数のインスタンスグループが存在します。この場合同時アップグレードされるノード数はmaxSurgeに設定した値ではなく各インスタンスグループのノード数となります。例えば、3つのzoneに2ノード、合計6ノードあるマルチゾーンクラスタのnode poolにmaxSurge=6を設定した場合の挙動を見てみましょう。

# asia-northeast1-a,asia-northeast1-b,asia-northeast1-cそれぞれに2ノード、合計6ノードあるマルチゾーンクラスタを作成
gcloud container clusters create test-multi-zone --zone asia-northeast1-a --node-locations asia-northeast1-a,asia-northeast1-b,asia-northeast1-c --num-nodes 2

# node-poolのmaxSurgeを6に設定
gcloud container node-pools update default-pool --cluster test-multi-zone --max-surge-upgrade 6 --max-unavailable-upgrade 0 --zone asia-northeast1-a

# NodeLocal DNSCacheを有効化し、ノード入替えを発生させる
gcloud container clusters update test-multi-zone --zone asia-northeast1-a --update-addons NodeLocalDNS=ENABLED

以下はアップグレード開始直後のインスタンスグループの一覧とasia-northeast1-aのノード一覧です。maxSurge=6を設定していますが、新規に6ノードが一気に立ち上がってノード入替えが発生するのではなく、asia-northeast1-aのインスタンスグループのノードから入替えが発生しました。入替え完了後は別のインスタンスグループの入替えが発生して、インスタンスグループ単位で順繰りにノード入替えが発生しました。

GKE-multi2.png

GKE-multi1.png

まとめ

maxSurgeを設定していたとしても、複数zoneのノードがまたがるGKEクラスタの場合は同時ノードアップグレード数がインスタンスグループのノード数に制限されることに注意しましょう。2020/11時点のドキュメントではこのことは記載されていません。
インスタンスグループにはzoneをまたがった設定をすることもできるようですが、GKEクラスタ作成時に作られるインスタンスグループは単一zoneの設定となるようです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0