本文へスキップ
BecomeCoder

Kubernetesコース · 第6章 運用と実践 ― 現場で使うために · レッスン31

HorizontalPodAutoscaler ― 負荷で自動スケール

ブラウザで完結

導入

昼間はアクセスが多く、夜は少ない。そんなサービスで Pod の数をずっと固定にするのは無駄も危険もあります。HorizontalPodAutoscaler(水平ポッドオートスケーラー、HPA) は、負荷に応じて Pod の数を自動で増やしたり減らしたりしてくれる仕組みです。

説明

水平スケール(horizontal scaling) とは「Pod のを増減させて処理能力を変えること」です(1つの Pod を大きくする垂直スケールと対比されます)。HPA は、CPU 使用率などの**メトリクス(測定値)**を監視し、目標値を保つように Deployment の replicas(Pod 数)を調整します。

ここで前レッスンの requests が効いてきます。「CPU 使用率50%」の基準は、requests に対する割合で計算されるからです。requests が未指定だと HPA は使用率を計算できません。

# webという名前のDeploymentに対してHPAを設定
# CPU使用率50%を目標に、Podを最小2〜最大10の範囲で自動調整
$ kubectl autoscale deployment web --cpu-percent=50 --min=2 --max=10
flowchart TD
    M["メトリクスを監視<br/>(CPU使用率など)"] --> C{"目標50%より<br/>高い? 低い?"}
    C -->|高い| UP["replicasを増やす<br/>Pod追加"]
    C -->|低い| DOWN["replicasを減らす<br/>Pod削減"]
    UP --> M
    DOWN --> M

この監視と調整のループにより、アクセス急増時は Pod が自動で増えて耐え、落ち着けば減ってコストを抑えます。

HPA が CPU やメモリの使用率を知るには、クラスタに metrics-server(メトリクスサーバー) という「各 Pod の使用量を集めて配る部品」が入っている必要があります。マネージド k8s では最初から入っていることが多いですが、自前クラスタでは導入を忘れると HPA が動きません。

実際に動かしてみよう

上がマニフェスト(YAML)エディタ、下が kubectl の端末です。エディタの内容は `manifest.yaml` として保存され、下で `kubectl apply -f manifest.yaml` を実行するとクラスタに反映されます(pod.yaml / deploy.yaml / service.yaml も最初から置いてあります)。`kubectl get pods` / `describe` / `scale` / `rollout` などで結果を確かめましょう(本物のKubernetesではなく、動きを再現した軽量なシミュレータです)。各レッスンは毎回まっさらな状態から始まり、「最初からやり直す」で戻せます。

kubectl(シミュレート)

マニフェスト(YAML)を書いて kubectl コマンドを試せる学習用クラスタを読み込みます(本物のKubernetesではなく、apply/get/describe/scale/rollout などの動きを再現した軽量な自作シミュレータです)。
スクロールして表示された時点でも自動で読み込まれます。