Clusternet - 新一代開源多叢集管理與應用治理專案

flynike發表於2021-09-09

作者

徐迪,騰訊雲容器技術專家。

汝英哲,騰訊雲高階產品經理。

摘要

在過去的數年裡,雲端計算領域經歷了多次巨大的變革,當前越來越多的組織將應用部署在本地和雲上的多個基礎設施平臺上,這些平臺可能是兩個公共雲服務提供商,或者兩個私有云,或者多地域的邊緣雲。

新的形態導致基礎設施的管理和應用治理的方式發生變化,傳統的技術架構與管理方式增加了複雜性和風險,難以滿足跨多個平臺的應用服務部署和治理的挑戰,代表業內最新理念的 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、 更多社群活動和福利等你來參加

【騰訊雲原生】雲說新品、雲研新術、雲遊新活、雲賞資訊,掃碼關注同名公眾號,及時獲取更多幹貨!!

相關文章