ack-koordinator是一個QoS感知的調度系統,通過CPU Burst、動態資源超賣等功能,在最佳化叢集資源使用率的同時優先保障高優應用的服務品質,從而提升系統整體的穩定性。此外,ack-koordinator還支援資源畫像以及重調度能力。本文介紹ack-koordinator組件的基本資料和變更記錄。
如需瞭解組件的發布和變更記錄,可直接跳轉至變更記錄。
ack-koordinator是什麼
ack-koordinator是一個基於Kubernetes的QoS感知調度系統,能夠有效提升叢集資源使用率,並針對不同優先順序的應用提供QoS保障能力,避免應用因資源競爭而影響效能表現。例如,ack-koordinator支援將Service服務型應用與批處理任務混合部署在同一節點,通過動態資源超賣、QoS感知調度等能力,在提升叢集資源使用率的同時,保障Service應用的服務品質,適用於批處理、高效能運算、AI任務和機器學習等業務情境。ack-koordinator是ACK支援QoS感知調度的核心組件,提供彈性資源限制、拓撲感知調度、動態資源超賣等QoS感知調度能力,以及負載感知調度、重調度、資源畫像等功能。
使用時,您可以登入Container Service管理主控台在ACK叢集中安裝ack-koordinator組件,然後通過ConfigMap或Pod Annotation啟用並使用相關功能。
組件架構
ack-koordinator由中心側組件和單機側組件兩部分組成,各模組功能描述如下。
Koordinator Manager:以Deployment的形式部署的中心組件,由主備兩個執行個體組成,以保證組件的高可用。
SLO Controller:負責資源超賣管理,支援根據節點混部時的運行狀態,動態調整叢集的超賣資源量,同時為管理各節點的差異化SLO策略。
Recommender:提供資源畫像功能,預估工作負載的峰值資源需求,簡化配置容器資源規格的複雜度。
Koordinator Descheduler:以Deployment的形式部署的中心組件,提供重調度功能。
Koordlet:以DaemonSet的形式部署的單機組件,支援在離線混部情境下的動態資源超賣、負載感知調度、QoS感知調度等。
Koordinator調度外掛程式:ack-koordinator組件在安裝時不包括Koord-Scheduler模組,相關調度能力已經以外掛程式形式整合在ACK調度器中預設安裝。
在ACK Serverless叢集中,ack-koordinator只包括Koordinator Manager組件,並提供資源畫像功能。
版本號碼說明
自v1.1.1-ack.1版本起,ack-koordinator的版本號碼格式變更為x.y.z-ackn
。
x.y.z
:對應Koordinator開源版本,表示ack-koordinator已支援對應開源版本的所有功能。ackn
:在此開源版本基礎上的功能增強和最佳化。
相關概念
支援的功能
ack-koordinator組件的各模組涵蓋對應Koordinator開源版本支援的功能,安裝配置中,僅預設開啟常用功能的feature-gate。Koordinator開源版本的其他功能,需在開啟ack-koordinator對應模組的feature-gate後使用。關於Koordinator開源版本的其他功能,請參見Koordinator官網文檔。
類型 | 功能文檔 | 功能說明 | 與開源版本是否一致 |
根據節點的實際負載情況,將Pod優先調度到負載較低的節點,以實現節點負載平衡,降低節點故障風險。 | 是 | ||
動態感知CPU Throttled現象並對容器參數進行自適應調節,在出現突發負載時,為容器臨時提供額外的CPU資源以保障並提升應用的服務品質。 | 是 | ||
將Pod固定在節點的CPU Core上運行,緩解因CPU環境切換、跨NUMA訪存導致的應用效能下降問題 | 否 | ||
即時收集節點的真實負載資料,量化叢集中已指派但未使用的CPU和記憶體資源,為BestEffort作業提供資源並保證BestEffort作業之間的資源公平性。 | 是 | ||
動態資源超賣的情境下,將BE Pod的CPU資源使用限制在合理範圍內,優先保障節點中LS Pod的穩定運行 | 是 | ||
避免不同優先順序的應用之間可能存在的CPU資源爭搶,優先保障LS應用的CPU資源使用。 | 是 | ||
支援根據優先順序為容器設定服務品質參數,在確保記憶體資源公平性的前提下,優先保障高優先順序應用的效能 | 是 | ||
避免不同優先順序的應用之間可能存在的L3 Cache和記憶體頻寬資源爭搶,優先保障LS應用的記憶體資源使用。 | 是 | ||
基於cgroups檔案動態修改Pod資源參數,在不重啟Pod的情況下,在Pod或Deployment維度臨時修改CPU、記憶體、磁碟IO等單機隔離參數。 | 否 | ||
基於英特爾®DSA資料流加速器,提升節點上資料密集型工作負載的資料處理效能,還能進一步最佳化容器記憶體就近訪問的加速效果。 | 否 | ||
保證資料安全的前提下將綁核應用遠端NUMA上的記憶體遷移至本地,提高本地訪存命中率,為記憶體密集型的工作負載提供更好的訪存效能。 | 否 | ||
在叢集資源利用不均衡、節點負載過高或有新的調度策略需求等情境下,將部署在某個節點上調度不合理的Pod重新調度到另一個節點,以維護叢集健康、最佳化資源使用以及提高工作負載的服務品質。 | 是 | ||
動態感知叢集內節點負載的變化,自動最佳化超過負載水位安全閾值的節點,防止出現負載極端不均衡的情況。 | 是 | ||
GPU拓撲感知 | 基於NUMA拓撲感知調度能力將Pod調度到最佳的NUMA節點上,從而減少跨NUMA節點的訪問以最佳化效能。 | 否 | |
通過對資源使用量歷史資料的分析,為容器推薦資源規格,有效簡化了容器配置Request和Limit的複雜度。 | 否 |
組件的安裝和管理
ack-koordinator已在Container Service管理主控台的組件管理頁面上架,您可以在組件管理頁面進行組件的安裝、升級、卸載等操作。
前提條件
已建立1.18及以上版本的ACK叢集。如何升級叢集,請參見手動升級叢集。
Helm版本為3.0及以上。如需升級,請參見【組件升級】Helm V2 Tiller升級公告和如何手動升級Helm的版本?。
安裝和管理組件
您可以在組件管理頁面安裝ack-koordinator組件。後續使用過程中,您也可以在此操作介面修改組件參數配置或按需升級組件。
安裝組件:參見下方步驟安裝並驗證組件是否部署成功。
修改組件參數:系統會按新配置自動重新部署ack-koordinator。
升級組件:如果您曾經通過其他方式對ack-koordinator已部署的模組(Deployment、DaemonSet)做過手動修改,組件升級後自訂的配置將被覆蓋。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面的目的地組群右側,單擊操作列下 。
在組件管理頁面,定位ack-koordinator,然後在ack-koordinator卡片中單擊安裝。
在安裝組件ack-koordinator對話方塊,按需修改配置參數,然後單擊確定。
(可選)在叢集管理頁左側導覽列,選擇ack-koordinator的部署狀態。
,查看如果ack-koordinator的狀態為已部署,表明組件已成功部署。
卸載組件
清理未下線節點的ConfigMap
CPU拓撲感知調度功能為每個ACK節點在kube-system命名空間下建立拓撲資訊ConfigMap。從0.5.1版本起,ack-koordinator會自動清理已下線節點的ConfigMap,但卸載ack-koordinator後,未下線節點的ConfigMap仍會保留。這些未清理的ConfigMap不會影響您其他功能的正常使用,但會佔用資料空間,建議您及時清理。
在組件管理頁面,定位ack-koordinator,按照頁面提示完成組件的卸載。
刪除拓撲資訊ConfigMap。
在左側導覽列,選擇
,然後在頁面頂部,選擇kube-system命名空間。在名稱文字框中搜尋-numa-info,然後在下方列表,選擇符合
${NODENAME}-numa-info
命名格式的ConfigMap,單擊目標ConfigMap右側操作列下的刪除,按照頁面提示完成刪除。
清理CRD對象
寫在ack-koordinator組件時,可能還遺留一些CRD對象。這些未清理的對象不會影響您其他功能的正常使用,但會佔用資料空間。如果您後續可能需要重新安裝ack-koordinator,這些對象可能會影響組件相關功能的正常使用,建議您及時清理。涉及的CRD如下。
autoscaling.alibabacloud.com | slo.koordinator.sh |
費用說明
ack-koordinator組件本身的安裝和使用是免費的,不過需要注意的是,在以下情境中可能產生額外的費用:
相關內容
ack-koordinator與ack-slo-manager的關係
ack-slo-manager是ack-koordinator的前身,孵化了開源專案Koordinator。後續隨著Koordinator逐漸成熟穩定,也對ack-slo-manager實現了反哺。ack-koordinator既提供了Koordinator開源版本已經支援的功能,還在ack-slo-manager的基礎上增加了更為豐富的功能。建議您參見將ack-koordinator從應用市場遷移至組件中心及時升級至最新組件版本,以便享用新功能特性和缺陷修複。
將ack-koordinator從應用市場遷移至組件中心
若您正在使用的ack-koordinator版本是通過應用市場完成部署的(即版本低於v0.7)請參見下文完成遷移。
若您修改過應用市場ack-koordinator的ConfigMap,請先備份再升級;若未修改,請參見步驟2直接升級組件。
使用kubectl或通過控制台對ack-koordinator的ConfigMap進行備份。
kubectl
根據原ConfigMap配置的命名空間(例如kube-system)和名稱(例如ack-slo-manager-config),執行以下命令,將原配置儲存在名稱為slo-config.yaml的檔案中。
kubectl get cm -n kube-system ack-slo-manager-config -o yaml > slo-config.yaml
執行
vim slo-config.yaml
命令編輯上述檔案,將ConfigMap的欄位修改為kube-system
,將name
欄位修改為ack-slo-config
,並刪除ConfigMap中所有annotations
和labels
,避免升級時被自動覆蓋。執行以下命令,將修改後的配置提交到叢集中。
kubectl apply -f slo-config.yaml
控制台
記錄原ConfigMap中的索引值對。
在左側導覽列中,單擊ack-koordinator時指定的命名空間(預設為kube-system)。
,然後在頁面頂部,選擇在應用市場安裝在名稱文字框中搜尋ack-slo-manager-config,依次單擊目標ConfigMap名稱,記錄ConfigMap的索引值對。
使用原ConfigMap中的索引值對,建立新的ConfigMap。
在左側導覽列中,選擇
,然後在頁面頂部,選擇所有命名空間。在配置項頁面右上方,單擊建立,輸入配置項名稱為ack-slo-config,選擇新配置的命名空間kube-system,單擊+添加,輸入上一步記錄的索引值對,單擊建立。
在組件管理頁面,升級ack-koordinator至最新版本。
重要若您修改過應用市場中ack-koordinator的ConfigMap,則需要在ack-koordinator參數配置對話方塊中,將步驟1備份的ConfigMap的名稱(例如ack-slo-config)填入到對應的配置項中。
從resource-controller遷移至ack-koordinator
resource-controller組件已下線,目前ack-koordinator已支援原resource-controller的所有功能,例如啟用CPU拓撲感知調度、動態修改Pod的資源參數等。若您的叢集正在使用resource-controller,請參見以下步驟完成從resource-controller到ack-koordinator的遷移。
將resource-controller升級至最新版本。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在組件管理頁面,定位resource-controller,按照頁面提示完成組件的升級。
安裝並配置ack-koordinator。
在組件管理頁面,定位ack-koordinator,然後在組件卡片地區,按頁面提示進行安裝。
在安裝組件ack-koordinator對話方塊,按需修改agentFeatureGates(Koordlet的feature-gates控制開關)並配置其他參數,然後單擊確定。
檢查叢集目前是否使用了動態修改Pod的資源參數中的CPU Limit調節功能(即通過建立CRD或Pod Annotation的形式修改了指定容器的cgroups參數檔案cpu.cfs_quota_us)。若使用,請繼續執行步驟ii;若未使用,請直接執行步驟c。
參考如下命令,從當前ack-koordlet的對應的DaemonSet YAML中擷取當前feature-gate配置。
kubectl get daemonset -n kube-system ack-koordlet -o yaml |grep feature-gates - --feature-gates=AllAlpha=false,AllBeta=false,...,CPUBurst=true,....
參考如下樣本,修改當前ack-koordlet的feature-gate配置,關閉CPU Burst原則模組,即設定
CPUBurst=false
(參數之間使用英文半形逗號(,)分隔),其他保持不變。關閉後,叢集內所有容器的CPU Burst機制將不會生效,以此避免兩個模組同時修改容器的cgroups參數檔案cpu.cfs_quota_us。
AllAlpha=false,AllBeta=false,...,CPUBurst=false,....
如需實現容器的CPU資源彈效能力,推薦您使用CPU Burst效能最佳化策略功能自動調整Pod的CPU資源彈性,請參見啟用CPU Burst效能最佳化策略。
在頁面左側導覽列,選擇ack-koordinator的部署狀態。
,查看如果ack-koordinator的狀態為已部署,表明組件已成功部署。
在組件管理頁面,定位resource-controller,然後按照頁面提示完成組件的卸載。
常見問題
組件安裝時報錯:no matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1" ensure CRDs are installed first
叢集中未安裝Prometheus。請參見使用阿里雲Prometheus監控安裝Prometheus組件,或在組件管理頁面安裝ack-koordinator時取消選中ack-koordinator開啟Prometheus監控指標。
組件安裝時報錯:task install-addons-xxx timeout, error install addons map[ack-slo-manager:Can't install release with errors: ... function "lookup" not defined
需升級Helm到3.0或以上版本。請參見【組件升級】Helm V2 Tiller升級公告完成升級。
變更記錄
2024年09月
版本號碼 | 鏡像地址 | 變更時間 | 變更內容 | 變更影響 |
v1.5.0-ack1.14 |
| 2024年09月12日 |
| 無 |
2024年07月
版本號碼 | 鏡像地址 | 變更時間 | 變更內容 | 變更影響 |
v1.5.0-ack1.12 |
| 2024年07月29日 | 最佳化內部介面。 | 無 |
2024年01月
版本號碼 | 鏡像地址 | 變更時間 | 變更內容 | 變更影響 |
v1.3.0-ack1.8 |
| 2024年01月24日 |
| 無 |
2023年12月
版本號碼 | 鏡像地址 | 變更時間 | 變更內容 | 變更影響 |
v1.3.0-ack1.7 |
| 2023年12月21日 |
| 無 |
2023年10月
版本號碼 | 鏡像地址 | 變更時間 | 變更內容 | 變更影響 |
v1.3.0-ack1.6 |
| 2023年10月19日 | 最佳化內部介面。 | 無 |
2023年06月
版本號碼 | 鏡像地址 | 變更時間 | 變更內容 | 變更影響 |
v1.2.0-ack1.3 |
| 2023年06月09日 | 最佳化內部介面。 | 無 |
2023年04月
版本號碼 | 鏡像地址 | 變更時間 | 變更內容 | 變更影響 |
v1.2.0-ack1.2 |
| 2023年04月25日 |
| 無 |
2023年03月
版本號碼 | 鏡像地址 | 變更時間 | 變更內容 | 變更影響 |
v1.1.1-ack.2 |
| 2023年03月23日 | 最佳化內部介面。 | 無 |
2023年01月
版本號碼 | 鏡像地址 | 變更時間 | 變更內容 | 變更影響 |
v1.1.1-ack.1 |
| 2023年01月11日 |
| 無 |
2022年11月
版本號碼 | 鏡像地址 | 變更時間 | 變更內容 | 變更影響 |
v0.8.0 |
| 2022年11月17日 |
| 組件升級後,若使用負載感知調度,需要將ACK升級至1.22.15-ack-2.0版本。其他功能均可正常使用。 |
2022年09月
版本號碼 | 鏡像地址 | 變更時間 | 變更內容 | 變更影響 |
v0.7.2 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.7.2 | 2022年09月16日 | 修複0.7.1版本引入的問題:拓撲感知調度對Pod不生效。 | 無 |
v0.7.1 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.7.1 | 2022年09月02日 |
| 無 |
2022年08月
版本號碼 | 鏡像地址 | 變更時間 | 變更內容 | 變更影響 |
v0.7.0 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.7.0 | 2022年08月08日 | ack-slo-manager安裝方式從應用市場遷移至組件管理。 | 無 |
2022年07月
版本號碼 | 鏡像地址 | 變更時間 | 變更內容 | 變更影響 |
v0.6.0 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.6.0 | 2022年07月26日 | 最佳化內部相關介面,簡化組件配置。 | 無 |
2022年06月
版本號碼 | 鏡像地址 | 變更時間 | 變更內容 | 變更影響 |
v0.5.2 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.5.2 | 2022年06月14日 |
| 無 |
v0.5.1 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.5.1 | 2022年06月02日 |
| 無 |
2022年04月
版本號碼 | 鏡像地址 | 變更時間 | 變更內容 | 變更影響 |
v0.5.0 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.5.0 | 2022年04月29日 |
| 無 |
v0.4.1 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.4.1 | 2022年04月14日 |
| 無 |
v0.4.0 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.4.0 | 2022年04月11日 | 最佳化slo-agent記憶體開銷。 | 無 |
2022年02月
版本號碼 | 鏡像地址 | 變更時間 | 變更內容 | 變更影響 |
v0.3.0 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.3.0 | 2022年02月25日 |
| 無 |
2021年12月
版本號碼 | 鏡像地址 | 變更時間 | 變更內容 | 變更影響 |
v0.2.0 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.2.0 | 2021年12月10日 | 無 |
2021年09月
版本號碼 | 鏡像地址 | 變更時間 | 變更內容 | 變更影響 |
v0.1.1 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.1.1-c2ccefa | 2021年09月02日 | 最佳化內部相關介面。 | 無 |
2021年07月
版本號碼 | 鏡像地址 | 變更時間 | 變更內容 | 變更影響 |
v0.1.0 | registry.cn-hangzhou.aliyuncs.com/acs/ack-slo-manager:v0.1.0-09766de | 2021年07月08日 | 支援使用負載感知調度。 | 無 |