このページの改善にご協力ください
本ユーザーガイドの改善にご協力いただけませんか? このページの下部までスクロールし、[GitHub でこのページの編集] を選択します。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。
Horizontal Pod Autoscaler を使用してポッドデプロイをスケールする
Kubernetes Horizontal Pod Autoscaler
Horizontal Pod Autoscaler は、Kubernetes の標準 API リソースであり、動作するには、メトリクスソース (Kubernetes メトリクスサーバーなど) が Amazon EKS クラスターにインストールされている必要があります。アプリケーションのスケーリングを開始するために、クラスターに Horizontal Pod Autoscaler をデプロイまたはインストールする必要はありません。詳細については、Kubernetes ドキュメントの「Horizontal Pod Autoscaler」を参照してください。
このトピックでは、Amazon EKS クラスターの Horizontal Pod Autoscaler の準備や、サンプルアプリケーションで動作することの確認方法を説明しています。
注記
このトピックは、「Kubernetes ドキュメント」の「Horizontal Pod autoscaler ウォークスルー
前提条件
-
既存の Amazon EKS クラスターがあります。そうでない場合は、「Amazon EKS の使用を開始する」を参照してください。
-
Kubernetes メトリクスサーバーがインストールされています。詳細については、「KubernetesMetrics Server でリソースの使用状況を表示する」を参照してください。
-
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 ウェブサーバー Pod には 500 millicpu の CPU 制限が与えられ、ポート 80 で提供されています。
-
php-apache
デプロイ用の Horizontal Pod Autoscaler リソースを作成します。kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
このコマンドは、デプロイの CPU 使用率が 50% で、最小 1 個の Pod、最大 10 個 の Pods を使用するオートスケーラーを作成します。CPU の平均負荷が 50% を下回ると、オートスケーラーはデプロイの Pods 数を最小の 1 に減らそうとします。負荷が 50% を超えると、オートスケーラーは展開内の Pods の数を最大 10 まで増やしようとします。詳細については、Kubernetes ドキュメントの「How does a HorizontalPodAutoscaler work?
」(HorizontalPodAutoscaler の仕組み) を参照してください。 -
詳細を表示するには、次のコマンドで Autoscaler を説明します。
kubectl get hpa
出力例は次のとおりです。
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 0%/50% 1 10 1 51s
ご覧のように、現在の CPU 負荷は
0%
です。サーバーにまだ負荷がないためです。Pod 数は既に最低の境界 (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