すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Service Mesh:サイドカープロキシで動的にオーバーコミットできる ACK リソースを設定する

最終更新日:Mar 26, 2025

Container Service for Kubernetes(ACK)ProクラスターがService Mesh(ASM)インスタンスに接続されている場合、動的リソースオーバーコミットモードが有効になっていると、Deploymentに挿入されたサイドカープロキシは、クラスターのリソース使用率を向上させるために動的にオーバーコミットできるリソースをサポートします。このトピックでは、サイドカープロキシで動的にオーバーコミットできるACKリソースを構成する方法について説明します。

前提条件

動的リソースオーバーコミット機能の概要

Kubernetes では、kubelet は、Pod の Quality of Service (QoS) クラスに基づいて、ノード上の Pod によって使用されるリソースを管理します。たとえば、kubelet は Out of Memory (OOM) の優先順位を制御します。Pod の QoS クラスは、Guaranteed、Burstable、または BestEffort のいずれかになります。Pod の QoS クラスは、Pod に設定されている CPU とメモリリソースの requests と limits によって異なります。

ack-koordinator はリソースを動的にオーバーコミットできます。ack-koordinator はノードの負荷をリアルタイムで監視し、ポッドに割り当てられているものの使用されていないリソースをスケジュールします。動的にオーバーコミットできるリソースと通常のリソースを区別するために、ack-koordinator は バッチ 優先度を、batch-cpu および batch-memory を含む、動的にオーバーコミットできるリソースに割り当てます。詳細については、動的リソースオーバーコミットの有効化 をご参照ください。

手順

  1. ack-slo-config ConfigMap をデプロイします。

    1. 以下の内容を含む configmap.yaml という名前のファイルを作成します。

      ConfigMap の設定項目を変更することで、リソースを柔軟に管理できます。設定項目の詳細については、「動的リソースオーバーコミットを有効にする」をご参照ください。

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: ack-slo-config
        namespace: kube-system
      data:
        colocation-config: |
          {
            "enable": true,
            "metricAggregateDurationSeconds": 60,
            "cpuReclaimThresholdPercent": 60,
            "memoryReclaimThresholdPercent": 70,
            "memoryCalculatePolicy": "usage"
          }
    2. kube-system ネームスペースに ack-slo-config ConfigMap が存在するかどうかを確認します。

      • ack-slo-config ConfigMap が存在する場合は、kubectl patch コマンドを実行して ConfigMap を更新できます。これにより、ConfigMap の他の設定が変更されるのを防ぎます。

        kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)"
      • ack-slo-config ConfigMap が存在しない場合は、次のコマンドを実行して ack-slo-config という名前の ConfigMap を作成します。

        kubectl apply -f configmap.yaml
  2. 次のコマンドを実行して、現在のバッチリソースの合計量をクエリします。

    # $nodeName をクエリするノードの名前に置き換えます。
    kubectl get node $nodeName -o yaml

    予期される出力:

    #Node
    status:
      allocatable:
        # 単位:ミリコア。次の例では、50 コアを割り当てることができます。
        kubernetes.io/batch-cpu: 50000
        # 単位:バイト。次の例では、50 GB のメモリを割り当てることができます。
        kubernetes.io/batch-memory: 53687091200
  3. サイドカープロキシで動的にオーバーコミットできるリソースを設定します。

    挿入されたサイドカープロキシコンテナと istio-init コンテナに対して、動的にオーバーコミットできる ACK リソースを設定できます。

    1. ASM コンソール にログインします。左側のナビゲーションペインで、[サービスメッシュ] > [メッシュ管理] を選択します。

    2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、[データプレーンコンポーネント管理] > [サイドカープロキシ設定] を選択します。

    3. [グローバル] タブの [サイドカープロキシ設定] ページで、[リソース設定] をクリックし、[サイドカープロキシに動的にオーバーコミットできる ACK リソースを設定する] を選択し、関連パラメータを設定してから、ページの下部にある [設定の更新] をクリックします。

      [リソース制限][必要なリソース] は、同じ値または異なる値に設定できます。ワークロードタイプに基づいて [リソース制限][必要なリソース] を設定することをお勧めします。

      • ワークロードの QoS クラスが Guaranteed の場合は、両方を同じ値に設定することをお勧めします。

      • 他のタイプの Pod を使用する場合は、[必要なリソース] の値を [リソース制限] の値よりも小さくしておくことをお勧めします。この設定要件は、通常のリソースにも適用されます。

      設定例:

      設定項目

      子設定項目

      説明

      [挿入されたサイドカープロキシのリソースを設定する (ACK 動的オーバーコミットリソース)]

      [リソース制限]

      この例では、[CPU]2000 ミリコア、[メモリ]2048 MiB に設定します。

      [必要なリソース]

      この例では、[CPU]200 ミリコア、[メモリ]256 MiB に設定します。

      [istio-init コンテナのリソースを設定する (ACK 動的オーバーコミットリソース)]

      [リソース制限]

      この例では、[CPU]1000 ミリコア、[メモリ]1024 MiB に設定します。

      [必要なリソース]

      この例では、[CPU]100 ミリコア、[メモリ]128 MiB に設定します。

  4. アプリケーションをデプロイし、バッチリソースを申請します。

    1. 以下の内容を含む demo.yaml という名前のファイルを作成します。

      次の YAML ファイルは、Deployment を作成し、バッチリソースを申請します。Pod にラベルを追加して Pod の QoS クラスを指定し、requests フィールドと limits フィールドにバッチリソースを指定します。これにより、Pod は動的にオーバーコミットできるリソースを使用できます。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sleep
        template:
          metadata:
            labels:
              app: sleep
              # 必須。Pod の QoS クラスを BestEffort に設定します。
              koordinator.sh/qosClass: "BE"
          spec:
            terminationGracePeriodSeconds: 0
            containers:
            - name: sleep
              image: curlimages/curl
              command: ["/bin/sleep", "infinity"]
              imagePullPolicy: IfNotPresent
              resources:
                requests:
                  # 単位:ミリコア。次の例では、CPU リクエストは 1 コアに設定されています。
                  kubernetes.io/batch-cpu: "1k"
                  # 単位:バイト。次の例では、メモリリクエストは 1 GB に設定されています。
                  kubernetes.io/batch-memory: "1Gi"
                limits:
                  kubernetes.io/batch-cpu: "1k"
                  kubernetes.io/batch-memory: "1Gi"
    2. 次のコマンドを実行して、demo.yaml をテストアプリケーションとしてデプロイします。

      kubectl apply -f demo.yaml
  5. オプション: BestEffort Pod のリソース制限が有効になっているかどうかを確認します。

    アプリケーションをデプロイしてバッチリソースを申請した後、Pod のリソース制限が有効になっているかどうかを確認できます。詳細については、「動的リソースオーバーコミットを有効にする」をご参照ください。

    1. Pod が存在するノードにログインし、次のコマンドを実行して CPU 制限を確認します。

      cat /sys/fs/cgroup/cpu,cpuacct/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod****.slice/cri-containerd-****.scope/cpu.cfs_quota_us

      予期される出力:

      # cgroup の CPU 制限は 1 コアに設定されています。
      100000
    2. Pod が存在するノードにログインし、次のコマンドを実行してメモリ制限を確認します。

      cat /sys/fs/cgroup/memory/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod****.slice/cri-containerd-****.scope/memory.limit_in_bytes

      予期される出力:

      # cgroup のメモリ制限は 1 GB に設定されています。
      1073741824

    出力の CPU 制限とメモリ制限が 手順4 で設定したものと同じであれば、BestEffort Pod のリソース制限は有効になっています。