全部產品
Search
文件中心

Alibaba Cloud Service Mesh:在Sidecar中配置ACK動態超賣資源

更新時間:Jun 30, 2024

接入到ASM中的ACK Pro版叢集在啟用動態資源超賣模式下,注入到應用Deployment中的Sidecar代理支援超賣模式的資源類型,以提升叢集資源使用率。本文介紹如何在Sidecar中配置ACK動態超賣資源。

前提條件

  • 已建立ACK Pro版叢集。具體操作,請參見建立ACK Pro版叢集
    說明 本功能僅支援ACK Pro版叢集。
  • ACK Pro版叢集已支援動態資源超賣功能。具體操作,請參見動態資源超賣
  • 已添加ACK Pro版叢集到ASM執行個體,且ASM執行個體版本為1.16及以上。具體操作,請參見添加叢集到ASM執行個體

動態資源超賣功能介紹

在Kubernetes系統中,Kubelet通過參考Pod的QoS等級來管理單機容器的資源品質,例如OOM(Out of Memory)優先順序控制等。Pod的QoS層級分為Guaranteed、Burstable和BestEffort。QoS層級取決於Pod配置的Request和Limit(CPU、記憶體)。

ack-koordinator提供動態資源超賣功能,通過對節點負載資料的即時收集,可以充分挖掘叢集中已指派但未使用的資源量,以實現對叢集資源的動態超賣。為體現與原生資源類型的差異性,ack-koordinator使用Batch優先順序的概念描述該部分超賣資源,對應的欄位為batch-cpubatch-memory。更多資訊,請參見動態資源超賣

操作步驟

  1. 部署ConfigMap ack-slo-config。
    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下,查看是否存在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
  2. 執行以下命令,查看當前Batch資源總量。
    # 請將$nodeName替換為要查詢的目標節點名稱。
    kubectl get node $nodeName -o yaml
    預期輸出:
    #Node
    status:
      allocatable:
        # 單位為千分之一核,以下表示50核。
        kubernetes.io/batch-cpu: 50000
        # 單位為位元組,以下表示50 GB。
        kubernetes.io/batch-memory: 53687091200
  3. 為Sidecar設定ACK動態超賣資源。
    您可以設定注入的Istio代理以及isito-init初始化容器的ACK動態超賣資源。更多資訊,請參見配置Sidecar代理
    1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

    2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇資料面組件管理 > Sidecar代理配置

    3. Sidecar代理配置頁面的全域頁簽,單擊資源設定,選中為Sidecar設定ACK動態超賣資源,配置相關資訊,然後在頁面下方,單擊更新設定
      一般不強制資源限制所需資源配置為相同值。建議您參照工作負載類型,對資源限制所需資源進行配置。
      • 若QoS為Guaranteed類型的工作負載,建議您兩者配置為相同值。
      • 若為其他類型的Pod,建議您保持與原生資源類型中所需資源小於資源限制的約定。

      本樣本配置如下。

      配置項配置子項說明
      注入的Istio代理資源設定(ACK動態超賣資源)資源限制配置CPU2000千分之一核,記憶體2048 MiB。
      所需資源配置CPU200 千分之一核,記憶體256 MiB。
      istio-init初始化容器資源(ACK動態超賣資源)資源限制配置CPU1000千分之一核,記憶體1024 MiB。
      所需資源配置CPU100 千分之一核,記憶體128 MiB。
  4. 部署應用並申請Batch資源。
    1. 使用以下內容,建立demo.yaml
      以下YAML將建立應用Deployment並申請Batch資源。在Label中指定QoS等級,並在Request和Limit中添加對應的Batch資源配置,即可使Pod使用動態超賣資源。
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sleep
        template:
          metadata:
            labels:
              app: sleep
              # 必填,標記為低優先順序Pod。
              koordinator.sh/qosClass: "BE"
          spec:
            terminationGracePeriodSeconds: 0
            containers:
            - name: sleep
              image: curlimages/curl
              command: ["/bin/sleep", "infinity"]
              imagePullPolicy: IfNotPresent
              resources:
                requests:
                  # 單位為千分之一核,如下表示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作為目標評測應用。
      kubectl apply -f demo.yaml
  5. 可選:查看BE Pod資源限制是否生效。
    部署應用並申請Batch資源後,您可以查看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
      預期輸出:
      # 容器對應的CPU Cgroup為1核。
      100000
    2. 登入到Pod所在的節點,執行以下命令,查看Memory資源限制參數。
      cat /sys/fs/cgroup/memory/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod****.slice/cri-containerd-****.scope/memory.limit_in_bytes
      預期輸出:
      # 容器對應的Memory Cgroup為1 GB。
      1073741824
    若輸出結果的CPU資源限制參數和Memory資源限制參數與步驟4的配置相同,表明BE Pod資源限制生效。