Karmada v1.10釋出,新增多叢集宣告式負載重平衡

华为云开发者联盟發表於2024-06-19

本文分享自華為雲社群《Karmada v1.10 - 多叢集宣告式負載重平衡》,作者:雲容器大未來。

Karmada 是開放的多雲多叢集容器編排引擎,旨在幫助使用者在多雲環境下部署和運維業務應用。憑藉相容 Kubernetes 原生 API 的能力,Karmada 可以平滑遷移單叢集工作負載,並且仍可保持與 Kubernetes 周邊生態工具鏈協同。

在最新發布的v1.10版本中,Karmada新增了工作負載重平衡功能:在某些場景下,資源副本的當前分佈狀態可能不是最優,但排程器為了減少對系統的衝擊會盡可能保持排程結果的惰性,不會輕易改變排程結果;此時,使用者可以透過新引入的 WorkloadRebalancer API 針對指定的資源手動觸發全新的重排程,以在叢集間建立最優的副本狀態分佈。

karmada.png

本版本其他新增特性:

  • 解除資源模板名稱長度不能超過 63 個字元的限制
  • 生產環境中的可用性和可靠性增強

新特性概覽

Workload Rebalance

一般情況下,工作負載類資源一旦被排程,其排程結果通常會保持惰性,不會輕易改變副本分佈狀態。即使透過修改資源模板中的副本數或 PropagationPolicyPlacement 來觸發重新排程,系統也只會在必要時進行最小化的調整,以最大程度地減少對系統的影響。

然而,在某些情況下,使用者可能希望能夠主動觸發全新的重排程,完全忽略過去的分配結果,並在叢集之間建立全新的副本分佈狀態,例如:

  • 在主備叢集模式下,由於主叢集故障,應用被遷移至備叢集,主叢集恢復後,應用希望重新遷移至主叢集。
  • 在應用級別故障遷移場景下,由於叢集資源不足,應用從多個叢集縮減到單個叢集,相應叢集資源充足後,應用希望重新分發到多叢集以確保高可用性。
  • 對於聚合排程策略,由於資源限制,副本最初分佈在多個叢集中,當單個叢集足以容納所有副本後,應用希望重新聚合到單叢集。

因此,本版本引入了工作負載重平衡功能,如果當前副本分佈狀態不是最優,使用者可以按需觸發全新的重排程。

例如,使用者想觸發 Deployment/foo 的重排程,只需宣告下述 WorkloadRebalancer 資源:

apiVersion: apps.karmada.io/v1alpha1
kind: WorkloadRebalancer
metadata:
  name: foo-rebalancer
spec:
  workloads:
    - apiVersion: apps/v1
      kind: Deployment
      name: foo
      namespace: default

然後,排程器將對該 Deployment 進行重排程。

1)如果成功,您將看到以下結果:

apiVersion: apps.karmada.io/v1alpha1
kind: WorkloadRebalancer
metadata:
  name: foo-rebalancer
  generation: 1
  creationTimestamp: "2024-05-22T11:16:10Z"
spec:
  ...
status:
  finishTime: "2024-05-22T11:16:10Z"
  observedGeneration: 1
  observedWorkloads:
    - result: Successful
      workload:
        apiVersion: apps/v1
        kind: Deployment
        name: foo
        namespace: default
2)如果失敗,例如 Deployment/fooResourceBinding 不存在,您將得到以下結果:
apiVersion: apps.karmada.io/v1alpha1
kind: WorkloadRebalancer
metadata:
  name: foo-rebalancer
  generation: 1
  creationTimestamp: "2024-05-22T11:16:10Z"
spec:
  ...
status:
  finishTime: "2024-05-22T11:16:10Z"
  observedGeneration: 1
  observedWorkloads:
    - reason: ReferencedBindingNotFound
      result: Failed
      workload:
        apiVersion: apps/v1
        kind: Deployment
        name: foo
        namespace: default
有關此功能的詳細描述,請參見使用者指南:https://karmada.io/zh/docs/next/userguide/scheduling/workload-rebalancer

解除資源模板命名長度的限制

由於歷史設計原因,資源模板的名稱被用作 label 的值,從而加速資源的檢索。由於 Kubernetes 限制標籤 value 值不能超過 63 個字元,導致使用者無法將名稱長度超過 63 個字元的資源分發至成員叢集中去,間接限制了資源模板名稱的長度,嚴重阻礙了使用者將工作負載從舊叢集遷移到Karmada。

Karmada社群從 v1.8 版本起著手消除這一限制,並在 v1.8 和 v1.9 版本中做了充足的準備工作,以確保使用舊版本 Karmada 的使用者可以平滑升級到當前新版本,而不用感知這一變化。

更多詳情請參見 [Umbrella] 在資源中使用 permanent-id 替換 namespace/name

標籤:https://github.com/karmada-io/karmada/issues/4711

生產環境中的可用性和可靠性增強

本版本融合了大量生產級使用者的反饋,進行了大量功能性增強以及安全性提升,包括:

1)功能增強:

  • 支援分發 kubernetes.io/service-account-token typeSecret 資源
  • 最佳化 PropagationPolicy 降低優先順序時的優先順序搶佔邏輯
  • 顯著減少 karmada-metrics-adapter 元件的記憶體使用
  • 最佳化了 karmada-webhook 的啟動邏輯,消除了偶現的異常報錯

2)安全增強:

  • google.golang.org/protobuf 從 1.31.0 升級到 1.33.0,以解決 CVE-2024-24786 漏洞問題
  • 將 Karmada 證書的 RSA 金鑰長度從 2048 升級到 3072,提高秘鑰安全性
  • text/template 庫替換為 html/template,增加 HTML 編碼等安全保護功能
  • 建立檔案時由預設授予 0666 許可權改為指定授予 0640 許可權,提高檔案安全性
  • 採取必要措施以消除安全掃描工具的誤報,如在使用 karmadactl 刪除 token 時調整日誌列印內容和消除 gosec 警告 G107 等

3)生態整合:

  • 為 OpenKruise 中的 CloneSet 資源展示 status.labelSelector,以支援該資源的HPA擴縮容特性
  • karmadactl 新增成員叢集時,新增支援 OIDC 認證模式
相信這些努力將使 Karmada 為使用者帶來更好的體驗!

致謝貢獻者

Karmada v1.10 版本包含了來自32位貢獻者的356次程式碼提交,在此對各位貢獻者表示由衷的感謝:

貢獻者GitHub ID:

Karmada v1.10釋出,新增多叢集宣告式負載重平衡

參考連結

[1]Release Notes:https://github.com/karmada-io/karmada/releases/tag/v1.10.0

[2]WorkloadRebalancer 指南:https://karmada.io/zh/docs/userguide/scheduling/workload-rebalancer

[3]WorkloadRebalancer 示例教程:https://karmada.io/zh/docs/tutorials/workload-rebalancer

[4]Karmada 1.10升級文件:https://karmada.io/docs/administrator/upgrading/v1.9-v1.10

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章