全部產品
Search
文件中心

Container Service for Kubernetes:容器L3 Cache及記憶體頻寬隔離

更新時間:Jun 19, 2024

Kubernetes支援將多種類型的應用以容器化的方式部署在同一台宿主機上運行,不同優先順序的應用會共用宿主機的三級緩衝L3 Cache(Last Level Cache)和記憶體頻寬MBA(Memory Bandwidth Allocation)。ack-koordinator提供了對L3 Cache及記憶體頻寬的隔離能力,避免在資源競爭時影響高優先順序應用的服務品質。本文介紹如何控制不同優先順序應用使用L3 Cache和MBA隔離策略。

背景資訊

為了充分利用機器中的資源,通常會將高優先延遲敏感性LS(Latency-Sensitive)和低優先順序BE(Best-Effort)的任務部署在同一台機器上,導致兩種不同優先順序任務之間存在資源競爭問題。如果不進行隔離控制,不同優先順序的任務在使用L3 cache和MBA記憶體頻寬等資源時可能會出現資源競爭,從而無法保證給LS業務分配足夠的資源,導致LS應用的服務品質受到影響。

RDT(Resource Director Technology)提供了對不同優先順序應用的資源隔離能力,通過限制BE類型應用對L3 Cache和MBA資源的使用量,可以有效保障混合部署情境中LS應用的服務品質。關於RDT的更多資訊,請參見resource-director-technology

前提條件

費用說明

ack-koordinator組件本身的安裝和使用是免費的,不過需要注意的是,在以下情境中可能產生額外的費用:

  • ack-koordinator是非託管組件,安裝後將佔用Worker節點資源。您可以在安裝組件時配置各模組的資源申請量。

  • ack-koordinator預設會將資源畫像、精細化調度等功能的監控指標以Prometheus的格式對外透出。若您配置組件時開啟了ACK-Koordinator開啟Prometheus監控指標選項並使用了阿里雲Prometheus服務,這些指標將被視為自訂指標併產生相應費用。具體費用取決於您的叢集規模和應用數量等因素。建議您在啟用此功能前,仔細閱讀阿里雲Prometheus計費說明,瞭解自訂指標的免費額度和收費策略。您可以通過賬單和用量查詢,監控和管理您的資源使用方式。

準備工作

在使用容器L3 Cache及記憶體頻寬隔離功能前,您需要確保已開啟核心RDT能力。查看及開啟核心RDT能力的具體操作步驟如下:

  1. 執行以下命令,查看核心RDT能力是否開啟。

    cat /proc/cmdline

    預期輸出:

    #其他內容已省略,本樣本僅顯示BOOT_IMAGE欄位的RDT部分。
    BOOT_IMAGE=... rdt=cmt,l3cat,l3cdp,mba

    若輸出內容中包含l3catmba選項,表示核心RDT能力已開啟;若不包含,請執行下一步操作。

  2. 開啟核心RDT能力。

    1. 編輯/etc/default/grub檔案。

      GRUB_CMDLINE_LINUX欄位增加RDT相關配置。

      #其他內容已省略,本樣本僅顯示GRUB_CMDLINE_LINUX欄位的RDT部分。
      GRUB_CMDLINE_LINUX="... rdt=cmt,mbmtotal,mbmlocal,l3cat,l3cdp,mba" 
      重要

      新增的RDT配置與其他部分請使用空格符進行分隔。

    2. 執行以下命令,產生新版本grub.cfg檔案。

      #檔案路徑以實際情況為準。
      sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    3. 執行以下命令,重啟節點。

      sudo systemctl reboot

操作步驟

核心RDT能力開啟後,使用L3 Cache及MBA隔離功能的具體步驟如下:

  1. 使用以下YAML內容,建立configmap.yaml檔案。

    enabletrue表示開啟對BE類型Pod的L3 Cache及MBA隔離機制。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ack-slo-config
      namespace: kube-system
    data:
      resource-qos-config: |
        {
          "clusterStrategy": {
            "beClass": {
              "resctrlQOS": {
                "enable": true
              }
            }
          }
        }
  2. 查看命名空間kube-system下是否存在ConfigMap ack-slo-config

    • 若存在ConfigMap ack-slo-config,請使用PATCH方式進行更新,避免幹擾ConfigMap中其他配置項。

      kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)"
    • 若不存在ConfigMap ack-slo-config,請執行以下命令建立ConfigMap。

      kubectl apply -f configmap.yaml
  3. 使用以下YAML內容,建立pod-demo.yaml檔案。

    指定Pod的QoS層級為BE,約束Pod對L3 Cache及MBA資源的使用。

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-demo
      labels:
        koordinator.sh/qosClass: 'BE'
    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"]
  4. 執行以下命令,將pod-demo部署到叢集中。

    kubectl apply -f pod-demo.yaml
  5. 使用以下YAML內容,配置進階參數。

    L3 Cache及MBA的隔離能力支援按照QoS等級進行精細化配置。

    #ConfigMap ack-slo-config範例。
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ack-slo-config
      namespace: kube-system
    data:
      resource-qos-config: |
        {
          "clusterStrategy": {
            "lsClass": {
              "resctrlQOS": {
                "enable": true,
                "catRangeEndPercent": 100,
                "mbaPercent": 100
              }
            },
            "beClass": {
              "resctrlQOS": {
                "enable": true,
                "catRangeEndPercent": 30,
                "mbaPercent": 100
              }
            }
          }
        }

    部分參數說明如下:

    參數

    類型

    取值範圍

    說明

    enable

    Boolean

    • true

    • false

    • true:表示叢集開啟L3 Cache及MBA的隔離能力。

    • false:表示叢集關閉L3 Cache及MBA的隔離能力。

    catRangeEndPercent

    Int

    0~100

    單位為百分比,表示對應QoS可以使用的L3 Cache比例。LS等級預設值為100,BE等級預設值為30

    mbaPercent

    Int

    0~100

    單位為百分比,表示對應QoS可以使用的記憶體頻寬比例。當前MBA只支援以10%的粒度進行調節,LS等級和BE等級的預設值均為100