Karmada v1.15 版本發(fā)布!多模板工作負載資源感知能力增強
Karmada 是開放的多云多集群容器編排引擎,旨在幫助用戶在多云環(huán)境下部署和運維業(yè)務(wù)應(yīng)用。憑借兼容 Kubernetes 原生 API 的能力,Karmada可以平滑遷移單集群工作負載,并且仍可保持與 Kubernetes 周邊生態(tài)工具鏈協(xié)同。

● 多模板工作負載的資源精確感知
● 集群級故障遷移功能增強
● 結(jié)構(gòu)化日志
● Karmada 控制器和調(diào)度器性能顯著提升
新特性概覽
多模板工作負載的資源精確感知
在這個版本中,Karmada 強化了對多模板工作負載的資源感知能力,通過擴展資源解釋器,Karmada 現(xiàn)在可以獲取同一工作負載不同模板的副本數(shù)和資源請求,確保數(shù)據(jù)的精確性。這一改進也為多模板工作負載的聯(lián)邦配額管理提供了更加可靠和精細的數(shù)據(jù)支持。
spec: jobManager: replicas: 1 resource: cpu: 1 memory: 1024m taskManager: replicas: 1 resource: cpu: 2 memory: 2048m
通過 ResourceBinding,你可以查看資源解釋器解析出的 FlinkDeployment 各個模板的副本數(shù)以及資源請求。
spec: components: - name: jobmanager replicaRequirements: resourceRequest: cpu: "1" memory: "1.024" replicas: 1 - name: taskmanager replicaRequirements: resourceRequest: cpu: "2" memory: "2.048" replicas: 1
此時,F(xiàn)ederatedResourceQuota 計算的 FlinkDeployment 占用的資源量為:
status: overallUsed: cpu: "3" memory: 3072m
注意:該特性??目前處于 Alpha 階段,需要啟用 MultiplePodTemplatesScheduling 特性開關(guān)??才能使用。
隨著多模板工作負載在云原生環(huán)境中的廣泛應(yīng)用,Karmada 致力于對其提供更強有力的支持。在接下來的版本中,我們將基于此功能進一步加強對多模板工作負載的調(diào)度支持,提供更加細粒度的資源感知調(diào)度——敬請期待更多更新!
集群級故障遷移功能增強
社區(qū)在 PropagationPolicy/ClusterPropagationPolicy API 中的 .spec.failover.cluster 下引入了一個新的 StatePreservation 字段, 用于定義有狀態(tài)應(yīng)用在故障遷移期間保留和恢復(fù)狀態(tài)數(shù)據(jù)的策略。結(jié)合此策略,當應(yīng)用從一個故障集群遷移到另一個集群時,能夠從原始資源配置中提取關(guān)鍵數(shù)據(jù)。
以 Flink 應(yīng)用為例,在 Flink 應(yīng)用中,jobID 是一個唯一的標識符,用于區(qū)分和管理不同的 Flink 作業(yè)(jobs)。當集群發(fā)生故障時,F(xiàn)link 應(yīng)用可以利用 jobID 來恢復(fù)故障前作業(yè)的狀態(tài),從故障點處繼續(xù)執(zhí)行。具體的配置和步驟如下:
apiVersion: policy.karmada.io/v1alpha1 kind: PropagationPolicy metadata: name: foo spec: #... failover: cluster: purgeMode: Directly statePreservation: rules: - aliasLabelName: application.karmada.io/cluster-failover-jobid jsonPath: "{ .jobStatus.jobID }"
-
遷移前,Karmada 控制器將按照用戶配置的路徑提取 job ID。
-
遷移時,Karmada 控制器將提取的 job ID 以 label 的形式注入到 Flink 應(yīng)用配置中,比如 application.karmada.io/cluster-failover-jobid : <jobID>。
-
運行在成員集群的 Kyverno 攔截 Flink 應(yīng)用創(chuàng)建請求,并根據(jù) jobID 獲取該 job 的 checkpoint 數(shù)據(jù)存儲路徑,比如 /<shared-path>/<job-namespace>/<jobId>/checkpoints/xxx,然后配置 initialSavepointPath 指示從save point 啟動。
-
Flink 應(yīng)用根據(jù) initialSavepointPath 下的 checkpoint 數(shù)據(jù)啟動,從而繼承遷移前保存的最終狀態(tài)。
功能約束:
-
應(yīng)用必須限定在單個集群中運行;
-
遷移清理策略(PurgeMode)限定為 Directly,即需要確保故障應(yīng)用在舊集群上刪除之后再在新集群中恢復(fù)應(yīng)用,確保數(shù)據(jù)一致性。
結(jié)構(gòu)化日志
Karmada 在 1.15 版本引入了結(jié)構(gòu)化日志支持,可通過 --logging-format=json 啟動參數(shù)配置 JSON 格式輸出。結(jié)構(gòu)化日志示例如下:
{ "ts":“日志時間戳”, "logger":"cluster_status_controller", "level": "info", "msg":"Syncing cluster status", "clusterName":"member1" }
結(jié)構(gòu)化日志的引入顯著提升了日志的可用性與可觀測性:
● 高效查詢:結(jié)構(gòu)化字段支持快速檢索與分析,顯著提升故障排查效率。
● 可觀察性增強:關(guān)鍵上下文信息(如集群名、日志級別)以結(jié)構(gòu)化字段呈現(xiàn),便于跨組件、跨時間關(guān)聯(lián)事件,實現(xiàn)精準問題定位。
● 可維護性提升:結(jié)構(gòu)化日志使開發(fā)者和運維人員在系統(tǒng)演進過程中更易于維護、解析和調(diào)整日志格式,保障日志體系的長期穩(wěn)定與一致性。
Karmada 控制器和調(diào)度器性能顯著提升
控制器方面,通過引入優(yōu)先級隊列,控制器能夠在重啟或切主后優(yōu)先響應(yīng)用戶觸發(fā)的資源變更,從而顯著縮短服務(wù)重啟和故障切換過程中的停機時間。
注意:該特性??目前處于 Alpha 階段,需要啟用 ControllerPriorityQueue 特性開關(guān)才能使用。
測試記錄了在開啟精確調(diào)度組件 karmada-scheduler-estimator 情況下,調(diào)度 5,000 個 ResourceBinding 所用的時間,結(jié)果如下:
● 調(diào)度器吞吐量 QPS 從約 15 提升至約 22,性能提升達 46%;
● gRPC 請求次數(shù)從約 10,000 次減少至約 5,000 次,降幅達 50%。
這些測試證明,在 1.15 版本中,Karmada 控制器和調(diào)度器的性能得到了極大提升。未來,我們將繼續(xù)對控制器和調(diào)度器進行系統(tǒng)性的性能優(yōu)化。
致謝貢獻者
貢獻者列表:
|
@abhi0324
|
@abhinav-1305
|
@Arhell
|
|
@Bhaumik10
|
@CaesarTY
|
@cbaenziger
|
|
@deefreak
|
@dekaihu
|
@devarsh10
|
|
@greenmoon55
|
@iawia002
|
@jabellard
|
|
@jennryaz
|
@liaolecheng
|
@linyao22
|
|
@LivingCcj
|
@liwang0513
|
@mohamedawnallah
|
|
@mohit-nagaraj
|
@mszacillo
|
@RainbowMango
|
|
@ritzdevp
|
@ryanwuer
|
@samzong
|
|
@seanlaii
|
@SunsetB612
|
@tessapham
|
|
@wangbowen1401
|
@warjiang
|
@wenhuwang
|
|
@whitewindmills
|
@whosefriendA
|
@XiShanYongYe-Chang
|
|
@zach593
|
@zclyne
|
@zhangsquared
|
|
@zhuyulicfc49
|
@zhzhuang-zju
|
@zzklachlan
|

參考資料
浙公網(wǎng)安備 33010602011771號