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

Container Service for Kubernetes:L3 キャッシュと MBA に基づくリソース隔離の有効化

最終更新日:Jun 17, 2026

BestEffort Pod の L3 キャッシュとメモリ帯域幅に上限を設定し、共有ノード上のレイテンシーセンシティブなワークロードを保護します。

仕組み

Intel Resource Director Technology (RDT) は、ノードごとにハードウェアリソースをパーティション分割します。ack-koordinator は、ack-slo-config ConfigMap を読み取り、各ポッドの QoS クラスに基づいて resctrl グループ設定を適用します。デフォルトでは、BestEffort (BE) ポッドには L3 キャッシュの 30% が割り当てられ、レイテンシーセンシティブ (LS) ポッドには 100% が割り当てられます。メモリ帯域幅のデフォルトは、両方のクラスで 100% です。

前提条件

以下を確認してください:

課金

ack-koordinator は無料です。以下の 2 つの点でコストが発生する場合があります:

  • ノードリソースの消費:ack-koordinator は非マネージド型であり、ワーカーノードで実行されます。オーバーヘッドを制御するために、インストール時にモジュールごとのリソース要求を指定します。

  • Prometheus メトリクス:ack-koordinator の Prometheus メトリクスを有効にし、Managed Service for Prometheus を使用する場合、メトリクスはカスタムメトリクスとしてカウントされ、それに応じて課金されます。料金は、クラスターのサイズとアプリケーションの数によって異なります。有効にする前にManaged Service for Prometheus の課金を確認し、観測可能なデータと請求書のクエリで利用状況を監視してください。

ステップ 1:ノードカーネルでの RDT の確認と有効化

  1. カーネルで RDT が有効になっているかを確認します。

    cat /proc/cmdline

    出力で l3catmba を探します:

    # 他のフィールドは省略されています。この例では、BOOT_IMAGE フィールドの RDT 部分のみを示します。
    BOOT_IMAGE=... rdt=cmt,l3cat,l3cdp,mba

    l3catmba が表示される場合、RDT はすでに有効です。ステップ 2 に進んでください。

  2. カーネルブートパラメーターに RDT オプションを追加します。/etc/default/grub で、GRUB_CMDLINE_LINUX に以下を追記します:

    重要

    RDT オプションと既存の設定をスペースで区切ってください。他のカーネルパラメーターを上書きしないでください。

    # 他のフィールドは省略されています。この例では、GRUB_CMDLINE_LINUX フィールドの RDT 部分のみを示します。
    GRUB_CMDLINE_LINUX="... rdt=cmt,mbmtotal,mbmlocal,l3cat,l3cdp,mba"
  3. GRUB 設定を再生成します:

    # ファイルパスは、OS のディストリビューションによって異なる場合があります。
    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  4. ノードを再起動します:

    sudo systemctl reboot

    ノードの再起動後、cat /proc/cmdline を再実行し、l3catmba が表示されることを確認します。

ステップ 2:L3 キャッシュと MBA の隔離の設定

L3 キャッシュと MBA 分離は、kube-system 名前空間の ack-slo-config ConfigMap で制御されます。ConfigMap を適用し、ポッドに QoS クラスのラベルを付けると、ポリシーが有効になります。

ConfigMap の適用

以下の内容で configmap.yaml を作成します:

apiVersion: v1
kind: ConfigMap
metadata:
  name: ack-slo-config
  namespace: kube-system
data:
  # resource-qos-config:QoS ベースのリソース隔離機能を設定します。
  resource-qos-config: |
    {
      "clusterStrategy": {
        "beClass": {
          # resctrlQOS:QoS クラスごとに Intel RDT (L3 キャッシュと MBA) の隔離を制御します。
          "resctrlQOS": {
            #   enable:このクラスの Pod に対して L3 キャッシュと MBA の隔離を有効にするには true に設定します。
            "enable": true
          }
        }
      }
    }

次に、ConfigMap を適用します:

  • ack-slo-configkube-system にすでに存在する場合、他の設定を保持するためにパッチを適用します:

    kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)"
  • ConfigMap が存在しない場合は、作成します:

    kubectl apply -f configmap.yaml

(オプション) QoS クラスごとの隔離率の調整

QoS クラスごとに L3 キャッシュとメモリ帯域幅を調整するには、ConfigMap を更新して明示的なパーセンテージを設定します:

apiVersion: v1
kind: ConfigMap
metadata:
  name: ack-slo-config
  namespace: kube-system
data:
  resource-qos-config: |
    {
      "clusterStrategy": {
        "lsClass": {
          "resctrlQOS": {
            "enable": true,
            "catRangeEndPercent": 100,  # LS Pod:L3 キャッシュの 100% (デフォルト)
            "mbaPercent": 100           # LS Pod:メモリ帯域幅の 100% (デフォルト)
          }
        },
        "beClass": {
          "resctrlQOS": {
            "enable": true,
            "catRangeEndPercent": 30,   # BE Pod:L3 キャッシュの 30% (デフォルト)
            "mbaPercent": 100           # BE Pod:メモリ帯域幅の 100% (デフォルト)
          }
        }
      }
    }

resctrlQOS パラメーター:

パラメーター タイプ 有効値 デフォルト (LS クラス) デフォルト (BE クラス) 説明
enable ブール値 true / false L3 キャッシュと MBA の隔離を有効または無効にします。
catRangeEndPercent Int 0~100 (%) 100 30 QoS クラスに割り当てられる L3 キャッシュの割合
mbaPercent Int 0~100 (%) で、10 の倍数である必要があります 100 100 QoS クラスで利用可能なメモリ帯域幅の割合

Pod への QoS クラスのラベリング

分離したいポッドに koordinator.sh/qosClass ラベルを適用します。この例では、メモリストレスワークロードを実行する BE ポッドを作成します。

apiVersion: v1
kind: Pod
metadata:
  name: pod-demo
  labels:
    koordinator.sh/qosClass: 'BE'  # この Pod を BE QoS クラスに割り当てます。
spec:
  containers:
  - name: pod-demo
    image: polinux/stress
    resources:
      requests:
        cpu: 1
        memory: "50Mi"
      limits:
        cpu: 1
        memory: "1Gi"
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "256M", "-c", "2", "--vm-hang", "1"]
説明 koordinator.sh/qosClasstemplate.metadataDeployment の場合、 ラベルは Deployment レベルではなく、 フィールドに設定してください。

Pod をデプロイします:

kubectl apply -f pod-demo.yaml