Horizontal Pod Autoscaler - Amazon EKS

Horizontal Pod Autoscaler

Kubernetes Horizontal Pod Autoscaler は、そのリソースの CPU 使用率に基づいて設定されたデプロイ、レプリケーションコントローラー、またはレプリカセット内の pods の数を自動的にスケーリングします。これにより、アプリケーションは需要の増加に合わせてスケールアウトしたり、リソースが不要になったときにスケールインしたりできるため、ノードを他のアプリケーションに解放できます。ターゲットの CPU 使用率を設定すると、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 walkthrough」(Horizontal pod autoscaler ウォークスルー) に基づいています。

前提条件

Horizontal Pod Autoscaler テストアプリケーションを実行する

このセクションでは、サンプルアプリケーションをデプロイして、Horizontal Pod Autoscaler が動作していることを確認します。

注記

この例は、「Kubernetes ドキュメント」の「Horizontal pod Autoscaler Walkthrough」に基づいています。

Horizontal Pod Autoscaler のインストールをテストするには

  1. 次のコマンドを使用して、シンプルな Apache ウェブサーバーアプリケーションをデプロイします。

    kubectl apply -f https://k8s.io/examples/application/php-apache.yaml

    この Apache ウェブサーバー pod には 500 millicpu の CPU 制限が与えられ、ポート 80 で提供されています。

  2. 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% を下回ると、Autoscaler はデプロイの pods 数を最小の 1 に減らそうとします。負荷が 50% を超えると、オートスケーラーは展開内の pods の数を最大 10 まで増やしようとします。詳細については、Kubernetes ドキュメントの「How does a HorizontalPodAutoscaler work?」(HorizontalPodAutoscaler の仕組み) を参照してください。

  3. 詳細を表示するには、次のコマンドで 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) にあるため、スケールインすることはできません。

  4. コンテナを実行して、ウェブサーバーのロードを作成します。

    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"
  5. デプロイのスケールアウトを監視するには、前のステップを実行したターミナルとは別のターミナルで次のコマンドを定期的に実行します。

    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 を超えてスケールすることはありません。

  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」を参照してください。

  7. サンプルアプリケーションのテストが終了したら、php-apache リソースを削除します。

    kubectl delete deployment.apps/php-apache service/php-apache horizontalpodautoscaler.autoscaling/php-apache