

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

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

# Vertical Pod Autoscaler を使用してポッドリソースを調整する
<a name="vertical-pod-autoscaler"></a>

Kubernetes [Vertical Pod Autoscaler](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler) は、Pod の CPU とメモリの予約を自動的に調整し、アプリケーションを「適切なサイズ」にします。この調整により、クラスターリソースの使用率が向上し、他の Pod の CPU とメモリが解放されます。このトピックでは、Vertical Pod Autoscaler をクラスターにデプロイし、動作していることを確認する方法について説明します。
+ 既存の Amazon EKS クラスターがあります。そうでない場合は、「[Amazon EKS の使用を開始する](getting-started.md)」を参照してください。
+ Kubernetes メトリクスサーバーがインストールされています。詳細については、「」を参照してください[Kubernetes Metrics Server でのリソース使用状況の表示](metrics-server.md)
+ [Amazon EKS クラスターと通信するように設定された](getting-started-console.md#eks-configure-kubectl) `kubectl` クライアントを使用しています。
+ デバイスに、OpenSSL `1.1.1` 以降がインストールされています。

## Vertical Pod Autoscaler をデプロイする
<a name="vpa-deploy"></a>

このセクションでは、Vertical Pod Autoscaler をクラスターにデプロイします。

1. ターミナルウィンドウを開き、Vertical Pod Autoscaler ソースコードをダウンロードするディレクトリに移動します。

1. [kubernetes/autoscaler](https://github.com/kubernetes/autoscaler) GitHub リポジトリのクローンを作成します。

   ```
   git clone https://github.com/kubernetes/autoscaler.git
   ```

1. `vertical-pod-autoscaler` ディレクトリを変更します。

   ```
   cd autoscaler/vertical-pod-autoscaler/
   ```

1. (オプション) Vertical Pod Autoscaler の別のバージョンをすでにデプロイしている場合は、次のコマンドを使用して削除します。

   ```
   ./hack/vpa-down.sh
   ```

1. ノードが `registry.k8s.io` コンテナレジストリに対してインターネットからアクセスできない場合は、次のイメージをプルして、独自のプライベートリポジトリにプッシュする必要があります。イメージをプルして独自のプライベートリポジトリにプッシュする方法の詳細については、「[あるリポジトリから別のリポジトリにコンテナイメージをコピーする](copy-image-to-repository.md)」 を参照してください。

   ```
   registry.k8s.io/autoscaling/vpa-admission-controller:0.10.0
   registry.k8s.io/autoscaling/vpa-recommender:0.10.0
   registry.k8s.io/autoscaling/vpa-updater:0.10.0
   ```

   プライベートの Amazon ECR リポジトリにイメージをプッシュする場合は、マニフェストの `registry.k8s.io` をレジストリに置き換えます。*111122223333* は、ご自分のアカウント ID に置き換えます。*region-code* を、クラスターのある AWS リージョンに置き換えます。次のコマンドは、お使いのリポジトリにマニフェストのリポジトリ名と同じ名前を付けていることを前提としています。リポジトリに別名を付けた場合も、同様に変更する必要があります。

   ```
   sed -i.bak -e 's/registry.k8s.io/111122223333.dkr.ecr.region-code.amazonaws.com/' ./deploy/admission-controller-deployment.yaml
   sed -i.bak -e 's/registry.k8s.io/111122223333.dkr.ecr.region-code.amazonaws.com/' ./deploy/recommender-deployment.yaml
   sed -i.bak -e 's/registry.k8s.io/111122223333.dkr.ecr.region-code.amazonaws.com/' ./deploy/updater-deployment.yaml
   ```

1. 次のコマンドを使用して、Vertical Pod Autoscaler をクラスターにデプロイします。

   ```
   ./hack/vpa-up.sh
   ```

1. Vertical Pod Autoscaler Pod が正常に作成されたことを確認します。

   ```
   kubectl get pods -n kube-system
   ```

   出力例は次のとおりです。

   ```
   NAME                                        READY   STATUS    RESTARTS   AGE
   [...]
   metrics-server-8459fc497-kfj8w              1/1     Running   0          83m
   vpa-admission-controller-68c748777d-ppspd   1/1     Running   0          7s
   vpa-recommender-6fc8c67d85-gljpl            1/1     Running   0          8s
   vpa-updater-786b96955c-bgp9d                1/1     Running   0          8s
   ```

## Vertical Pod Autoscaler のインストールをテストします
<a name="vpa-sample-app"></a>

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

1. 次のコマンドを使用して `hamster.yaml` Vertical Pod Autoscaler の例をデプロイします。

   ```
   kubectl apply -f examples/hamster.yaml
   ```

1. `hamster` サンプルアプリケーションから Pod を取得します。

   ```
   kubectl get pods -l app=hamster
   ```

   出力例は次のとおりです。

   ```
   hamster-c7d89d6db-rglf5   1/1     Running   0          48s
   hamster-c7d89d6db-znvz5   1/1     Running   0          48s
   ```

1. `cpu` と `memory` の予約を表示する Pod の 1 つを説明します。*c7d89d6db-rglf5* を前のステップの出力で返された ID の 1 つに置き換えます。

   ```
   kubectl describe pod hamster-c7d89d6db-rglf5
   ```

   出力例は次のとおりです。

   ```
   [...]
   Containers:
     hamster:
       Container ID:  docker://e76c2413fc720ac395c33b64588c82094fc8e5d590e373d5f818f3978f577e24
       Image:         registry.k8s.io/ubuntu-slim:0.1
       Image ID:      docker-pullable://registry.k8s.io/ubuntu-slim@sha256:b6f8c3885f5880a4f1a7cf717c07242eb4858fdd5a84b5ffe35b1cf680ea17b1
       Port:          <none>
       Host Port:     <none>
       Command:
         /bin/sh
       Args:
         -c
         while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done
       State:          Running
         Started:      Fri, 27 Sep 2019 10:35:16 -0700
       Ready:          True
       Restart Count:  0
       Requests:
         cpu:        100m
         memory:     50Mi
   [...]
   ```

   元の Pod は 100 millicpu の CPU と 50 メビバイトのメモリを予約していることがわかります。このサンプルアプリケーションでは、100 millicpu は Pod の実行に必要な数よりも少ないため、CPU に制約があります。また、必要とするよりもはるかに少ないメモリを予約します。Vertical Pod Autoscaler `vpa-recommender` のデプロイでは、hamster Pod を分析して、CPU とメモリの要件が適切かどうかを確認します。調整が必要な場合、`vpa-updater` は更新された値で Pod を再起動します。

1. `vpa-updater` が新しい hamster Pod を起動するまで待ちます。これには 1\$12 分かかります。次のコマンドを使用して、Pod をモニタリングできます。
**注記**  
新しい Pod が起動されたかどうかが不明な場合は、Pod 名を前のリストと比較します。新しい Pod が起動すると、新しい Pod 名が表示されます。

   ```
   kubectl get --watch Pods -l app=hamster
   ```

1. 新しい hamster Pod が開始されたら、それについて説明し、更新された CPU とメモリの予約を表示します。

   ```
   kubectl describe pod hamster-c7d89d6db-jxgfv
   ```

   出力例は次のとおりです。

   ```
   [...]
   Containers:
     hamster:
       Container ID:  docker://2c3e7b6fb7ce0d8c86444334df654af6fb3fc88aad4c5d710eac3b1e7c58f7db
       Image:         registry.k8s.io/ubuntu-slim:0.1
       Image ID:      docker-pullable://registry.k8s.io/ubuntu-slim@sha256:b6f8c3885f5880a4f1a7cf717c07242eb4858fdd5a84b5ffe35b1cf680ea17b1
       Port:          <none>
       Host Port:     <none>
       Command:
         /bin/sh
       Args:
         -c
         while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done
       State:          Running
         Started:      Fri, 27 Sep 2019 10:37:08 -0700
       Ready:          True
       Restart Count:  0
       Requests:
         cpu:        587m
         memory:     262144k
   [...]
   ```

   以前の出力では、`cpu` 予約が元の値の 5 倍以上である 587 millicpu に増加したことがわかります。`memory` は 262,144 キロバイト (約 250 メビバイト、つまり元の値の 5 倍) に増加しました。この Pod はリソース不足だったため、Vertical Pod Autoscaler で見積りをより適切な値で修正しました。

1. `hamster-vpa` リソースの詳細を表示して、新しい推奨事項を表示します。

   ```
   kubectl describe vpa/hamster-vpa
   ```

   出力例は次のとおりです。

   ```
   Name:         hamster-vpa
   Namespace:    default
   Labels:       <none>
   Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                   {"apiVersion":"autoscaling.k8s.io/v1beta2","kind":"VerticalPodAutoscaler","metadata":{"annotations":{},"name":"hamster-vpa","namespace":"d...
   API Version:  autoscaling.k8s.io/v1beta2
   Kind:         VerticalPodAutoscaler
   Metadata:
     Creation Timestamp:  2019-09-27T18:22:51Z
     Generation:          23
     Resource Version:    14411
     Self Link:           /apis/autoscaling.k8s.io/v1beta2/namespaces/default/verticalpodautoscalers/hamster-vpa
     UID:                 d0d85fb9-e153-11e9-ae53-0205785d75b0
   Spec:
     Target Ref:
       API Version:  apps/v1
       Kind:         Deployment
       Name:         hamster
   Status:
     Conditions:
       Last Transition Time:  2019-09-27T18:23:28Z
       Status:                True
       Type:                  RecommendationProvided
     Recommendation:
       Container Recommendations:
         Container Name:  hamster
         Lower Bound:
           Cpu:     550m
           Memory:  262144k
         Target:
           Cpu:     587m
           Memory:  262144k
         Uncapped Target:
           Cpu:     587m
           Memory:  262144k
         Upper Bound:
           Cpu:     21147m
           Memory:  387863636
   Events:          <none>
   ```

1. アプリケーション例の試用が終了したら、次のコマンドで削除します。

   ```
   kubectl delete -f examples/hamster.yaml
   ```