在動態資源超賣情境下,您可能會將高優先順序(Guaranteed、Burstable)應用未使用的資源超賣給低優先順序(BestEffort)任務使用。為了確保BE Pod的CPU資源使用在合理範圍內,ACK提供了CPU資源彈性限制式能力,以優先保障節點中LS Pod的穩定運行。
為了協助您更好地理解本文檔並使用本功能,推薦您參見Kubernetes官方文檔瞭解Pod Qos類、為容器和 Pod 分配記憶體資源等概念。
本功能搭配動態資源超賣功能使用,請參見啟用動態資源超賣瞭解。
為什麼需要啟用彈性資源限制
為了提升叢集資源的利用率,您可能會採用動態資源超賣模型,為LS(Latency Sensitive)類型的高優任務預留一定的資源Buffer來應對上下遊鏈路的負載波動,並將這部分超賣資源提供給低BE類型的低優任務使用。為了控制BE Pod的CPU資源使用在合理範圍內,避免佔用LS Pod的資源而使其運行品質受到幹擾,ack-koordinator組件提供了節點維度CPU資源彈性限制式能力,支援在整機資源用量的安全水位下,控制BE Pod可用的CPU資源,保障節點內容器穩定運行。
如下圖所示,在整機安全水位下(CPU Threshold),隨著LS Pod資源使用量的變化(Pod(LS).Usage),BE Pod可用的CPU資源會被限制在合理的範圍內(CPU Restriction for BE)。限制水位的配置與動態資源超賣模型中的預留水位基本一致,以此保證CPU資源使用的一致性。
前提條件
已建立ACK叢集Pro版,請參見建立ACK Pro版叢集。
已安裝ack-koordinator組件,且組件版本為0.4.0及以上,請參見ack-koordinator(ack-slo-manager)。
費用說明
ack-koordinator組件本身的安裝和使用是免費的,不過需要注意的是,在以下情境中可能產生額外的費用:
操作步驟
您可以通過ConfigMap在叢集維度開啟彈性資源限制功能,也可以在ConfigMap中配置相關參數,例如彈性資源限制下節點的安全水位閾值(cpuSuppressThresholdPercent
),實現更精細化的資源管理。
使用以下ConfigMap,建立configmap.yaml檔案。
apiVersion: v1 kind: ConfigMap metadata: name: ack-slo-config namespace: kube-system data: # 開啟彈性資源限制能力。 resource-threshold-config: | { "clusterStrategy": { "enable": true } }
查看命名空間kube-system下是否存在ConfigMap
ack-slo-config
。存在:使用PATCH方式進行更新,避免幹擾ConfigMap中其他配置項。
kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)"
不存在:執行以下命令部署ConfigMap。
kubectl apply -f configmap.yaml
執行以下命令,查看當前BE分組對應的CPU綁核情況。
cat /sys/fs/cgroup/cpuset/kubepods.slice/kubepods-besteffort.slice/cpuset.cpus
預期輸出:
10-25,35-51,62-77,87-103
預期輸出表明,BE Pod的CPU綁定範圍為
10-25,35-51,62-77,87-103
,即在開啟CPU資源彈性限制式後,根據當前資源使用方式,BE Pod可用的CPU資源範圍得到了限制。可選:使用以下ConfigMap,配置進階參數。
您可以進一步配置CPU彈性資源限制的安全水位。
apiVersion: v1 kind: ConfigMap metadata: name: ack-slo-config namespace: kube-system data: resource-threshold-config: | { "clusterStrategy": { "enable": true, "cpuSuppressThresholdPercent": 65 } }
主要參數說明如下。
參數
類型
取值範圍
說明
enable
Boolean
true
false
true
:叢集開啟彈性資源限制能力。false
:叢集關閉彈性資源限制能力。
cpuSuppressThresholdPercent
Int
[0, 100]
彈性資源限制對應的節點安全水位閾值,預設為
65
。單位為百分比。