Azure Kubernetes Service (AKS) でのポッドの垂直方向の自動スケーリング

この記事では、オープンソース バージョンの Kubernetes に基づく、Azure Kubernetes Service (AKS) の Vertical Pod Autoscaler (VPA) の概要について説明します。 構成すると、過去の使用状況に基づいて、ワークロードごとのコンテナーに対するリソース要求と制限が自動的に設定されます。 VPA は、他のポッドの CPU とメモリを解放し、AKS クラスターを効果的に利用するのに役立ちます。

ポッドの垂直方向の自動スケーリングは、時間の経過に伴って変化するリソースの使用量に関する推奨事項を提供します。 リソース使用量の急増を管理するには、必要に応じてポッド レプリカの数をスケーリングする Horizontal Pod Autoscaler を使用します。

メリット

Vertical Pod Autoscaler には、次の利点があります。

  • アプリケーションの "適切なサイズ" に合わせてプロセッサとメモリのリソースを分析および調整します。 VPA では、スケールアップだけでなく、時間の経過に伴うリソースの使用に基づいたスケールダウンも行います。

  • スケーリング モードが "自動" または "再作成" に設定されていれば、リソース要求を変更する必要があるときにポッドが削除されます。

  • リソース ポリシーを指定して個々のコンテナーの CPU とメモリの制約を設定します

  • ポッドのスケジュール設定に適切なリソースがノードにあることを確認します

  • プロセッサまたはメモリ リソースに対して行われた調整の構成可能なログ記録

  • クラスター リソース使用率を向上させ、他のポッドの CPU とメモリを解放します。

制限事項

  • ポッドの垂直方向の自動スケーリングでは、1 つのクラスターにつき VerticalPodAutoscaler オブジェクトに関連付けられた最大 1,000 個のポッドがサポートされます。

  • VPA は、クラスターで利用可能なリソースよりも多くのリソースを推奨することがあります。 その結果、ノードに十分なリソースがないため、ポッドをノードに割り当てて実行することができなくなります。 この制限を克服するには、LimitRange を名前空間ごとに利用可能な最大リソースに設定します。これにより、ポッドは指定よりも多くのリソースを要求しなくなります。 さらに、VerticalPodAutoscaler オブジェクト内のポッドごとに許容される最大リソースの推奨値を設定できます。 ノード リソースが不足する問題を VPA で完全に解決することはできないことに注意してください。 この制限範囲は固定ですが、ノード リソースの使用量は動的に変化します。

  • 同じ CPU とメモリ使用量のメトリックに基づいてスケーリングを行う Horizontal Pod Autoscaler を Vertical Pod Autoscaler と併用することはお勧めしません。

  • VPA レコメンダーは最大 8 日間の履歴データのみを保存します。

  • ワークロードの実際のメモリ使用量の可視性が制限されているため、VPA は JVM ベースのワークロードをサポートしていません。

  • VPA のマネージド実装と並行して独自の VPA 実装を実行することは推奨もサポートもされていません。 追加のレコメンダーまたはカスタマイズされたレコメンダーの使用はサポートされています。

  • AKS Windows コンテナーはサポートされていません。

準備

  • AKS クラスターでは、Kubernetes バージョン 1.24 以降が実行されています。

  • インストールおよび構成済みの Azure CLI バージョン 2.52.0 以降。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

  • VPA をインストールするクラスターに kubectl を接続する必要があります。

VPA の概要

API オブジェクト

Vertical Pod Autoscaler は、Kubernetes 自動スケーリング API グループの API リソースです。 サポートされているバージョンは 0.11 以降で、Kubernetes autoscaler のリポジトリにあります。

VPA オブジェクトは、次の 3 つのコンポーネントで構成されます。

  • レコメンダー - 現在および過去のリソース消費量を監視し、それに基づいて、コンテナーの CPU とメモリの要求/制限の推奨値を提供します。 レコメンダーは、メトリック履歴、メモリ不足 (OOM) イベント、VPA のデプロイ仕様を監視し、適正な要求を提案します。 適切なリソース要求と制限の構成を提供することで、制限の増減が行われます。

  • アップデーター - どの管理対象ポッドに適切なリソースが設定されているかを確認し、適切なリソースが設定されていない場合はポッドを強制終了して、更新された要求を使用してコントローラーがポッドを再作成できるようにします。

  • VPA アドミッション コントローラー - 新しいポッド (アップデーターのアクティビティによりコントローラーによって作成または再作成されたポッド) に対して適切なリソース要求を設定します。

VPA アドミッション コントローラー

VPA アドミッション コントローラーは、自身を Mutating Admission Webhook として登録するバイナリです。 これはは、ポッドが作成されるたびに API サーバーから要求を取得し、一致する VPA 構成があるかどうかを評価するか、対応する VPA 構成を見つけて現在の推奨事項を使用してポッドにリソース要求を設定します。

overlay-vpa-cert-webhook-check と呼ばれるスタンドアロン ジョブが VPA アドミッション コントローラーの外部で実行されます。 overlay-vpa-cert-webhook-check は、証明書の作成と更新、および VPA アドミッション コントローラーの MutatingWebhookConfiguration としての登録に使用されます。

高可用性を実現するために、AKS は 2 つのアドミッション コントローラー レプリカをサポートしています。

VPA オブジェクトの動作モード

リソース要件を自動計算させるコントローラーごとに、Vertical Pod Autoscaler リソースが挿入されます。 最も一般的には、これは "デプロイ" です。 VPA には 4 つの動作モードがあります。

  • Auto - VPA は、ポッドの作成中にリソース要求を割り当てて、優先更新メカニズムを使用して既存のポッドを更新します。 現在、AutoRecreate と同等であり、既定のモードでもあります。 ポッド要求の再起動不要の ("インプレース") 更新が利用可能になれば、Auto モードはそれを優先更新メカニズムとして使用できます。 Recreate モードを使用する場合、VPA は、ポッドのリソース要求を変更する必要が生じるとそれを削除します。 それにより、ポッドが一斉に再起動され、アプリケーションの不整合が発生する場合があります。 その状況で再起動を制限し、一貫性を維持するには、PodDisruptionBudget を使用します。
  • Recreate - VPA はポッドの作成中にリソース要求を割り当てます。また、要求されたリソースが新しい推奨事項と大幅に異なる場合は、既存のポッドを削除することでポッドを更新します (ポッド中断バジェットが定義されている場合は、それが考慮されます)。 このモードは、リソース要求が変更されるたびに必ずポッドを再起動する必要がある場合にのみ使用し、それ以外の場合は使用しないでください。 それ以外の場合は、再起動不要の更新が利用可能になったときにそれを利用できる Auto モードが推奨されます。
  • Initial - VPA はポッドの作成中にのみリソース要求を割り当てます。その後はリソース要求を変更しません。
  • Off - VPA はポッドのリソース要件を自動的に変更しません。 推奨事項は計算され、VPA オブジェクトで調べることができます。

アプリケーション開発時のデプロイ パターン

VPA に慣れていない場合に推奨される一般的なデプロイ パターンは、アプリケーションの開発中に次の手順を実行して、VPA に固有のリソース使用率の特性を特定し、VPA をテストして正常に機能していることを確認し、他の Kubernetes コンポーネントと共に VPA をテストしてクラスターのリソース使用率を最適化することです。

  1. 実稼働クラスターで UpdateMode = "Off" を設定し、推奨モードで VPA を実行することで、VPA をテストし、VPA の扱い方に慣れることができます。 UpdateMode = "Off" により、停止を引き起こす可能性のある誤った構成が発生するのを回避できます。

  2. まず、一定期間にわたって実際のリソース使用率の統計情報を収集することで、監視を確立します。 これにより、リソース上で実行されているワークロードの影響を受ける、コンテナーとポッドのリソースの動作および症状や問題の兆候を理解することができます。

  3. 監視データに精通して、パフォーマンスの特性を理解します。 この分析情報に基づいて、必要な要求/制限を適宜設定し、次のデプロイまたはアップグレードでそれを適用します。

  4. 要件に応じて、updateMode 値を AutoRecreate、または Initial に設定します。

クラスターで VPA をデプロイ、アップグレード、または無効化する

このセクションでは、クラスターで Vertical Pod Autoscaler をデプロイ、アップグレード、または無効化します。

  1. 新しいクラスターで VPA を有効にするには、az aks create コマンドで --enable-vpa パラメーターを使用します。

    az aks create -n myAKSCluster -g myResourceGroup --enable-vpa
    

    数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。

  2. 必要に応じて、既存のクラスターで VPA を有効にするには、[] コマンドをhttps://learn.microsoft.com/en-us/cli/azure/aks?view=azure-cli-latest#az-aks-update使用--enable-vpaします。

    az aks update -n myAKSCluster -g myResourceGroup --enable-vpa 
    

    数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。

  3. 必要に応じて、既存のクラスターで VPA を無効にするには、[] コマンドをhttps://learn.microsoft.com/en-us/cli/azure/aks?view=azure-cli-latest#az-aks-update使用--disable-vpaします。

    az aks update -n myAKSCluster -g myResourceGroup --disable-vpa
    

    数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。

  4. Vertical Pod Autoscaler ポッドが正常に作成されたことを確認するには、kubectl get コマンドを使用します。

kubectl get pods -n kube-system

コマンドの出力には、VPA ポッドに固有の次の結果が含まれています。 ポッドに "実行中" 状態が表示されるはずです。

NAME                                        READY   STATUS    RESTARTS   AGE
vpa-admission-controller-7867874bc5-vjfxk   1/1     Running   0          41m
vpa-recommender-5fd94767fb-ggjr2            1/1     Running   0          41m
vpa-updater-56f9bfc96f-jgq2g                1/1     Running   0          41m

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

次の手順では、それぞれ 100 ミリコアを要求し、500 ミリコアをわずかに上回って利用しようとする 1 つのコンテナーを実行する、2 つのポッドを含むデプロイを作成します。 デプロイメントを指す VPA 構成も作成されます。 VPA ではポッドの動作を監視し、約 5 分後により高い CPU 要求で更新されます。

  1. hamster.yaml という名前のファイルを作成し、kubernetes/autoscaler GitHub リポジトリから Vertical Pod Autoscaler の例の次のマニフェストをコピーします。

  2. kubectl apply コマンドを使用して hamster.yaml の Vertical Pod Autoscaler の例をデプロイし、YAML マニフェストの名前を指定します。

    kubectl apply -f hamster.yaml
    

    数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。

  3. 次の kubectl get コマンドを実行して、hamster サンプル アプリケーションからポッドを取得します。

    kubectl get pods -l app=hamster
    

    出力例は次のようになります。

    hamster-78f9dcdd4c-hf7gk   1/1     Running   0          24s
    hamster-78f9dcdd4c-j9mc7   1/1     Running   0          24s
    
  4. いずれかのポッドで kubectl describe コマンドを使用して、CPU とメモリの予約を表示します。 "exampleID" を、前の手順の出力で返されたポッド ID のいずれかに置き換えます。

    kubectl describe pod hamster-exampleID
    

    出力例は、クラスターに関する情報のスニペットです。

     hamster:
        Container ID:  containerd://
        Image:         k8s.gcr.io/ubuntu-slim:0.1
        Image ID:      sha256:
        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:      Wed, 28 Sep 2022 15:06:14 -0400
        Ready:          True
        Restart Count:  0
        Requests:
          cpu:        100m
          memory:     50Mi
        Environment:  <none>
    

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

  5. vpa-updater が新しい hamster ポッドを起動するのを待ちます (これには数分かかります)。 kubectl get コマンドを使用してポッドを監視できます。

    kubectl get --watch pods -l app=hamster
    
  6. 新しい hamster ポッドが開始されたら、kubectl describe コマンドを実行しているポッドを記述し、更新された CPU とメモリの予約を表示します。

    kubectl describe pod hamster-<exampleID>
    

    出力例は、ポッドを説明する情報のスニペットです。

    State:          Running
      Started:      Wed, 28 Sep 2022 15:09:51 -0400
    Ready:          True
    Restart Count:  0
    Requests:
      cpu:        587m
      memory:     262144k
    Environment:  <none>
    

    前の出力では、CPU 予約が 587 millicpu に増加し、元の値の 5 倍を超えていることがわかります。 メモリは 262,144 キロバイトに増加しました。これは約 250 メビバイト (元の値の 5 倍) です。 このポッドはリソース不足であり、Vertical Pod Autoscaler ではより適切な値で見積もりを修正しました。

  7. VPA から更新された推奨事項を表示するには、kubectl describe コマンドを実行して hamster-vpa リソース情報を記述します。

    kubectl describe vpa/hamster-vpa
    

    出力例は、リソース使用率に関する情報のスニペットです。

     State:          Running
      Started:      Wed, 28 Sep 2022 15:09:51 -0400
    Ready:          True
    Restart Count:  0
    Requests:
      cpu:        587m
      memory:     262144k
    Environment:  <none>
    

Pod Autoscaler 要求を設定する

ポッドの垂直方向の自動スケーリングでは、updateMode が Auto に設定されている場合に、VerticalPodAutoscaler オブジェクトを使用してポッドのリソース要求を自動的に設定します。要件とテストに応じて異なる値を設定できます。 この例では、updateMode が Recreate に設定されています。

  1. 次のコマンドを実行して、クラスターの VPA を有効にします。 クラスター名 myAKSCluster を AKS クラスターの名前に置き換え、myResourceGroup をクラスターがホストされているリソース グループの名前に置き換えます。

    az aks update -n myAKSCluster -g myResourceGroup --enable-vpa
    
  2. azure-autodeploy.yaml という名前のファイルを作成し、そこに次のマニフェストをコピーします。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: vpa-auto-deployment
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: vpa-auto-deployment
      template:
        metadata:
          labels:
            app: vpa-auto-deployment
        spec:
          containers:
          - name: mycontainer
            image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
            resources:
              requests:
                cpu: 100m
                memory: 50Mi
            command: ["/bin/sh"]
            args: ["-c", "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"]
    

    このマニフェストは、2 つのポッドを持つデプロイを記述しています。 各ポッドには、100 milliCPU と 50 MiB のメモリを要求する 1 つのコンテナーがあります。

  3. 次の例に示すようにkubectl create コマンドでポッドを作成します。

    kubectl create -f azure-autodeploy.yaml
    

    数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。

  4. 次の kubectl get コマンドを実行してポッドを取得します。

    kubectl get pods
    

    出力は、ポッドの名前と状態を示す次の例のようになります。

    NAME                                   READY   STATUS    RESTARTS   AGE
    vpa-auto-deployment-54465fb978-kchc5   1/1     Running   0          52s
    vpa-auto-deployment-54465fb978-nhtmj   1/1     Running   0          52s
    
  5. azure-vpa-auto.yaml という名前のファイルを作成し、VerticalPodAutoscaler を説明する次のマニフェストをコピーします。

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: vpa-auto
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind:       Deployment
        name:       vpa-auto-deployment
      updatePolicy:
        updateMode: "Recreate"
    

    targetRef.name 値は、vpa-auto-deployment という名前のデプロイによって制御されるすべてのポッドが VerticalPodAutoscaler に属することを指定します。 updateMode 値が Recreate であるということは、Vertical Pod Autoscaler コントローラーでポッドを削除し、CPU とメモリの要求を調整してから、新しいポッドを作成できることを意味します。

  6. kubectl apply コマンドを使用して、マニフェストをクラスターに適用します。

    kubectl create -f azure-vpa-auto.yaml
    
  7. 数分待ってから、次の kubectl get コマンドを実行して、実行中のポッドをもう一度表示します。

    kubectl get pods
    

    出力は、ポッドの名前が変更されていることとポッドの状態を示す次の例のようになります。

    NAME                                   READY   STATUS    RESTARTS   AGE
    vpa-auto-deployment-54465fb978-qbhc4   1/1     Running   0          2m49s
    vpa-auto-deployment-54465fb978-vbj68   1/1     Running   0          109s
    
  8. Kubectl get コマンドを使用して、実行中のポッドの 1 つに関する詳細情報を取得します。 podName を、前の手順で取得した、いずれかのポッドの名前に置き換えます。

    kubectl get pod podName --output yaml
    

    出力は次の例のようになります。Vertical Pod Autoscaler コントローラーがメモリ要求を 262144k に、CPU 要求を 25 milliCPU に増やしたことを示しています。

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        vpaObservedContainers: mycontainer
        vpaUpdates: 'Pod resources updated by vpa-auto: container 0: cpu request, memory
          request'
      creationTimestamp: "2022-09-29T16:44:37Z"
      generateName: vpa-auto-deployment-54465fb978-
      labels:
        app: vpa-auto-deployment
    
    spec:
      containers:
      - args:
        - -c
        - while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done
        command:
        - /bin/sh
        image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
        imagePullPolicy: IfNotPresent
        name: mycontainer
        resources:
          requests:
            cpu: 25m
            memory: 262144k
    
  9. Vertical Pod Autoscaler に関する詳細情報と、CPU とメモリに関する推奨事項を取得するには、kubectl get コマンドを使用します。

    kubectl get vpa vpa-auto --output yaml
    

    出力は次の例のようになります。

     recommendation:
      containerRecommendations:
      - containerName: mycontainer
        lowerBound:
          cpu: 25m
          memory: 262144k
        target:
          cpu: 25m
          memory: 262144k
        uncappedTarget:
          cpu: 25m
          memory: 262144k
        upperBound:
          cpu: 230m
          memory: 262144k
    

    結果は、コンテナーを最適に実行するために、CPU やメモリのターゲットを変更する必要がないことを target 属性によって指定していることを示しています。 ターゲット CPU とメモリの推奨事項がより高い場合、結果は異なる可能性があります。

    Vertical Pod Autoscaler では、lowerBound および upperBound 属性を使用して、ポッドを削除して新しいポッドに置き換えるかどうかを決定します。 ポッドに下限より小さいか上限より大きい要求がある場合、Vertical Pod Autoscaler ではポッドを削除し、ターゲット属性を満たすポッドに置き換えます。

Vertical Pod Autoscaler の追加のレコメンダー

VPA のコア コンポーネントの 1 つがレコメンダーです。 これは、リアルタイムのリソース消費量に基づいてリソース使用量に関する推奨事項を提供します。 クラスターで VPA を有効にすると、AKS はレコメンダーをデプロイします。 カスタマイズされたレコメンダーまたは既定と同じイメージを持つ追加のレコメンダーをデプロイできます。 カスタマイズされたレコメンダーを使用する利点は、推奨事項のロジックをカスタマイズできることです。 VPA オブジェクトが多数ある場合は、追加のレコメンダーを使用して VPA を複数のレコメンダーに分割できます。

次の例は、既存の AKS クラスターに適用する追加のレコメンダーです。 その後、追加のレコメンダーを使用するように VPA オブジェクトを構成します。

  1. extra_recommender.yaml という名前のファイルを作成し、そこに次のマニフェストをコピーします。

    apiVersion: apps/v1 
    kind: Deployment 
    metadata: 
      name: extra-recommender 
      namespace: kube-system 
    spec: 
      replicas: 1 
      selector: 
        matchLabels: 
          app: extra-recommender 
      template: 
        metadata: 
          labels: 
            app: extra-recommender 
        spec: 
          serviceAccountName: vpa-recommender 
          securityContext: 
            runAsNonRoot: true 
            runAsUser: 65534 # nobody 
          containers: 
          - name: recommender 
            image: registry.k8s.io/autoscaling/vpa-recommender:0.13.0 
            imagePullPolicy: Always 
            args: 
              - --recommender-name=extra-recommender 
            resources: 
              limits: 
                cpu: 200m 
                memory: 1000Mi 
              requests: 
                cpu: 50m 
                memory: 500Mi 
            ports: 
            - name: prometheus 
              containerPort: 8942 
    
  2. kubectl apply コマンドを使用して extra-recomender.yaml Vertical Pod Autoscaler の例をデプロイし、YAML マニフェストの名前を指定します。

    kubectl apply -f extra-recommender.yaml 
    

    数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。

  3. hamnster_extra_recommender.yaml という名前のファイルを作成し、そこに次のマニフェストをコピーします。

    apiVersion: "autoscaling.k8s.io/v1" 
    kind: VerticalPodAutoscaler 
    metadata: 
      name: hamster-vpa 
    spec: 
      recommenders:  
        - name: 'extra-recommender' 
      targetRef: 
        apiVersion: "apps/v1" 
        kind: Deployment 
        name: hamster 
      updatePolicy: 
        updateMode: "Auto" 
      resourcePolicy: 
        containerPolicies: 
          - containerName: '*' 
            minAllowed: 
              cpu: 100m 
              memory: 50Mi 
            maxAllowed: 
              cpu: 1 
              memory: 500Mi 
            controlledResources: ["cpu", "memory"] 
    --- 
    apiVersion: apps/v1 
    kind: Deployment 
    metadata: 
      name: hamster 
    spec: 
      selector: 
        matchLabels: 
          app: hamster 
      replicas: 2 
      template: 
        metadata: 
          labels: 
            app: hamster 
        spec: 
          securityContext: 
            runAsNonRoot: true 
            runAsUser: 65534 # nobody 
          containers: 
            - name: hamster 
              image: k8s.gcr.io/ubuntu-slim:0.1 
              resources: 
                requests: 
                  cpu: 100m 
                  memory: 50Mi 
              command: ["/bin/sh"] 
              args: 
                - "-c" 
                - "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done" 
    

    controlledResourcesmemory が指定されていない場合、レコメンダーは OOM イベントに応答しません。 その場合は、controlledValues で CPU のみを設定します。 controlledValues では、RequestsOnly オプションでコンテナーのリソース要求を更新するか、RequestsAndLimits オプションを使用してリソース要求と制限の両方を更新するかを選択できます。 既定値は RequestsAndLimits です。 RequestsAndLimits オプションを使用する場合、要求は実際の使用量に基づいて計算され、制限は現在のポッドの要求と制限の比率に基づいて計算されます。

    たとえば、2 つの CPU を要求し、CPU を 4 つまでに制限するポッドから開始する場合、VPA は常に制限を要求の 2 倍に設定します。 同じ原則がメモリにも適用されます。 RequestsAndLimits モードを使用すると、これは最初のアプリケーション リソースの要求と制限のブループリントとして機能します。

自動モードを使用し、CPU とメモリの両方に対する推奨事項を計算することで、VPA オブジェクトを簡素化できます。

  1. kubectl apply コマンドを使用して hamster_extra-recomender.yaml の例をデプロイし、YAML マニフェストの名前を指定します。

    kubectl apply -f hamster_customized_recommender.yaml
    
  2. vpa-updater が新しい hamster ポッドを起動するのを待ちます (これには数分かかります)。 kubectl get コマンドを使用してポッドを監視できます。

    kubectl get --watch pods -l app=hamster
    
  3. 新しい hamster ポッドが開始されたら、kubectl describe コマンドを実行しているポッドを記述し、更新された CPU とメモリの予約を表示します。

    kubectl describe pod hamster-<exampleID>
    

    出力例は、ポッドを説明する情報のスニペットです。

    State:          Running
      Started:      Wed, 28 Sep 2022 15:09:51 -0400
    Ready:          True
    Restart Count:  0
    Requests:
      cpu:        587m
      memory:     262144k
    Environment:  <none>
    
  4. VPA から更新された推奨事項を表示するには、kubectl describe コマンドを実行して hamster-vpa リソース情報を記述します。

    kubectl describe vpa/hamster-vpa
    

    出力例は、リソース使用率に関する情報のスニペットです。

    State:          Running
     Started:      Wed, 28 Sep 2022 15:09:51 -0400
    Ready:          True
    Restart Count:  0
    Requests:
      cpu:        587m
      memory:     262144k
    Environment:  <none>
    Spec:
      recommenders:
        Name: customized-recommender
    

トラブルシューティング

VPA のインストールに関する問題を診断するには、次の手順を実行します。

  1. 次のコマンドを使用して、すべてのシステム コンポーネントが実行されているかどうかを確認します。

    kubectl --namespace=kube-system get pods|grep vpa
    

出力には、3 つのポッド (レコメンダー、アップデーター、アドミッション コントローラー) が一覧表示され、すべての状態が Running ステータスを示すはずです。

  1. システム コンポーネントがエラーをログに記録しているかどうかを確認します。 前のコマンドによって返されたポッドごとに、次のコマンドを実行します。

    kubectl --namespace=kube-system logs [pod name] | grep -e '^E[0-9]\{4\}'
    
  2. 次のコマンドを実行して、カスタム リソース定義が作成されたことを確認します。

    kubectl get customresourcedefinition | grep verticalpodautoscalers
    

次のステップ

この記事では、アプリケーションの要件に合わせて、クラスター ノードの CPU やメモリなどのリソース使用率を自動的にスケーリングする方法について説明しました。

  • また、ポッドの水平オートスケーラーを使用して、アプリケーションを実行するポッドの数を自動的に調整することもできます。 ポッドの水平オートスケーラーの使用手順については、「AKS でのアプリケーションのスケーリング」を参照してください。

  • 関連する VPA オブジェクトの定義の詳細については、「Vertical Pod Autoscaler [API リファレンス]」を参照してください。