広告

kubernetes – NodeのAutoscaling

infrastructure as code

今回はは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のスケジューリングについて簡単にご紹介しました。
実際の案件では、パフォーマンスの測定を根拠にして、平常時/ピーク時の必要リソースに応じて、オートスケーリングの値を決める必要があります。

ここまで読んでいただいて、お疲れ様でした。

コメント

タイトルとURLをコピーしました