今回ははNodeのオートスケーリングについて、説明します。
Nodeのオートスケーリングとは、リソースの使用量に応じて、Node数を増えたり減ったりすることです。
k8s自体はこの機能は持っていません。
GKE(GCP)の場合、NodePool単位で機能の有効化や無効化ができるようになっています。
オートスケーリングについて
オートスケーリングは特にkubternetesのmanifestで何かを設定する必要はありません。
なぜなら、こればGCPなどのクラウドサービス特有の機能だからです。
Nodeのスケジューリングについて、以下の内容でピンポイントでご紹介します。
Node数の設定
GKEのNodePoolでは、最小Node数と最大Node数を事前に決めることが可能です。
発動のタイミング
作成されたPodがPending状態になったPodができたタイミングで、ClusterAutoscalerが発動するようになっています。
Pending状態とは
PodがPending状態になるのは、(NodePoolのノード)残りのリソースがPodのrequestの設定値より少ない場合発生します。
Podのrequestとlimitの設定方針
もしLimitとrequestの設定値の差が大きい場合、リソースが足りないのに、自動スケールアウトしてくれない場合があります。
そのため、limitとrequestの設定方針として、以下が望ましい
- RequestとLimitに著しい差を付けないこと
- Requestを大きくしないこと
パフォーマンス測定の方法
実際に値を決める際に、まずRequestとLimitを低く設定しつつ、徐々にパフォーマンスをしながら上げていくことをお勧めします。
最後に
今回はGCPのNodePoolをベースに、Nodeのスケジューリングについて簡単にご紹介しました。
実際の案件では、パフォーマンスの測定を根拠にして、平常時/ピーク時の必要リソースに応じて、オートスケーリングの値を決める必要があります。
ここまで読んでいただいて、お疲れ様でした。
コメント