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