

 **このページの改善にご協力ください** 

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**GitHub でこのページを編集する**」リンクを選択してください。

# Horizontal Pod Autoscaler を使用してポッドデプロイをスケールする
<a name="horizontal-pod-autoscaler"></a>

Kubernetes [Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) は、そのリソースの CPU 使用率に基づいて、デプロイ、レプリケーションコントローラー、またはレプリカセット内の Pod の数を自動的にスケーリングします。これにより、アプリケーションは需要の増加に合わせてスケールアウトしたり、リソースが不要になったときにスケールインしたりできるため、ノードを他のアプリケーションに解放できます。ターゲットの CPU 使用率を設定すると、Horizontal Pod Autoscaler はターゲットを満たすようにアプリケーションをスケールインまたはスケールアウトします。

Horizontal Pod Autoscaler は、Kubernetes の標準の API リソースで、Amazon EKS クラスターにメトリクスソース（Kubernetes メトリクスサーバーなど）がインストールされているだけで動作します。アプリケーションのスケーリングを開始するために、クラスターに Horizontal Pod Autoscaler をデプロイまたはインストールする必要はありません。詳細については、Kubernetes ドキュメントの「[Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/)」を参照してください。

このトピックでは、Amazon EKS クラスターの Horizontal Pod Autoscaler の準備や、サンプルアプリケーションで動作することの確認方法を説明しています。

**注記**  
このトピックは、Kubernetes ドキュメントの「[Horizontal Pod autoscaler walkthrough](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/)」に基づいています。
+ 既存の Amazon EKS クラスターがあります。そうでない場合は、「[Amazon EKS の使用を開始する](getting-started.md)」を参照してください。
+ Kubernetes メトリクスサーバーがインストールされています。詳細については、「」を参照してください[Kubernetes Metrics Server でのリソース使用状況の表示](metrics-server.md)
+ [Amazon EKS クラスターと通信するように設定された](getting-started-console.md#eks-configure-kubectl) `kubectl` クライアントを使用しています。

## Horizontal Pod Autoscaler テストアプリケーションを実行する
<a name="hpa-sample-app"></a>

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

**注記**  
この例は、Kubernetes ドキュメントの「[Horizontal Pod autoscaler walkthrough](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/)」に基づいています。

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

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

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

1. `php-apache` デプロイ用の Horizontal Pod Autoscaler リソースを作成します。

   ```
   kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
   ```

   このコマンドは、デプロイの CPU 使用率の目標が 50%、Pod の数が最低 1 つ、最大 10 個の Autoscaler を作成します。CPU の平均負荷が 50% を下回ると、Autoscaler はデプロイの Pod 数を最小の 1 に減らそうとします。負荷が 50 % を超えると、Autoscaler はデプロイの Pod 数を最大の 10 まで増やそうとします。詳細については、Kubernetes ドキュメントの「[How does a HorizontalPodAutoscaler work?](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#how-does-a-horizontalpodautoscaler-work)」を参照してください。

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

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"
   ```

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

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

1. 負荷を停止します。負荷を生成しているターミナルウィンドウで、`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](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/)」を参照してください。

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

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