次の方法で共有


Azure Kubernetes Service (AKS) クラスターでコスト最適化アドオンのスケーリングを有効にする (プレビュー)

この記事では、Azure Kubernetes Service (AKS) でのコスト最適化アドオンのスケーリングの概要について説明します。 コスト最適化アドオンのスケーリングでは、既定の構成をオーバーライドするか、自動スケールを有効にすることで、カスタム CPU とメモリを必要とするアドオンを管理できます。 この機能により、リソースがアドオン ポッドに過度に割り当てられないようにし、コスト削減とクラスターの効率が向上します。

概要

コスト最適化アドオンのスケーリングを有効にすると 、Vertical Pod Autoscaler (VPA) アドオンがインストールされ、サポートされているアドオンが使用状況に基づいて自動スケーリングできるようになります。

この機能を使用すると、デプロイとデーモンセットでのリソースの既定の CPU/メモリ要求と制限、許可される最大および最小の CPU/メモリ、VPA カスタム リソース内の VPA 更新モードをカスタマイズすることもできます。 詳細については、「 AKS アドオンのリソース構成をカスタマイズする」を参照してください。

サポートされている AKS アドオン

次の AKS マネージド アドオンは、コスト最適化アドオンのスケーリング機能をサポートしています。

アドオン 有効化ビヘイビアー VPA カスタム リソース名 VPA カスタム リソースを確認するコマンド
CoreDNS 新しい AKS クラスターで既定で有効になっています。 coredns kubectl get vpa coredns --namespace kube-system
ワークロードアイデンティティ 手動で有効化する必要があるオプションのアドオン。 azure-wi-webhook-controller-manager kubectl get vpa azure-wi-webhook-controller-manager --namespace kube-system
イメージの整合性 手動で有効化する必要があるオプションのアドオン。 ratify kubectl get vpa ratify --namespace gatekeeper-system
ネットワーク可観測性 (網膜) 手動で有効化する必要があるオプションのアドオン。 retina-agentretina-operator kubectl get vpa retina-agent --namespace kube-systemkubectl get vpa retina-operator --namespace kube-system

コスト最適化アドオンスケーリングでサポートされる VPA モード

VPA では現在、コスト最適化アドオンのスケーリングに対して次のモードがサポートされています。

  • オフ: VPA はリソースの推奨事項データを提供しますが、ターゲット ポッドには適用しません。
  • 初期 (既定のモード): VPA は、再起動時にターゲット ポッドに CPU とメモリの推奨事項を自動的に適用しますが、再起動自体は開始しません。
  • 自動: VPA は、推奨事項に基づいてポッドの CPU 要求とメモリ要求を自動的に更新します。

コスト最適化アドオンのスケーリングを有効にする場合は、次の情報を考慮してください。

  • Deployment、DaemonSet、または VPA カスタム リソースを削除すると、変更は AKS アドオンの初期構成に戻ります。
  • コスト最適化アドオンのスケーリング機能により、 VPA アドオンは 、サポートされている AKS アドオンを自動スケールできます。 セルフホステッド VPA では機能しません。
  • コスト最適化アドオンのスケーリングを有効にすると、AKS によってアドオン ポッドが再起動されます。 現在、CoreDNS は、再起動中の中断の可能性を回避するための唯一の例外です。 詳細については、「 CoreDNS の自動スケール動作」を参照してください。

Warnung

コスト最適化アドオンのスケーリングを有効にする場合は、アドオンのシステム ノード プールに十分なコンピューティング リソースがあることを確認します。 AKS では、コンピューティング リソースの適切なサイズ設定を自動的に行うために、 クラスター オートスケーラー または ノードの自動プロビジョニング をオンにすることをお勧めします。 コスト最適化アドオン スケーリング機能を使用する場合は、保留中のアドオン ポッドを監視します。 VPA では、使用可能なノード容量を超えるリソース要求が推奨される場合があります。その場合、ポッドがスケジュールできない可能性があります。 サポートされているアドオンの要求と制限の 最小値/最大値をカスタマイズ することで、この動作を制御できます。

[前提条件]

Von Bedeutung

AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は、運用環境での使用を意図していません。 詳細については、次のサポート記事を参照してください。

aks-preview Azure CLI 拡張機能をインストールする

  1. aks-preview コマンドを使用して az extension add 拡張機能をインストールします。

    az extension add --name aks-preview
    
  2. az extension update コマンドを使って拡張機能の最新バージョンに更新します。

    az extension update --name aks-preview
    

コスト最適化アドオンのスケーリング プレビュー機能を登録する

  1. az feature register コマンドを使用して、コスト最適化アドオン スケーリング プレビュー機能を登録します。

    az feature register --namespace "Microsoft.ContainerService" --name "AKS-AddonAutoscalingPreview"
    

    状態が [登録済み] と表示されるまでに数分かかります。

  2. az feature show コマンドを使用して、登録の状態を確認します。

    az feature show --namespace "Microsoft.ContainerService" --name "AKS-AddonAutoscalingPreview"
    
  3. 状態が [登録済み] と表示されたら、 az provider register コマンドを使用して Microsoft.ContainerService プロバイダーの登録を更新します。

    az provider register --namespace Microsoft.ContainerService
    

AKS クラスターでコスト最適化アドオンのスケーリングを有効にする

アドオンを有効にすると、AKS クラスターによって VPA アドオンが自動的にインストールされます。 コスト最適化アドオンのスケーリング機能をサポートする AKS アドオンの有効化動作は異なります。

Bicep、ARM テンプレート、または Terraform を使用している場合は、 VerticalPodAutoscaler"True" に設定し、 AddonAutoscaling"enabled" に設定します。

新しいクラスターでコスト最適化アドオンのスケーリングを有効にする

  • az aks create フラグを指定して --enable-optimized-addon-scaling コマンドを使用して、新しい AKS クラスターでコスト最適化アドオンのスケーリングを有効にします。

    az aks create --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --enable-optimized-addon-scaling
    

既存のクラスターでコスト最適化アドオンのスケーリングを有効にする

  • az aks update フラグを指定して --enable-optimized-addon-scaling コマンドを使用して、既存の AKS クラスターでコスト最適化アドオンのスケーリングを有効にします。

    az aks update --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --enable-optimized-addon-scaling
    

AKS クラスターでコスト最適化アドオンのスケーリングを無効にする

  • az aks update フラグを指定して --disable-optimized-addon-scaling コマンドを使用して、AKS クラスターでのコスト最適化アドオンのスケーリングを無効にします。

    az aks update --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --disable-optimized-addon-scaling
    

コスト最適化アドオンのスケーリング機能を無効にしても、VPA アドオンは既定では無効になりません。 VPA を無効にするには、 AKS クラスターでの VPA の無効化を参照してください。

既定のリソース構成をカスタマイズする

クラスターでコスト最適化アドオンスケーリング機能を有効にすると、アドオン リソースの既定の CPU/メモリ設定と、サポートされている AKS アドオンの既定の VPA 構成をカスタマイズできます。 詳細については、「 AKS アドオンのリソース構成をカスタマイズする」を参照してください。

初期モードでは、VPA は、ポッドが作成または更新された場合にのみ、推奨される CPU 要求とメモリ要求を適用します。 推奨事項をすぐに有効にする場合は、ポッドを手動で更新してください。 推奨値を手動で適用する前に、 VPA カスタム リソースで VPA 更新モードが 初期 または 自動 に設定されていることを確認します

  1. ポッドの状態と CPU/メモリ使用率を確認して、ポッドが想定どおりに実行されていることを確認します。

    次の例では、 kubectl get pod コマンドを使用して CoreDNS ポッドの状態を確認します。

    kubectl get pod <coredns-pod-name> --namespace kube-system -o yaml
    

    次の出力は、CoreDNS ポッドの状態の例を示しています。

    apiVersion: v1
    kind: Pod
    metadata:
      name: <coredns-pod-name>
      namespace: kube-system
    spec:
      ...
      containers:
      - name: coredns
        resources:
          limits:
            cpu: "3"
            memory: "500Mi"
          requests:
            cpu: "100m"
            memory: "70Mi"
    
  2. kubectl get vpa コマンドを使用して、VPA 推奨値を取得します。

    kubectl get vpa coredns --namespace kube-system
    

    次の出力は、CoreDNS ポッドの VPA 推奨値の例を示しています。

    NAME      MODE      CPU   MEM        PROVIDED   AGE
    coredns   Initial   11m   23574998   True       44m
    
  3. VPA で推奨される値を使用する場合は、 kubectl delete pod コマンドを使用してポッドを手動で削除し、VPA 推奨値でポッドを再起動します。

    kubectl delete pod <coredns-pod-name> --namespace kube-system
    
  4. ポッドが再起動したら、 kubectl get pod コマンドを使用してポッドの状態と CPU/メモリの更新を確認します。

    kubectl get pod <coredns-pod-name> --namespace kube-system -o yaml
    

    次の出力は、VPA の推奨値を適用した後の CoreDNS ポッドの状態の例を示しています。

    apiVersion: v1
    kind: Pod
    metadata:
      name: <coredns-pod-name>
      namespace: kube-system
    spec:
      ...
      containers:
      - name: coredns
        resources:
          limits:
            cpu: "330m"
            memory: "168392842"
          requests:
            cpu: "11m"
            memory: "23574998"
    

トラブルシューティング

クラスターでコスト最適化アドオンのスケーリング機能を有効にすると、アドオン リソースの既定の CPU とメモリの設定をカスタマイズしたり、サポートされている AKS マネージド アドオンの既定の VPA 構成を変更したりできます。

自動スケールが有効なアドオン ポッドが保留中の状態にある場合、または自動スケールが有効なアドオンに対する VPA の推奨事項が表示されない場合は、次の手順に従って問題のトラブルシューティングを行います。

AKS マネージドの VPA アドオンの状態を確認する

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

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

    出力には、次の例のように、 kube-system 名前空間で実行されている 3 つのポッド (vpa-admission-controller、vpa-recommender、vpa-updater) が表示されます。

    vpa-admission-controller   2/2     2            2           4m11s
    vpa-recommender            1/1     1            1           4m11s
    vpa-updater                1/1     1            1           4m11s
    
  2. 3 つの VPA ポッドごとに、 kubectl logs コマンドを使用してログでエラーがないか確認します。 <pod-name>は必ず VPA ポッドの名前に置き換えてください。

    kubectl logs <pod-name> --namespace kube-system | grep -e '^E[0-9]\{4\}'
    
  3. kubectl get コマンドを使用して、カスタム リソース定義 (CRD) が作成されたことを確認します。

    kubectl get customresourcedefinition | grep verticalpodautoscalers
    

ポッドの状態と CPU またはメモリの使用率を確認する

  1. kubectl get pod コマンドを使用してポッドの状態を確認します。

    kubectl get pod <pod-name> --namespace=kube-system
    
  2. ポッドの状態が Pending の場合は、ポッドの状態プロパティを確認して、ポッドが実行されていない理由を確認します。

    kubectl describe pod <pod-name> --namespace kube-system -o yaml
    

    次の出力は、状態が Pending のポッドの状態の例を示しています。

    apiVersion: v1
    kind: Pod
    ...
    status:
      conditions:
      - lastProbeTime: null
        lastTransitionTime: "2023-05-03T17:05:26Z"
        message: '0/1 nodes are available: 1 Insufficient cpu, 1 Insufficient memory.
          preemption: 0/1 nodes are available: 1 Insufficient cpu, 1 Insufficient memory..'
        reason: Unschedulable
        status: "False"
        type: PodScheduled
      phase: Pending
      qosClass: Guaranteed
    
  3. CPU またはメモリが不足しているためにポッドが Pending されていることが出力に示されている場合は、次のアクションを検討してください。

    • さらにノードを追加し、リソース使用率が低いノードでポッドをスケジュールできるようにします。
    • 更新モードを Off に変更してターゲット アドオン ポッドの VPA を無効にし、ノードで使用可能なリソース値に 要求/制限を手動で更新 します。 リソース制限を非常に低い値に設定する場合は注意してください。これにより、ノードで使用できるリソースを超えるリソースを使用しようとすると、ポッドで OOMキルや CPUスロットリングが発生する可能性があるためです。

次のステップ