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

文章插圖
如上圖所示,operator sdk可以基于helm、ansilbe和go構(gòu)建operator,我們需根據(jù)當(dāng)前的情況選擇我們合適的operator框架 。
2.2 方案選擇
- 方案一:golang 開發(fā)Operator
經(jīng)驗(yàn)總結(jié)擴(kuò)展閱讀
- Docker容器獲取宿主機(jī)信息
- 罐頭容器的種類和形式有哪些?
- 養(yǎng)魚容器如何設(shè)備?
- 蓄水容器有哪些作用?
- 無(wú)菌容器打開后有效期為多少小時(shí)
- 奶油怎么制作
- 用成型水做起泡膠
- 用硼砂水做起泡膠
- 空氣炸鍋能放什么容器
- 家庭面粉放什么容器里
