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社群技術交流地址
專案地址:
Slack地址: