多云容器編排 Karmada-Operator 實踐

作者:vivo 互聯網服務器團隊-Zhang Rong
Karmada作為開源的云原生多云容器編排項目,吸引了眾多企業共同參與項目開發 , 并運行于生產環境中 。同時多云也逐步成為數據中心建設的基礎架構,多區域容災與多活、大規模多集群管理、跨云彈性與遷移等場景推動云原生多云相關技術的快速發展 。
一、 背景隨著vivo業務不斷遷移到k8s上 , 集群規模和集群的數量快速增長,運維難度也急劇增加 。為了構建多集群技術,我們也自研了多集群管理,但無法解決我們遇到的更多的問題 。后來開始對社區相關項目做了細致的調研和測試,我們最終選擇了Karmada 。
主要原因如下:
  • 具備對多套K8s集群的統一管理能力,業務通過服務維度去管理資源,降低容器平臺的管理難度 。
  • 跨集群的彈性伸縮和調度能力,實現跨集群的資源合理利用 , 從而提升資源利用率并節約成本 。
  • Karmada完全使用了K8s原生的API,改造成本低 。
  • 容災,Karmada控制平面與member集群解藕 , 集群異常時支持資源重新分配 。
  • 可擴展性 , 如可以添加自研的調度插件和添加自研Openkruise解釋器插件等 。
在我們探索怎么使用Karmada的同時,我們也遇到了Karmada自身運維的問題 。
社區部署工具較多,需要用戶自己選擇 。當前用戶部署方式如下:
  • Karmadactl
  • Karmada charts
  • 二進制部署
  • hack目錄下腳本
對于上面的幾種工具,在Karmada的社區開展了問卷調研,并生成了統計報告 。
主要總結如下:
  • 社區部署工具較多 , 需要用戶自己選擇 。
  • 部署腳本也存在缺陷,需要用戶自己解決 , github上關于這方面的提問較多 。
  • 黑屏化操作,沒有提供k8s api操作,用戶難以產品化,我們主要期望對接我們的容器平臺 , 實現可視化安裝 。
  • 缺少CI測試和部署工具的發布計劃 。
  • etcd集群缺少生產環境的關鍵功能點,如etcd的高可用、定期備份和恢復 。
  • 需要安裝很多依賴插件,涉及到Karmada控制平面、Karmada的host集群和member集群 。
  • 缺少一鍵部署和配置繁瑣等痛點 。
針對以上問題,本文將分享Karmada-Operator的vivo實踐,包括Operator的方案選擇、API、架構設計和CI構建等 。
二、Karmada-Operator的落地實踐2.1 Operator SDK介紹Operator Framework 是一個開源工具包,用于以有效、自動化且可擴展的方式管理 Kubernetes 原生應用程序,即 Operator 。Operator 利用 Kubernetes 的可擴展性來展現云服務的自動化優勢,如置備、擴展以及備份和恢復,同時能夠在 Kubernetes 可運行的任何地方運行 。
Operator 有助于簡化對 Kubernetes 上的復雜、有狀態的應用程序的管理 。然而,現在編寫 Operator 并不容易,會面臨一些挑戰,如使用低級別 API、編寫樣板文件以及缺乏模塊化功能(這會導致重復工作) 。
Operator SDK 是一個框架 , 通過提供以下內容來降低 Operator 的編寫難度:
  • 高級 API 和抽象,用于更直觀地編寫操作邏輯
  • 支架和代碼生成工具 , 用于快速引導新項目
  • 擴展項,覆蓋常見的 Operator 用例

多云容器編排 Karmada-Operator 實踐

文章插圖
如上圖所示 , operator sdk可以基于helm、ansilbe和go構建operator , 我們需根據當前的情況選擇我們合適的operator框架 。
2.2 方案選擇
  • 方案一:golang 開發Operator

多云容器編排 Karmada-Operator 實踐

文章插圖
  • 方案二:ansible開發Operator

多云容器編排 Karmada-Operator 實踐

文章插圖
  • 方案三:golang和ansible混合開發Operator

多云容器編排 Karmada-Operator 實踐

文章插圖
根據Karmada的實際生產部署調研情況和vivo自身的實踐,可以總結如下:
  1. 要支持在K8s集群和不依賴K8s集群二進制部署 。
  2. 支持外部獨立的etcd集群部署或者對接已有的etcd集群 。
  3. Karmada集群具備遷移能力,如機房裁撤和機器故障等,就需要etcd集群管理有備份和恢復能力,如根據etcd備份數據快速在其它機房恢復集群 。

    推薦閱讀