摘要
在過(guò)去的數(shù)年里,云計(jì)算領(lǐng)域經(jīng)歷了多次巨大的變革,當(dāng)前越來(lái)越多的組織將應(yīng)用部署在本地和云上的多個(gè)基礎(chǔ)設(shè)施平臺(tái)上,這些平臺(tái)可能是兩個(gè)公共云服務(wù)提供商,或者兩個(gè)私有云,或者多地域的邊緣云。
新的形態(tài)導(dǎo)致基礎(chǔ)設(shè)施的管理和應(yīng)用治理的方式發(fā)生變化,傳統(tǒng)的技術(shù)架構(gòu)與管理方式增加了復(fù)雜性和風(fēng)險(xiǎn),難以滿足跨多個(gè)平臺(tái)的應(yīng)用服務(wù)部署和治理的挑戰(zhàn),代表業(yè)內(nèi)最新理念的 Clusternet 項(xiàng)目應(yīng)運(yùn)而生。
開(kāi)源 Clusternet 項(xiàng)目
Clusternet ( Cluster Internet ) 是騰訊云開(kāi)源的兼具多集群管理和跨集群應(yīng)用編排的云原生項(xiàng)目,讓管控多集群就像上網(wǎng)一樣簡(jiǎn)單。。無(wú)論你的 Kubernetes 集群是運(yùn)行在公有云、私有云、混合云還是邊緣云上,都擁有一致的管理/訪問(wèn)體驗(yàn),利用 K8s API 集中部署和協(xié)調(diào)多集群的應(yīng)用程序和服務(wù)。
Clusternet 采用 Addon 插件的方式,方便用戶一鍵安裝、運(yùn)維及集成,輕松地管理數(shù)以百萬(wàn)計(jì)的 Kubernetes 集群,讓云計(jì)算像 Internet一樣無(wú)所不在,自由便捷。
以 Clusternet 項(xiàng)目為基礎(chǔ)實(shí)現(xiàn)多云多集群管理平臺(tái),為用戶提供跨云、跨集群、跨 region/zone 的分布式容器服務(wù),將更好地滿足多種場(chǎng)景需求。
● 多租戶
● 高可用與容災(zāi)
● 多云多中心服務(wù)
● 邊緣計(jì)算
架構(gòu)理念
Clusternet 面向未來(lái)云原生多云多集群而設(shè)計(jì),領(lǐng)先的架構(gòu)支持用戶以全局視角統(tǒng)一管理各個(gè)集群及應(yīng)用,輕松地將用戶業(yè)務(wù)發(fā)布至全球,一次發(fā)布處處運(yùn)行。
集群管理集群
Clusternet 遵循云原生理念,所有管理組件通過(guò) Addon 的方式靈活部署在 Kubernetes 集群中,實(shí)現(xiàn) K8s-on-K8s 集群管理集群。
對(duì)比社區(qū)其他多集群管理方案,無(wú)需學(xué)習(xí)和維護(hù)復(fù)雜的平臺(tái)軟件和系統(tǒng),也無(wú)需維護(hù)額外的控制面的組件及 etcd。Clusternet 集群管理完全復(fù)用已有的 Kubernetes 集群及端口,通過(guò) AA (Aggregated APIServer) 的方式進(jìn)行工作,方便靈活擴(kuò)展,大大減輕運(yùn)維復(fù)雜度和資源消耗。
Clusternet 架構(gòu)上保證輕量化和精簡(jiǎn),組件包括:
1、 clusternet-hub組件 clusternet-hub 部署和運(yùn)行在父集群中,通過(guò) AA (Aggregated APIServer)的方式進(jìn)行工作。
主要負(fù)責(zé):
● 批準(zhǔn)各個(gè)子集群的注冊(cè)請(qǐng)求,并為其創(chuàng)建專屬的資源,如命名空間(namespace)、服務(wù)賬戶(ServiceAccount)和 RBAC 規(guī)則等。
● 維護(hù)父集群跟各個(gè)子集群的長(zhǎng)連接
● 提供 Kubernetes 風(fēng)格 的 REST API 用于訪問(wèn)各個(gè)子集群,尤其是對(duì)于邊緣子集群的訪問(wèn),同時(shí)還支持子集群的服務(wù)互訪
● 支持多集群的應(yīng)用分發(fā)及治理
2、clusternet-agent組件 clusternet-agent 部署在各個(gè)子集群中。
主要負(fù)責(zé):
● 將當(dāng)前集群自動(dòng)注冊(cè)到父集群中作為子集群。
● 建立與父集群的 TCP 全雙工的 websocket 安全隧道。支持通過(guò) FeatureGate “SocketConnection” 選擇是否要建立安全隧道。如果關(guān)閉該特性的話,即意味著父集群可以通過(guò)直連的方式訪問(wèn)子集群。
● 上報(bào)集群的心跳信息,包括 Kubernetes 版本、平臺(tái)信息、healthz/readyz/livez 健康狀態(tài)、集群容量、節(jié)點(diǎn)狀態(tài)等
基于 Clusternet 輕量和靈活的架構(gòu),支持父集群自注冊(cè),Clusternet-hub 可向自身所在集群發(fā)布應(yīng)用,該種方式最大化的利用父集群資源,并可以快速地?cái)U(kuò)展用戶現(xiàn)有的集群,輕松具備管理海量公有云、私有云、邊緣云集群的能力。
任意資源類型的多集群分發(fā)
Clusternet 支持向不同集群分發(fā)和管理各種應(yīng)用資源,包括原生 Kubernetes 各類資源(Deployment/StatefulSet/ConfigMap/Secret 等)、各類 CRD 資源,以及 HelmChart 應(yīng)用等等。
下圖是 Clusternet 的多集群應(yīng)用分發(fā)模型,其中綠色的模塊是需要用戶去創(chuàng)建的,紫色的模塊是 Clusternet 內(nèi)部做流轉(zhuǎn)的資源對(duì)象。Clusternet 提供了 kubectl 插件,可以通過(guò) “kubectl clusternet apply” 命令來(lái)創(chuàng)建資源。
Clusternet 的多集群應(yīng)用分發(fā)模型
Clusternet 資源分發(fā)模型采用松耦合的設(shè)計(jì),用戶無(wú)須更改或重新編寫(xiě)已有的資源對(duì)象,僅需要額外定義分發(fā)策略(Subscription)和差異化配置(Localization/Globalization)即可實(shí)現(xiàn)多集群的應(yīng)用分發(fā)。
● 兼容任意資源類型完全兼容 K8s 的標(biāo)準(zhǔn)資源,比如Deployment、StatefulSet、DaemonSet,以及各種自定義的 CRD 等,無(wú)需學(xué)習(xí)復(fù)雜的多集群資源的 CRD 定義。
● Subscription定義希望安裝到集群中的資源。對(duì)于每個(gè)匹配的集群,將在其專屬的命名空間中創(chuàng)建相應(yīng)的Base對(duì)象
● Localization & Globalization在多集群應(yīng)用分發(fā)的時(shí),還可以利用 Localization 和 Globalization 差異化策略用于不同集群間的差異化配置。其中Localization描述 namespace-scoped (命名空間作用域)的差異化配置策略,Globalization 描述 cluster-scoped (集群作用域) 的差異化配置策略,兩者均支持按照 Priority(優(yōu)先級(jí))進(jìn)行管理和配置。這個(gè)特性對(duì)于面向多集群的藍(lán)綠發(fā)布、金絲雀發(fā)布、版本升級(jí)等場(chǎng)景非常靈活實(shí)用。
● Base & DescriptionClusternet 會(huì)自動(dòng)生成 Base 和 Description 對(duì)象,用以觀察和跟蹤各個(gè)應(yīng)用資源的分發(fā)情況。其中 Description 是 Base 對(duì)象通過(guò) Localization 和 Globalization 差異化配置渲染后得到的對(duì)象,即描述著最終要部署到目標(biāo)子集群的對(duì)象定義。
云原生生態(tài)完全兼容
Clusternet 在項(xiàng)目設(shè)計(jì)之初,就全面兼容云原生生態(tài)。
Clusternet 提供了多平臺(tái)的版本支持,包括常見(jiàn)的 Linux 各平臺(tái),比如 x86,arm64,armv6,ppc64le,s390x。
Clusternet 還提供了 kubectl 插件 (kubectl-clusternet),直接通過(guò) kubectl 命令行進(jìn)行操作,無(wú)需引入額外 CLI 工具,也無(wú)需切換 kubeconfig 的 context,即可進(jìn)行多集群資源的創(chuàng)建、更新、編輯、刪除、擴(kuò)縮容等操作,方便兼容用戶現(xiàn)有的 CICD 發(fā)布系統(tǒng)。
此外,Clusternet 還提供了對(duì) client-go 的支持,完全兼容個(gè)版本的 client-go。Clusternet 通過(guò) wrapperFunc 以無(wú)侵入的方式提供了 Clusternet 多集群對(duì)接能力。開(kāi)發(fā)者可以參考文檔指引,最快通過(guò)三行代碼,就可在您的系統(tǒng)里實(shí)現(xiàn)多集群和應(yīng)用管理能力。
Clusternet 支持云原生生態(tài)的軟件和項(xiàng)目,從 v0.2.0 版本開(kāi)始就支持對(duì) Helm Charts 的多集群分發(fā)。基于 Clusternet 對(duì)任意 K8s 資源的原生支持,所有 K8s 生態(tài)的項(xiàng)目和軟件都可通過(guò) Clusternet 項(xiàng)目實(shí)現(xiàn)多集群能力。
注: kubectl-clusternet 即將添加成為 Kubectl 官方 plugin ,詳細(xì)信息參考 PR ,未來(lái)可通過(guò) “kubectl krew install clusternet” 一鍵安裝該插件,現(xiàn)階段可以先通過(guò)直接下載二進(jìn)制文件的方式來(lái)使用。
未來(lái)展望
Clusternet 是騰訊最新開(kāi)源的多集群管理與應(yīng)用治理項(xiàng)目,全新的架構(gòu)設(shè)計(jì)遵循云原生理念,完全兼容原生 K8s 資源并擴(kuò)展至多集群,支持用戶快捷和低成本的對(duì)接 K8s 云原生生態(tài),助力您的業(yè)務(wù)向未來(lái)分布式云的轉(zhuǎn)型。
當(dāng)前 Clusternet 仍在快速開(kāi)發(fā)迭代中,即將發(fā)布 v0.4.0 版本,帶來(lái)更多優(yōu)秀的特性,歡迎大家持續(xù)關(guān)注。Clusternet 愿與各個(gè)領(lǐng)域的同仁一起,求實(shí)創(chuàng)新,砥礪前行,共同開(kāi)創(chuàng)萬(wàn)物智聯(lián)、虛實(shí)共生和全真互聯(lián)的新時(shí)代。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。