前書き
Google Kubernetes Engine (GKE)はGoogle Cloudのサービスの1つで、
コンテナオーケストレーションツールであるKubernetes (K8s)を用いた、コンテナのデプロイ、管理及びスケーリングが行えるサービスです
オンプレでのK8s運用に比べると様々なことが簡単に行えるとのこと
ただ、それでも様々な機能があるゆえになかなか最初は理解しにくいです
ですので、特定の機能に絞り、自分なりの理解を整理します
今回はStandardモードのクラスタにおける、ノードプールについてです
※ Autopilotモードにおいては、ノードは自動管理されます(ドキュメント)
ノードプール
ノードプールとは、クラスタ内において、ノードをグルーピングして管理するための仕組みです
1つのノードプール内のノードは全て同じ構成で、ノードのスケーリングやアップデートをひとまとめに管理することができます
ノードのマシンタイプに応じて、ローカルSSDやGPUの設定もノードプールにて行います
クラスタ作成時の制約
クラスタ作成時は必ず1のノードプールを作成する必要があります
またこの時、コンソール・gcloudコマンド共にノード数を0とすることはできません
クラスタ作成後にノード数を0とすることは可能です
# クラスタ作成直後のノード
$ kubectl get node
NAME STATUS ROLES AGE VERSION
gke-dohara-test-clus-dohara-test-node-980897df-srtc Ready <none> 78m v1.23.8-gke.1900
# ノード数を0個に
$ gcloud container clusters resize dohara-test-cluster --node-pool dohara-test-nodepool01 --num-nodes 0
Pool [dohara-test-nodepool01] for [dohara-test-cluster] will be resized to 0.
Do you want to continue (Y/n)? Y
Resizing dohara-test-cluster...done.
Updated [https://container.googleapis.com/v1/projects/solid-pact-363008/zones/asia-northeast1-a/clusters/dohara-test-cluster].
# クラスタ内のノードが0に
$ kubectl get node
No resources found
Kubernetesラベル
各ノードにはノードプール名やマシンタイプ、配置可能なPod数など、ノードプールに関する設定がラベルとして付与されています
ノードプール名についてはcloud.google.com/gke-nodepool
で付与されます
また、ノードプールの設定から任意のラベルを付与することもできます
gcloudコマンド(ドキュメント)
gcloud container node-pools update ${ノードプール名} --cluster ${クラスタ名} --node-labels hoge=hoge
ノードのスケーリング
手動でのスケーリング
各ノードグループのノード数は手動で変更することが可能です
gcloudコマンド(ドキュメント)
gcloud container clusters resize ${ノードプール名} --cluster ${クラスタ名} --num-nodes ${希望ノード数}
クラスタオートスケーラー(ドキュメント)
自動的にノード数を調整してくれる機能です
基本的には有効化した後は最小数と最大数を指定するだけですが、
応用設定として、クラスタの設定としてスケーリングの方針を指定すること等も可能です(ドキュメント)
ノードのアップグレード
こちらの記事で取り扱っています
その他機能
GKE Sandbox (ドキュメント)
簡単に言うと、コンテナと、ノードのカーネルの間に仲介役を用意することで、コンテナからカーネルを保護する仕組みです
コンテナランタイムはノードにおいて強い権限で稼働していることが多く、
仮に悪意のあるコードがコンテナで実行された場合、その権限をもってノードのシステムコールを利用される可能性があります
GKE SandboxはオープンソースであるgVisorを用いて、カーネルの代わりにコンテナへシステムコールを提供する機能となります