作者
徐迪,騰訊云容器技術專家,
汝英哲,騰訊云高級產品經理,
摘要
在過去的數年里,云計算領域經歷了多次巨大的變革,當前越來越多的組織將應用部署在本地和云上的多個基礎設施平臺上,這些平臺可能是兩個公共云服務提供商,或者兩個私有云,或者多地域的邊緣云,
新的形態導致基礎設施的管理和應用治理的方式發生變化,傳統的技術架構與管理方式增加了復雜性和風險,難以滿足跨多個平臺的應用服務部署和治理的挑戰,代表業內最新理念的 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 資源分發模型采用松耦合的設計,用戶無須更改或重新撰寫已有的資源物件,僅需要額外定義分發策略 (Subscription)和差異化配置(Localization/Globalization)即可實作多集群的應用分發,
● 兼容任意資源型別
完全兼容 K8s 的標準資源,比如Deployment、StatefulSet、DaemonSet,以及各種自定義的 CRD 等,無需學習復雜的多集群資源的 CRD 定義,
● Subscription
定義希望安裝到集群中的資源,對于每個匹配的集群,將在其專屬的命名空間中創建相應的Base物件
● Localization & Globalization
在多集群應用分發的時,還可以利用 Localization 和 Globalization 差異化策略用于不同集群間的差異化配置,其中Localization描述 namespace-scoped (命名空間作用域)的差異化配置策略,Globalization 描述 cluster-scoped (集群作用域) 的差異化配置策略,兩者均支持按照 Priority(優先級)進行管理和配置,這個特性對于面向多集群的藍綠發布、金絲雀發布、版本升級等場景非常靈活實用,
● Base & Description
Clusternet 會自動生成 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 愿與各個領域的同仁一起,求實創新,砥礪前行,共同開創萬物智聯、虛實共生和全真互聯的新時代,
加入我們
Clusternet 專案開源進行時,歡迎關注 https://github.com/clusternet/clusternet 點贊支持,
我們正在限量召集 Clusternet 的第一批開源技術粉絲,只要你對 Clusternet 及相關技術感興趣,都歡迎加入,參與方式:關注-公-眾-號:【騰訊云原生】,添加小助手進群,
我們的開源技術粉絲將可以享受到以下特殊福利哦~
1、 專屬開源技術粉絲交流群
2、 與專案作者、業內專家等直接交流
3、 更多社區活動和福利等你來參加
【騰訊云原生】云說新品、云研新術、云游新活、云賞資訊,掃碼關注同名公眾號,及時獲取更多干貨!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/296269.html
標籤:其他

