Vertical Pod Autoscaler - Amazon EKS

Vertical Pod Autoscaler

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

前提条件

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

    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
  6. 次のコマンドを使用して、Vertical Pod Autoscaler をクラスターにデプロイします。

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

    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 のインストールをテストします

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

Vertical Pod Autoscaler のインストールをテストするには
  1. 次のコマンドを使用して hamster.yaml Vertical Pod Autoscaler の例をデプロイします。

    kubectl apply -f examples/hamster.yaml
  2. hamster アプリケーション例から Pods を取得します。

    kubectl get pods -l app=hamster

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

    hamster-c7d89d6db-rglf5   1/1     Running   0          48s
    hamster-c7d89d6db-znvz5   1/1     Running   0          48s
  3. cpumemory の予約を表示する Pods の 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 Pods を分析して、CPU とメモリの要件が適切かどうかを確認します。調整が必要な場合、vpa-updater は更新された値で Pods を再起動します。

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

    注記

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

    kubectl get --watch Pods -l app=hamster
  5. 新しい 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 は見積りをより適切な値で修正しました。

  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