Horizontal Pod Autoscaler
Kubernetes Horizontal Pod Autoscaler
Horizontal Pod Autoscaler は、Kubernetes の標準の API リソースで、Amazon EKS クラスターにメトリクスソース(Kubernetes メトリクスサーバーなど)がインストールされているだけで動作します。アプリケーションのスケーリングを開始するために、クラスターに Horizontal Pod Autoscaler をデプロイまたはインストールする必要はありません。詳細については、Kubernetes ドキュメントの「Horizontal Pod Autoscaler
このトピックでは、Amazon EKS クラスターの Horizontal Pod Autoscaler の準備や、サンプルアプリケーションで動作することの確認方法を説明しています。
このトピックは、Kubernetes ドキュメントの「Horizontal Pod Autoscaler ウォークスルー
前提条件
-
既存の Amazon EKS クラスターがあります。そうでない場合は、「Amazon EKS の使用開始」を参照してください。
-
Kubernetes メトリクスサーバーがインストールされています。詳細については、「Kubernetes メトリクスサーバーのインストール」を参照してください。
-
Amazon EKS クラスターと通信するように設定された
kubectl
クライアントを使用しています。
Horizontal Pod Autoscaler テストアプリケーションを実行する
このセクションでは、サンプルアプリケーションをデプロイして、Horizontal Pod Autoscaler が動作していることを確認します。
この例は、Kubernetes ドキュメントの「Horizontal Pod Autoscaler Walkthrough
Horizontal Pod Autoscaler のインストールをテストするには
-
次のコマンドを使用して、シンプルな Apache ウェブサーバーアプリケーションをデプロイします。
kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
この Apache ウェブサーバーポッドには 500 millicpu の CPU 制限が与えられ、ポート 80 で提供されています。
-
php-apache
デプロイ用の Horizontal Pod Autoscaler リソースを作成します。kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
このコマンドは、デプロイの CPU 使用率が 50%、ポッドが最低 1 つ、ポッドが最大 10 個の Autoscaler を作成します。CPU の平均負荷が 50% を下回ると、Autoscaler はデプロイのポッド数を最小の 1 に減らそうとします。負荷が 50 パーセントを超えると、Autoscaler はデプロイのポッド数を最大の 10 まで増やそうとします。詳細については、Kubernetes ドキュメント の「Horizontal Pod Autoscaler の仕組み
」を参照してください。 -
詳細を表示するには、次のコマンドで Autoscaler を説明します。
kubectl get hpa
出力:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 0%/50% 1 10 1 51s
ご覧のように、現在の CPU 負荷は
0%
です。サーバーにまだ負荷がないためです。ポッド数は既に最低の境界 (1) にあるため、スケールインすることはできません。 -
コンテナを実行して、ウェブサーバーのロードを作成します。
kubectl run -i \ --tty load-generator \ --rm --image=busybox \ --restart=Never \ -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
-
デプロイのスケールアウトを監視するには、前のステップを実行したターミナルとは別のターミナルで次のコマンドを定期的に実行します。
kubectl get hpa php-apache
出力:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 250%/50% 1 10 5 4m44s
レプリカ数が増えるまで、1 分以上かかる場合があります。実際の CPU のパーセンテージが目標のパーセンテージよりも高い限り、レプリカの数は最大 10 まで増加します。この場合は
250%
のため、REPLICAS
の数は増え続けます。注記 レプリカの数が最大値に達するまで、数分かかる場合があります。例えば、CPU 負荷が 50% 以下になるために必要なレプリカの数が 6 だけの場合、負荷はレプリカの数 6 を超えてスケールすることはありません。
-
負荷を停止します。負荷を生成しているターミナルウィンドウで、
Ctrl+C
キーを押して負荷を停止します。スケールインを監視しているターミナルで次のコマンドを再度実行することで、レプリカの数が 1 にスケールバックされるのを確認できます。kubectl get hpa
出力
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 0%/50% 1 10 1 25m
注記 現在の CPU の割合が 0% であっても、スケールダウンのデフォルトの時間枠は 5 分であるため、レプリカの数が 1 に再び達するまでには時間がかかります。時間枠は変更可能です。詳細については、Kubernetes ドキュメントの「Horizontal Pod Autoscaler
」を参照してください。 -
サンプルアプリケーションのテストが終了したら、
php-apache
リソースを削除します。kubectl delete deployment.apps/php-apache service/php-apache horizontalpodautoscaler.autoscaling/php-apache