Vertical Pod Autoscaler - Amazon EKS

Vertical Pod Autoscaler

Kubernetes Vertical Pod Autoscaler は、ポッドの CPU とメモリの予約を自動的に調整し、アプリケーションを「適切なサイズ」にします。この調整により、クラスターリソースの使用率が向上し、他のポッドの CPU とメモリが解放されます。このトピックでは、Vertical Pod Autoscaler をクラスターにデプロイし、動作していることを確認する方法について説明します。

Prerequisites

Vertical Pod Autoscaler をデプロイする

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

Vertical Pod Autoscaler をデプロイするには

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

  2. kubernetes/autoscaler GitHub リポジトリのクローンを作成します。

    git clone https://github.com/kubernetes/autoscaler.git
  3. vertical-pod-autoscaler ディレクトリを変更します。

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

    ./hack/vpa-down.sh
  5. 次のコマンドを使用して、Vertical Pod Autoscaler をクラスターにデプロイします。

    ./hack/vpa-up.sh
  6. Vertical Pod Autoscaler ポッドが正常に作成されたことを確認します。

    kubectl get pods -n kube-system

    出力:

    NAME READY STATUS RESTARTS AGE aws-node-949vx 1/1 Running 0 122m aws-node-b4nj8 1/1 Running 0 122m coredns-6c75b69b98-r9x68 1/1 Running 0 133m coredns-6c75b69b98-rt9bp 1/1 Running 0 133m kube-proxy-bkm6b 1/1 Running 0 122m kube-proxy-hpqm2 1/1 Running 0 122m 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 のインストールをテストする

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

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

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

    kubectl apply -f examples/hamster.yaml
  2. hamster サンプルアプリケーションからポッドを取得します。

    kubectl get pods -l app=hamster

    出力:

    hamster-c7d89d6db-rglf5 1/1 Running 0 48s hamster-c7d89d6db-znvz5 1/1 Running 0 48s
  3. CPU とメモリの予約を表示するには、ポッドの 1 つを記述します。

    kubectl describe pod hamster-<c7d89d6db-rglf5>

    出力:

    Name: hamster-c7d89d6db-rglf5 Namespace: default Priority: 0 Node: ip-192-168-9-44.<region-code>.compute.internal/192.168.9.44 Start Time: Fri, 27 Sep 2019 10:35:15 -0700 Labels: app=hamster pod-template-hash=c7d89d6db Annotations: kubernetes.io/psp: eks.privileged vpaUpdates: Pod resources updated by hamster-vpa: container 0: Status: Running IP: 192.168.23.42 IPs: <none> Controlled By: ReplicaSet/hamster-c7d89d6db Containers: hamster: Container ID: docker://e76c2413fc720ac395c33b64588c82094fc8e5d590e373d5f818f3978f577e24 Image: k8s.gcr.io/ubuntu-slim:0.1 Image ID: docker-pullable://k8s.gcr.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 ...

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

  4. vpa-updaterが新しい hamster ポッドを起動するまで待ちます。これには 1~2 分かかります。次のコマンドを使用して、ポッドをモニタリングできます。

    注記

    新しいポッドが起動されたかどうかが不明な場合は、ポッド名を前のリストと比較します。新しいポッドが起動すると、新しいポッド名が表示されます。

    kubectl get --watch pods -l app=hamster
  5. 新しい hamster ポッドが開始されたら、そのポッドについて説明し、更新された CPU とメモリの予約を表示します。

    kubectl describe pod hamster-<c7d89d6db-jxgfv>

    出力:

    Name: hamster-c7d89d6db-jxgfv Namespace: default Priority: 0 Node: ip-192-168-9-44.<region-code>.compute.internal/192.168.9.44 Start Time: Fri, 27 Sep 2019 10:37:08 -0700 Labels: app=hamster pod-template-hash=c7d89d6db Annotations: kubernetes.io/psp: eks.privileged vpaUpdates: Pod resources updated by hamster-vpa: container 0: cpu request, memory request Status: Running IP: 192.168.3.140 IPs: <none> Controlled By: ReplicaSet/hamster-c7d89d6db Containers: hamster: Container ID: docker://2c3e7b6fb7ce0d8c86444334df654af6fb3fc88aad4c5d710eac3b1e7c58f7db Image: k8s.gcr.io/ubuntu-slim:0.1 Image ID: docker-pullable://k8s.gcr.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 に増加したことがわかります。メモリは 262,144 キロバイト (約 250 メビバイト、つまり元の値の 5 倍) に増加しました。このポッドはリソース不足であり、Vertical Pod Autoscaler は見積りをより適切な値で修正しました。

  6. 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>
  7. サンプルアプリケーションの試用が終了したら、次のコマンドで削除します。

    kubectl delete -f examples/hamster.yaml