Go 開源說第十一期:KubeSphere-面向云原生應(yīng)用的容器混合云
點(diǎn)擊藍(lán)字
關(guān)注我們
本文由“GO開源說”第十一期 《KubeSphere—面向云原生應(yīng)用的容器混合云》直播內(nèi)容修改整理而成,視頻內(nèi)容較長(zhǎng),本文內(nèi)容有所刪減和重構(gòu)。
KubeSphere 是在 Kubernetes 之上構(gòu)建的面向云原生應(yīng)用的容器混合云管理系統(tǒng)。支持多云與多集群管理,提供全棧的自動(dòng)化運(yùn)維能力,幫助企業(yè)用戶簡(jiǎn)化 DevOps 工作流,提供了運(yùn)維友好的向?qū)讲僮鹘缑?,幫助企業(yè)快速構(gòu)建一個(gè)強(qiáng)大和功能豐富的容器云平臺(tái)。
KubeSphere 為用戶提供構(gòu)建企業(yè)級(jí) Kubernetes 環(huán)境所需的多項(xiàng)功能,例如多云與多集群管理、Kubernetes 資源管理、DevOps、應(yīng)用生命周期管理、微服務(wù)治理(服務(wù)網(wǎng)格)、日志查詢與收集、服務(wù)與網(wǎng)絡(luò)、多租戶管理、監(jiān)控告警、事件與審計(jì)查詢、存儲(chǔ)管理、訪問權(quán)限控制、GPU 支持、網(wǎng)絡(luò)策略、鏡像倉(cāng)庫管理以及安全管理等。
KubeSphere 對(duì)不同云生態(tài)系統(tǒng)的支持非常友好,因?yàn)樗鼘?duì)原生 Kubernetes 本身沒有任何的侵入。換句話說,KubeSphere 可以部署并運(yùn)行在任何基礎(chǔ)架構(gòu)以及所有版本兼容的 Kubernetes 集群之上,包括虛擬機(jī)、物理機(jī)、數(shù)據(jù)中心、公有云和混合云等。
豐富的生態(tài)工具
KubeSphere 圍繞 K8s 生態(tài)發(fā)展,旨在降低K8s 和云原生生態(tài)工具的學(xué)習(xí)成本和復(fù)雜性,解決 Kubernetes 易用性的痛點(diǎn)。

產(chǎn)品矩陣
伴隨著 KubeSphere 的發(fā)展,為滿足不同用戶的使用需求,衍生出了一系列的優(yōu)秀的開源工具

KubeKey
KubeKey 是由 KubeSphere 衍生的 K8s 集群安裝工具。它提供了一個(gè)即插即用的架構(gòu),可以無縫集成第三方組件。KubeKey 旨在將群集安裝為一個(gè)對(duì)象,即 CaaO (Cluster as an Object)。
相較于傳統(tǒng)的集群安裝工具 KubeKey 有以下的優(yōu)點(diǎn):
基于 Ansible 的安裝程序具有大量軟件依賴性,例如Python。KubeKey 使用Go語言開發(fā),可以消除在各種環(huán)境中的依賴問題,從而提高安裝成功率。 KubeKey 使用 Kubeadm 在節(jié)點(diǎn)上盡可能多地并行安裝K8s集群,以降低安裝復(fù)雜性并提高效率。與較舊的安裝程序相比,它將大大節(jié)省安裝時(shí)間。 KubeKey 支持各種類型的集群安裝與拓展:allinone、多節(jié)點(diǎn)、高可用集群。
KubeKey 的核心功能:
支持多版本 K8s 集群部署 支持在 ARM 架構(gòu)的 K8s 集群部署 支持多種容器運(yùn)行時(shí): Docker、Containerd、iSula、CRI-O 支持多種網(wǎng)絡(luò)插件: Calico、Flannel、Kube-OVN、Cilium 集群證書檢查和更新 ETCD 數(shù)據(jù)備份
KubeEye
KubeEye 是一個(gè) K8s 集群巡檢工具,可以幫助你快速定位 K8s 集群中出現(xiàn)的異常。
KubeEye 的核心功能:
檢測(cè) K8s 控制平面的異常 幫助您檢測(cè)各種節(jié)點(diǎn)問題,包括內(nèi)存、CPU、磁盤壓力,意外的內(nèi)核錯(cuò)誤日志等 根據(jù)行業(yè)最佳實(shí)踐驗(yàn)證集群中資源的YAML規(guī)范
PorterLB
PorterLB 是一個(gè)裸金屬環(huán)境負(fù)載均衡器實(shí)現(xiàn)。
PorterLB 的核心功能:
基于 BGP 路由動(dòng)態(tài)配置 基于路由器 ECMP 的負(fù)載均衡 VIP 管理
KubeSphere 的核心功能及架構(gòu)

KubeSphere 的核心架構(gòu)如圖所示
核心組件主要有三個(gè):
ks-console 獨(dú)立的前端服務(wù) ks-apiserver 負(fù)責(zé)認(rèn)證鑒權(quán),基本的邏輯處理和請(qǐng)求轉(zhuǎn)發(fā) ks-controller-manager 負(fù)責(zé)核心資源的狀態(tài)維護(hù)
KubeSphere 的設(shè)計(jì)中沿用了 K8s 聲明式 API 的風(fēng)格,所有可操作的資源都盡可能的抽象成為 CustomResource。與命令式 API 相比,聲明性API的使用更加簡(jiǎn)潔,并且提供了更好的抽象性, 告訴程序最終的期望狀態(tài)(做什么),而不關(guān)心怎么做。
借助 kube-apiserver、etcd 進(jìn)行數(shù)據(jù)同步和數(shù)據(jù)持久化,通過 ks-controller-manager 維護(hù)這些資源的狀態(tài),以達(dá)到最終狀態(tài)的一致性。
例如 KubeSphere 中的流水線、用戶憑證、用戶實(shí)體、告警通知的配置,都可以通過 CRD 進(jìn)行定義,借助 K8s 成熟的架構(gòu)與工具鏈,可以方便的與 K8s 進(jìn)行結(jié)合,降低各組件之間的耦合,降低系統(tǒng)的復(fù)雜度。
ks-apiserver 的核心架構(gòu)
ks-apiserver 是 KubeSphere 核心的后端組件,負(fù)責(zé)前后端數(shù)據(jù)的交互、請(qǐng)求的代理分發(fā)、認(rèn)證與鑒權(quán)。下圖是 ks-apiserver 的核心架構(gòu):

與 K8s 相同 ks-apiserver 使用了 go-restful 框架提供 WebService,請(qǐng)求鏈路中增加多個(gè) Filter 用于動(dòng)態(tài)的攔截請(qǐng)求和響應(yīng),實(shí)現(xiàn)認(rèn)證、鑒權(quán)、審計(jì)邏輯轉(zhuǎn)發(fā)和反向代理功能,KubeSphere 的 API 風(fēng)格也盡可能的跟隨 K8s 的模式,方便與 RBAC 的集成。
另外一個(gè)比較重要的部分就是插件化的架構(gòu),借助 CRD + controller 進(jìn)行解耦,可以極大的簡(jiǎn)化與第三方工具、軟件的集成方式。
K8s 社區(qū)也為我們提供了豐富的工具鏈,借助 controller-runtime 和 kubebuiler 可以很方便的開發(fā)自己的 controller。
多集群核心架構(gòu)
如今,各種組織跨不同的云廠商或者在不同的基礎(chǔ)設(shè)施上運(yùn)行和管理多個(gè) Kubernetes 集群的做法非常普遍。由于每個(gè) Kubernetes 集群都是一個(gè)相對(duì)獨(dú)立的單元,上游社區(qū)正在艱難地研究和開發(fā)多集群管理解決方案。即便如此,Kubernetes 集群聯(lián)邦(Kubernetes Cluster Federation,簡(jiǎn)稱 KubeFed)可能是其中一種可行的方法。
多集群管理最常見的使用場(chǎng)景包括服務(wù)流量負(fù)載均衡、隔離開發(fā)和生產(chǎn)環(huán)境、解耦數(shù)據(jù)處理和數(shù)據(jù)存儲(chǔ)、跨云備份和災(zāi)難恢復(fù)、靈活分配計(jì)算資源、跨區(qū)域服務(wù)的低延遲訪問以及避免廠商鎖定等。

KubeSphere 多集群的整體架構(gòu)圖如圖所示,多集群控制平面所在的集群稱之為 Host 集群,其管理的集群稱為 Member 集群,本質(zhì)上是一個(gè)安裝了 KubeSphere 的 Kubernetes 集群,Host 集群需要能夠訪問 Member 集群的 kube-apiserver,Member 集群之間的網(wǎng)絡(luò)連通性沒有要求。管理集群 Host Cluster 獨(dú)立于其所管理的成員集群,Member Cluster 并不知道 Host Cluster 存在,這樣做的好處是當(dāng)控制平面發(fā)生故障時(shí)不會(huì)影響到成員集群,已經(jīng)部署的負(fù)載仍然可以正常運(yùn)行,不會(huì)受到影響。
Host 集群同時(shí)承擔(dān)著 API 入口的作用,由 Host Cluster 將對(duì) Member 集群的資源請(qǐng)求轉(zhuǎn)發(fā)到 Member 集群,這樣做的目的是方便聚合,而且也利于做統(tǒng)一的權(quán)限認(rèn)證。
KubeSphere 多集群中只要求 Host 集群能夠訪問 Member 集群的 Kubernetes APIServer,對(duì)于集群層面的網(wǎng)絡(luò)連通性沒有要求。KubeSphere中對(duì)于 Host 和 Member 集群的連接提供了兩種方式:

直接連接:如果 Member 集群的 kube-apiserver 地址可以在 Host 集群上的任一節(jié)點(diǎn)都能連通,那么即可以使用這種直接連接的方式,Member 集群只需提供集群的 kubeconfig 即可。這種方式適用于大多數(shù)的公有云 Kubernetes 服務(wù),或者 Host 集群和 Member 集群在同一網(wǎng)絡(luò)的情形。

代理連接:如果 Member 集群在私有網(wǎng)絡(luò)中,無法暴露 kube-apiserver 地址, KubeSphere 提供了一種代理的方式,即 Tower。具體來說 Host 集群上會(huì)運(yùn)行一個(gè)代理服務(wù),當(dāng)有新集群需要加入時(shí),Host 集群會(huì)生成加入所有的憑證信息,Member 集群上運(yùn)行 Agent 會(huì)去連接 Host 集群的代理服務(wù),連接成功后建立一個(gè)反向代理隧道。由于 Member 集群的 kube-apiserver 地址在代理連接下會(huì)發(fā)生變化,需要 Host 集群為 Member 集群生成一個(gè)新的 Kubeconfig 。這樣的好處是可以屏蔽底層細(xì)節(jié),對(duì)于控制平面來說無論是直接連接還是代理方式連接,呈現(xiàn)給控制平面的都是一個(gè)可以直接使用的 Kubeconfig。
DevOps

KubeSphere 提供了基于 Jenkins 的可視化 CI/CD 流水線編輯,無需對(duì) Jenkins 進(jìn)行配置,同時(shí)內(nèi)置豐富的 CI/CD 流水線插件,包括Binary-to-Image (B2I) 和Source-to-Image (S2I),用于將源代碼或二進(jìn)制文件打包到準(zhǔn)備運(yùn)行的容器映像中。
CI/CD 流水線

自動(dòng)化:CI/CD 流水線和構(gòu)建策略均基于 Jenkins,可簡(jiǎn)化和自動(dòng)化開發(fā)、測(cè)試和生產(chǎn)過程。緩存依賴項(xiàng)用于加速構(gòu)建和部署。 開箱即用:用戶可以基于他們的 Jenkins 構(gòu)建策略和客戶端插件來創(chuàng)建基于 Git repository/SVN 的 Jenkins 流水線。在內(nèi)置的 Jenkinsfile 中定義任何步驟和階段。支持常見的代理類型,例如 Maven,Node.js 和 Go。用戶也可以自定義代理類型。 可視化:用戶可以輕松地與可視化控制面板進(jìn)行交互,編輯、管理 CI/CD 流水線。 質(zhì)量管理:支持通過靜態(tài)代碼分析掃描來檢測(cè)DevOps 工程中的 bug、代碼錯(cuò)誤和安全漏洞。 日志:日志完整記錄 CI/CD 流水線運(yùn)行全過程。
基于 Istio 的服務(wù)網(wǎng)絡(luò)
KubeSphere 服務(wù)網(wǎng)絡(luò)由一組生態(tài)系統(tǒng)項(xiàng)目組成,例如 Istio,Envoy 和 Jaeger。我們?cè)O(shè)計(jì)了一個(gè)統(tǒng)一的用戶界面來使用和管理這些工具。大多數(shù)功能都是現(xiàn)成的,并且是從開發(fā)人員的角度進(jìn)行設(shè)計(jì)的,這意味著 KubeSphere 可以幫助用戶減少學(xué)習(xí)難度,因?yàn)椴恍枰獑为?dú)深入研究這些工具。
KubeSphere 服務(wù)網(wǎng)絡(luò)為分布式應(yīng)用程序提供細(xì)粒度的流量管理、可觀測(cè)性、服務(wù)跟蹤以及服務(wù)身份和安全性管理。因此,開發(fā)人員只需要專注于核心業(yè)務(wù)。通過 KubeSphere 的服務(wù)網(wǎng)絡(luò)管理,用戶可以更好地跟蹤、查看路由和優(yōu)化 Kubernetes 中用于云原生應(yīng)用程序的通信。
流量管理

金絲雀發(fā)布:金絲雀發(fā)布是在現(xiàn)有生產(chǎn)系統(tǒng)旁邊創(chuàng)建了一個(gè)全新的獨(dú)立生產(chǎn)環(huán)境,通過使新版本只對(duì)少數(shù)終端用戶可用,這樣可降低向推出新代碼和功能的風(fēng)險(xiǎn)。如果新版本一切順利,用戶可以更改百分比,并逐漸用新版本替換舊版本。 藍(lán)綠發(fā)布:允許用戶同時(shí)運(yùn)行一個(gè)應(yīng)用程序的兩個(gè)版本。藍(lán)色代表當(dāng)前應(yīng)用程序版本,綠色代表經(jīng)過功能和性能測(cè)試的新版本。一旦測(cè)試結(jié)果成功,就將應(yīng)用程序流量從生產(chǎn)版本(藍(lán)色)路由到新版本(綠色)。 流量鏡像:流量鏡像也叫作影子流量,是指通過一定的配置將線上的真實(shí)流量復(fù)制一份到鏡像服務(wù)中去,我們通過流量鏡像轉(zhuǎn)發(fā)以達(dá)到在不影響線上服務(wù)的情況下對(duì)流量或請(qǐng)求內(nèi)容做具體分析的目的,它的設(shè)計(jì)思想是只做轉(zhuǎn)發(fā)而不接收響應(yīng)(fire and forget),使團(tuán)隊(duì)能夠以最小的風(fēng)險(xiǎn)進(jìn)行生產(chǎn)變更。 斷路器:允許用戶設(shè)置服務(wù)內(nèi)單個(gè)主機(jī)的呼叫限制,例如并發(fā)連接數(shù)或?qū)υ撝鳈C(jī)的呼叫失敗次數(shù)。
應(yīng)用程序管理和編排

應(yīng)用商店:KubeSphere 提供了一個(gè)基于開源 OpenPitrix 的應(yīng)用商店,支持應(yīng)用上傳、應(yīng)用審核、應(yīng)用上架與分類、應(yīng)用部署,為用戶提供應(yīng)用全生命周期管理功能。 應(yīng)用資料庫:在 KubeSphere 中,用戶可以創(chuàng)建一個(gè)托管在對(duì)象存儲(chǔ),例如 QingStor 、 AWS S3 中的應(yīng)用存儲(chǔ)庫或 GitHub 中, 提交到應(yīng)用程序存儲(chǔ)庫的應(yīng)用程序包由應(yīng)用程序的 Helm Chart 模板文件組成。 應(yīng)用程式范本:有了應(yīng)用程序模板,KubeSphere 只需單擊一下即可提供一種可視化的方法來部署應(yīng)用程序。在內(nèi)部,應(yīng)用程序模板可以幫助企業(yè)中的不同團(tuán)隊(duì)共享中間件和業(yè)務(wù)系統(tǒng)。在外部,它們可以用作基于不同方案和需求的應(yīng)用程序交付的行業(yè)標(biāo)準(zhǔn)。
多維度監(jiān)控
KubeSphere 通過可視化界面操作監(jiān)控、運(yùn)維功能,可簡(jiǎn)化操作和維護(hù)的整個(gè)過程。它提供了對(duì)各種資源的自定義監(jiān)控,并可以立即將發(fā)生的問題發(fā)送給用戶。
可定制的監(jiān)控儀表板:用戶可以準(zhǔn)確決定需要以哪種形式監(jiān)控哪些工具。KubeSphere 中提供了不同的模板供用戶選擇,例如 Elasticsearch,MySQL 和 Redis?;蛘?,他們也可以創(chuàng)建自己的監(jiān)視模板,包括圖表,顏色,間隔和單位。 運(yùn)維友好:開放標(biāo)準(zhǔn)接口,易于對(duì)接企業(yè)運(yùn)維系統(tǒng),以統(tǒng)一運(yùn)維入口實(shí)現(xiàn)集中化運(yùn)維。 第三方兼容性:KubeSphere 與 Prometheus 兼容,后者是用于在 Kubernetes 環(huán)境中進(jìn)行監(jiān)視的事實(shí)指標(biāo)收集平臺(tái)。監(jiān)視數(shù)據(jù)可以在 KubeSphere 的 Web 控制臺(tái)中無縫顯示。 二級(jí)精度的多維度監(jiān)控: 在集群資源維度,系統(tǒng)提供了全面的指標(biāo),例如 CPU 利用率、內(nèi)存利用率、CPU 平均負(fù)載、磁盤使用量、inode 使用率、磁盤吞吐量、IOPS、網(wǎng)卡速率、容器組運(yùn)行狀態(tài)、ETCD 監(jiān)控、API Server 監(jiān)控等多項(xiàng)指標(biāo)。 在應(yīng)用資源維度,提供針對(duì)應(yīng)用的 CPU 用量、內(nèi)存用量、容器組數(shù)量、網(wǎng)絡(luò)流出速率、網(wǎng)絡(luò)流入速率等五項(xiàng)監(jiān)控指標(biāo)。并支持按用量排序和自定義時(shí)間范圍查詢,快速定位異常提供按節(jié)點(diǎn)、企業(yè)空間、項(xiàng)目等資源用量排行。 排序:用戶可以按節(jié)點(diǎn),工作空間和項(xiàng)目對(duì)數(shù)據(jù)進(jìn)行排序,從而以直觀的方式為他們的資源運(yùn)行提供圖形化視圖。 組件監(jiān)控:它允許用戶快速定位任何組件故障,以避免不必要的業(yè)務(wù)停機(jī)。
自研多租戶告警系統(tǒng)
自定義告警策略和規(guī)則:支持基于多租戶、多維度的監(jiān)控指標(biāo)告警。該系統(tǒng)將發(fā)送與各種資源,如節(jié)點(diǎn)、網(wǎng)絡(luò)和工作負(fù)載相關(guān)的告警。可自定義包含多個(gè)告警規(guī)則的告警策略,如重復(fù)間隔和時(shí)間,來定制自己的告警策略、閾值和告警級(jí)別。 準(zhǔn)確的事件跟蹤:用戶可以及時(shí)了解集群內(nèi)部發(fā)生的情況,例如容器運(yùn)行狀態(tài)(成功或失敗),節(jié)點(diǎn)調(diào)度和鏡像拉取結(jié)果。它們將被準(zhǔn)確記錄,并在 Web 控制臺(tái)中顯示結(jié)果,狀態(tài)和消息。在生產(chǎn)環(huán)境中,這將幫助用戶及時(shí)響應(yīng)任何問題。 增強(qiáng)審計(jì)安全性:由于 KubeSphere 具有對(duì)用戶授權(quán)的細(xì)粒度管理,因此可以將資源和網(wǎng)絡(luò)完全隔離以確保數(shù)據(jù)安全。全面的審核功能使用戶可以搜索與任何操作或告警相關(guān)的活動(dòng)。 多種通知方式:電子郵件是用戶接收想要了解的相關(guān)活動(dòng)的通知的一種關(guān)鍵方法??梢愿鶕?jù)用戶自己設(shè)置的規(guī)則發(fā)送郵件,用戶可以自定義發(fā)件人電子郵件地址及其收件人列表。此外,還支持其他渠道,例如 Slack 和 WeChat。因此,無論用戶選擇哪種渠道,KubeSphere都會(huì)為用戶提供更多的通知首選項(xiàng),因?yàn)樗麄儠?huì)根據(jù)KubeSphere的最新開發(fā)進(jìn)行更新。
日志查詢與收集
多租戶日志管理.:提供多租戶日志管理,在 KubeSphere 的日志查詢系統(tǒng)中,不同的租戶只能看到屬于自己的日志信息,支持中文日志檢索,支持日志導(dǎo)出。 多級(jí)日志查詢:多級(jí)別的日志查詢(項(xiàng)目/工作負(fù)載/容器組/容器以及關(guān)鍵字)、靈活方便的日志收集配置選項(xiàng)等。 多種日志收集平臺(tái):用戶可以選擇多種日志收集平臺(tái),例如 Elasticsearch,Kafka 和 Fluentd。 落盤日志收集功能:對(duì)于將日志以文件形式保存在 Pod 掛盤上的應(yīng)用,支持開啟落盤日志收集功能。
還有很多優(yōu)秀的功能無法一一列舉,可以移步官方網(wǎng)站查看詳情。
KubeSphere 社區(qū)
社區(qū)驅(qū)動(dòng)著 KubeSphere 的發(fā)展,你可以在 GitHub 上找到所有源代碼、文檔和相關(guān)討論。如果你對(duì) KubeSphere 感興趣,我們歡迎你參與到社區(qū)開放的興趣小組,不定期的社區(qū)會(huì)議一定有你感興趣的內(nèi)容,歡迎你來提出不一樣的見解!
4 月 29 日 KubeSphere 3.1 版本 GA,得益于諸多開發(fā)者的貢獻(xiàn),感謝你們的付出,也歡迎更多志同道合的小伙伴們加入!

以下是 KubeSphere 主要的開源項(xiàng)目,歡迎大家以各種不同方式參與貢獻(xiàn),可以是文檔文案的翻譯、也可以是吐槽 bug 的 issue,更加歡迎各位大牛的 PR!
| 項(xiàng)目 | 描述 |
|---|---|
| KubeKey | K8s 集群安裝工具 |
| KubeEye | K8s 集群巡檢工具 |
| ks-console | KubeSphere 前端項(xiàng)目 |
| ks-apiserver | KubeSphere 后端項(xiàng)目 |
| KubeSphere Website | KubeSphere官網(wǎng)、文檔 |
| PorterLB | 一個(gè)裸金屬環(huán)境負(fù)載均衡器實(shí)現(xiàn) |
| Fluent Bit Operator | Fluent Bit Operator |
| Notification Manager | 獨(dú)立的通知模塊 |
| OpenFunction | 云原生FaaS平臺(tái) |
| OpenPitrix | 全生命周期云原生應(yīng)用管理 |
— 往期回顧 —
Go 開源說第七期:Harbor助你玩轉(zhuǎn)云原生

Go 開源說第五期:MOSN Go語言網(wǎng)絡(luò)代理軟件

Go 開源說第四期(下):go-zero緩存管理最佳實(shí)踐

