LoginSignup
9
4

More than 3 years have passed since last update.

Kubernetes のオートスケーリングいろいろ

Posted at

Kubernetes の本質はスケーリングだと思っている今日このごろ。
がしかしいろいろな場所で、いろいろな方法でスケーリングの機能が実装されており混乱しています。

私が把握しているのは3つの機能としてのオートスケーリングです。

  • 水平ポッドオートスケーリング
  • 垂直ポッドオートスケーリング
  • クラスタオートスケーラー

対象がPodなのかノードなのか、方向が水平か垂直なのか がまず分かれば中身を理解するのは難しくないはず。

漢字 + カタカナ英語 + 英語に疲弊する私

オートスケーラー、Autoscaler、オートスケーリング、Autoscaling、自動スケーリング、自動スケーラー …

ポッドにPod、ノードにNode …

呼び方がいまいち統一されておらず情報収集に苦労したので自分でまとめることにしました(強気

ちなみにGCP大好きマンなので、GCPでの設定方法・考え方になってます。EKSのそれらとは微妙に異なるかもです。あしからず。

そしてコードは1行もありません。概念のまとめです。あしからず……

水平ポッドオートスケーリング(Horizontal Pod Autoscaling)

対象:Pod

概要

Podに対する負荷に応じてPodの数を増やすことでワークロードの変化に対応する。
水平なので、横にPodが並ぶように増えたり減ったりするとイメージしやすいはず。

HPAでは「実際のリソース使用量」「カスタム指標」「外部指標」をもとにPodの数を自動的に調整する。

  • 実際のリソース使用量 … 文字通りPodでのリソース使用量。絶対値・割合のどちらの指定も可能。
  • カスタム指標 … クラスタ内のKubernetesオブジェクトによって報告される任意の指標。クライアントからのリクエスト数やI/Oなど。
  • 外部指標 … クラスタ外部のアプリケーションやサービスからの指標。接続されるキューの状況など。

その他、注意点

  • リソース(CPU/メモリ)を評価する場合、垂直ポッドオートスケーリング(Vertical Pod Autoscaling)との併用はできない。リソース以外を評価する場合はVPAと併用可能。
  • Deploymentに対してHPAを使いたい場合はDeploymentリソースに対して使う。ReplicaSetには使わない。悲惨なことになる。

垂直ポッドオートスケーリング(Vertical Pod Autoscaling)

対象:Pod

概要

Podに対する負荷に応じて podに割り当てるCPUやメモリを動的に変化させることでワークロードの変化に対応する。

水平スケールがPodの数を増やしたり減らしたりするのに対して、垂直スケールはPodのスペックを上げたり下げたりする。1つのPodの大きさを上下させると考えるとわかりやすい。

Vertical Pod Autoscaler (VPA) frees the users from necessity of setting up-to-date resource limits and requests for the containers in their pods. When configured, it will set the requests automatically based on usage and thus allow proper scheduling onto nodes so that appropriate resource amount is available for each pod. It will also maintain ratios between limits and requests that were specified in initial containers configuration.

とあるように、正確にはリソースの使用状況からリクエスト値を自動で算出してPod作成時に付与している。
これによって我々はリソースのリクエストやリミットを事細かに計算する必要がなくなります。

その他、注意点

  • kubernetesバージョン1.12.6以降、リージョンクラスタでしか利用できない。
  • 垂直ポッドオートスケーリング(Vertical Pod Autoscaling)との併用はできない。リソース以外を評価する場合はVPAと併用可能。

クラスタオートスケーラー(Cluster Autoscaling)

対象

Node(Node Pool)

概要

事前定義したノードプールの最小数と最大数の間で、ノード数を変動させることでワークロードの変化に対応する。

ノードプール内のノード数が不足していてPodをスケジュールできない場合、クラスタオートスケーラーは、ノードプールの最大サイズまでノードを追加する。
逆にノードプール内のノード数を少なくしてもすべてのPodのスケジューリングが可能な場合は、クラスタオートスケーラーはノードプールの最小サイズになるまでノードを削除する。

パターンとしてよくあるのは、負荷が上がってきたらPodの数を増やし、ノードあたりのPod数が多くなってきたらノードを増やすというやり方。

その他、注意点

  • ノードプールのノードで実行されているPodのリソースリクエスト数に基づいてノードプールのサイズを自動的に調整している。実際のリソース使用率ではない。
  • GKEのクラスタオートスケーラーは、Compute Engineの自動スケーリングとは別もの。
  • それぞれ30個のPodを実行するノードを最大1,000台までスケールできる。

最後に

自分もPodとノードを同居させていた。ごめんなさい。これがカナカナ英語の弊害。

9
4
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
9
4