接入到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-cpu和batch-memory。更多資訊,請參見動態資源超賣。
操作步驟
- 部署ConfigMap ack-slo-config。
- 使用以下內容,建立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" }
- 在命名空間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
- 若存在ConfigMap ack-slo-config,請使用PATCH方式進行更新,避免幹擾ConfigMap中其他配置項。
- 使用以下內容,建立configmap.yaml。
- 執行以下命令,查看當前Batch資源總量。
# 請將$nodeName替換為要查詢的目標節點名稱。 kubectl get node $nodeName -o yaml
預期輸出:#Node status: allocatable: # 單位為千分之一核,以下表示50核。 kubernetes.io/batch-cpu: 50000 # 單位為位元組,以下表示50 GB。 kubernetes.io/batch-memory: 53687091200
- 為Sidecar設定ACK動態超賣資源。您可以設定注入的Istio代理以及isito-init初始化容器的ACK動態超賣資源。更多資訊,請參見配置Sidecar代理。
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
- 在Sidecar代理配置頁面的全域頁簽,單擊資源設定,選中為Sidecar設定ACK動態超賣資源,配置相關資訊,然後在頁面下方,單擊更新設定。一般不強制資源限制和所需資源配置為相同值。建議您參照工作負載類型,對資源限制和所需資源進行配置。
- 若QoS為Guaranteed類型的工作負載,建議您兩者配置為相同值。
- 若為其他類型的Pod,建議您保持與原生資源類型中所需資源小於資源限制的約定。
本樣本配置如下。
配置項 配置子項 說明 注入的Istio代理資源設定(ACK動態超賣資源) 資源限制 配置CPU為2000千分之一核,記憶體為2048 MiB。 所需資源 配置CPU為200 千分之一核,記憶體為256 MiB。 istio-init初始化容器資源(ACK動態超賣資源) 資源限制 配置CPU為1000千分之一核,記憶體為1024 MiB。 所需資源 配置CPU為100 千分之一核,記憶體為128 MiB。
- 部署應用並申請Batch資源。
- 使用以下內容,建立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"
- 執行以下命令,部署demo作為目標評測應用。
kubectl apply -f demo.yaml
- 使用以下內容,建立demo.yaml。
- 可選:查看BE Pod資源限制是否生效。部署應用並申請Batch資源後,您可以查看Pod資源限制的生效情況。更多資訊,請參見動態資源超賣。
- 登入到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
- 登入到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
- 登入到Pod所在的節點,執行以下命令,查看CPU資源限制參數。