Karmada: 雲原生多雲容器編排平臺

華為雲發表於2021-08-11

7月17日,在Cloud Native Days China雲原生多雲多叢集專場,華為雲原生開源負責人王澤鋒發表了《Karmada: 雲原生多雲容器編排平臺》主題演講,分享了在雲原生多雲多叢集方面的思考與實踐。

圖片

以下為演講全文

根據最新的調查報告顯示,超過93%的企業正同時使用多個雲廠商的服務。雲原生技術和雲市場不斷成熟,多雲、多叢集部署已經成為常態,未來將是程式設計式多雲管理服務的時代。
圖片

雲原生多雲多叢集的典型階段

階段一:一群孤島

  • 一致的叢集運維
  • 一致的應用交付
  • 業務割裂,互不感知
  • 資料孤島、資源孤島、流量孤島

階段二:威尼斯水城

  • 統一應用交付(部署運維)
  • 統一應用訪問(流量分發)
  • 統一資源分配(編排排程)
  • 少量、小壓力的跨叢集業務訪問

階段3:大航海時代

例項、資料、流量:

  • 自動排程
  • 自由伸縮
  • 自由遷移

目前,從業界的產品和一些使用者二次開發使用的進度來看,還處於從一群孤島到威尼斯水城的過渡階段,一些開源的軟體和廠商的產品,大部分還是在做統一的叢集生命週期管理與叢集的目錄,以方便快速的選擇切換叢集,外加叢集的外部流量打通進行全域性流量的分配等等。但像跨叢集自動分配以及應用的跨叢集等這些能力是缺失的。

現階段,雲原生多雲多叢集業務的編排也面臨著諸多挑戰:

1)叢集繁多的重複勞動:運維工程師需要應對繁瑣的叢集配置、不同雲廠商叢集間的管理差異以及碎片化的API訪問入口等問題;

2)業務過度分散的維護難題:應用在各叢集的差異化配置繁瑣;業務跨雲訪問以及叢集間的應用同步難以管理。

3)叢集的邊界限制:應用的可用性受限於叢集;資源排程、彈性伸縮受限於叢集。

4)廠商繫結:業務部署的黏性問題,缺少自動化故障遷移;缺少中立的開源多雲容器編排專案。

多叢集容器編排的前世今生

圖片

Karmada:開源的雲原生多雲容器編排平臺

圖片

上圖為Karmada在開源社群技術全景圖,Karmada將以模組化的方式提供應用多叢集部署、高可用排程、故障遷移、多叢集服務發現和流量治理、多雲叢集生命週期管理等能力集,並面向多種典型的使用者場景預置策略集,讓使用者可以結合企業實際情況自由定製適合自身的多雲平臺。

Karmada重點會基於Kubernetes的原生API提供多叢集應用管理的能力,幫助使用者實現零程式碼改造甚至零yaml改造到多叢集架構的遷移。在能力方面,我們主要幫助使用者解決全網統一管理以及全網叢集的統一管理,另外我們會內建典型的應用部署模型,包括兩地三中心等。

Karmada 架構

圖片

Karmada通過獨立的API 伺服器(Karmada API Server)提供與其他元件進行通訊的 REST 介面,包含Kubernetes原生API及Karmada擴充套件API,而Karmada 控制管理器根據使用者建立的 API 物件執行操作, Karmada 排程器則實現應用在多叢集中的排程。

Karmada核心概念

圖片

Resource Template

  • K8s原生API定義,包括CRD
  • 無需修改即可建立多叢集應用

Propagation Policy

  • 可重用的應用多叢集排程策略

Resource Binding

  • 通用型別,驅動內部流程

Override Policy

  • 跨叢集可重用的差異化配置策略

Work

  • 子叢集最終資源在聯邦層的對映

Karmada API workflow

圖片

Karmada內部工作流程

多叢集應用部署

1)零改造 — 使用K8s原生API部署一個多叢集應用

圖片

  • 示例策略:為所有deployment配置多AZ的HA部署方案

圖片

  • 使用標準的K8s API定義部署應用
  • kubectl create -f nginx-deployment.yaml

2)Propagation Policy: 可重用的應用多叢集排程策略

圖片

resourceSelector

  • 支援關聯多種資源型別
  • 支援使用 name 或 labelSelector 進行物件篩選

placement

clusterAffinity:

  • 定義傾向排程的目標叢集
  • 支援通過 names 或 labelselector 篩選

clusterTolerations:

  • 類似單叢集中Pod tolerations和 node taints

spreadConstraints:

  • 定義應用分發的HA策略
  • 支援對叢集動態分組:按Region、AZ、特性label分組,實現不同層級的HA

3)Override Policy: 跨叢集可重用的差異化配置策略

圖片

resourceSelector

  • 支援使用 name 或 labelSelector 進行物件篩選

overriders

  • 支援多種override外掛型別
  • plainTextOverrider :基礎外掛,純文字操作替換
  • imageOverrider:針對容器映象的差異化配置外掛

4)Member Cluster API: 使用者自助可查的資源池基本單元

圖片

syncMode

  • 支援使用 Push 或 Pull 模式與叢集進行同步

secretRef

  • 分離Push模式下叢集訪問憑據,便於開放 clusters API 供使用者自助查詢

taints

  • 叢集級別taint - toleration機制,支援叢集級資源預留及驅逐

kubernetesVersion, apiEnablements

  • K8s版本,叢集開啟的API列表,支援基於API依賴的排程

resourceSummary

  • 叢集資源資訊(容量、使用量、排程中)

Karmada 社群路標

目前,我們已經實現了Q1與Q2規劃的特性,最新發布的0.7版本提供了多叢集東西向服務發現,多叢集外部流量接入目前在研發當中。版本的釋出我們是保持一個月一個版本的頻率,以讓使用者快速使用。在Q4,我們計劃重點整合業界已有的一些周邊專案,並在今年完成整體技術棧的能力開發。\

圖片

附:Karmada社群技術交流地址

專案地址:

github.com/karmada-io/…

Slack地址:

karmada-io.slack.com

相關文章