Horizontal Pod Autoscaler - Amazon EKS

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

Horizontal Pod Autoscaler

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

Prerequisites

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

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

注記

この例は、Kubernetes ドキュメントの「Horizontal Pod Autoscaler ウォークスルー」に基づいています。

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

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

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

    この Apache ウェブサーバーポッドには 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 つ、ポッドが最大 10 個の Autoscaler を作成します。CPU の平均負荷が 50% を下回ると、Autoscaler はデプロイのポッド数を最小の 1 に減らそうとします。負荷が 50 パーセントを超えると、Autoscaler はデプロイのポッド数を最大の 10 まで増やそうとします。詳細については、Kubernetes ドキュメントの「Horizontal Pod Autoscaler https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#how-does-the-horizontal-pod-autoscaler-work の仕組み」を参照してください。

  3. 詳細を表示するには、次のコマンドで Autoscaler を説明します。

    kubectl describe hpa

    出力:

    Name: php-apache Namespace: default Labels: <none> Annotations: <none> CreationTimestamp: Thu, 11 Jun 2020 16:05:41 -0500 Reference: Deployment/php-apache Metrics: ( current / target ) resource cpu on pods (as a percentage of request): <unknown> / 50% Min replicas: 1 Max replicas: 10 Deployment pods: 1 current / 0 desired Conditions: Type Status Reason Message ---- ------ ------ ------- AbleToScale True SucceededGetScale the HPA controller was able to get the target's current scale ScalingActive False FailedGetResourceMetric the HPA was unable to compute the replica count: did not receive metrics for any ready pods Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedGetResourceMetric 42s (x2 over 57s) horizontal-pod-autoscaler unable to get metrics for resource cpu: no metrics returned from resource metrics API Warning FailedComputeMetricsReplicas 42s (x2 over 57s) horizontal-pod-autoscaler invalid metrics (1 invalid out of 1), first error is: failed to get cpu utilization: unable to get metrics for resource cpu: no metrics returned from resource metrics API Warning FailedGetResourceMetric 12s (x2 over 27s) horizontal-pod-autoscaler did not receive metrics for any ready pods Warning FailedComputeMetricsReplicas 12s (x2 over 27s) horizontal-pod-autoscaler invalid metrics (1 invalid out of 1), first error is: failed to get cpu utilization: did not receive metrics for any ready pods

    ご覧のように、現在の CPU 負荷は <unknown> です。サーバーにまだ負荷がないためです。ポッド数は既に最低の境界 (1) にあるため、スケールインすることはできません。

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

    kubectl run -it --rm load-generator --image=busybox /bin/sh --generator=run-pod/v1

    数秒後にコマンドプロンプトが表示されない場合は、 を押す必要がありますEnter。 コマンドプロンプトから、次のコマンドを入力して負荷を生成し、Autoscaler でデプロイをスケールアウトさせます。

    while true; do wget -q -O- http://php-apache; done
  5. デプロイのスケールアウトを監視するには、前のステップを実行したターミナルとは別のターミナルで次のコマンドを定期的に実行します。

    kubectl get hpa

    出力:

    NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 250%/50% 1 10 5 4m44s

    実際の CPU のパーセンテージが目標のパーセンテージよりも高い限り、レプリカの数は最大 10 まで増加します。この場合は 250% のため、REPLICAS の数は増え続けます。

    注記

    レプリカの数が最大値に達するまで、数分かかる場合があります。たとえば、CPU 負荷が 50% 以下になるために必要なレプリカの数が 6 だけの場合、負荷はレプリカの数 6 を超えてスケールすることはありません。

  6. 負荷を停止します。(ステップ 4 で) 負荷を生成しているターミナルウィンドウで、Ctrl+C キーを押して負荷を停止します。次のコマンドを再度実行することで、レプリカの数が 1 にスケールバックされるのを見ることができます。

    kubectl get hpa

    出力

    NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 0%/50% 1 10 1 25m
    注記

    スケールダウンのデフォルトの期間は 5 分です。このため、現在の CPU の割合が 0% であっても、レプリカの数が 1 に再び達するまでには時間がかかります。この期間は変更可能です。詳細については、Kubernetes ドキュメントの「Horizontal Pod Autoscaler」を参照してください。

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

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