作者:周峰 吳昌泰
公司簡(jiǎn)介
東方通信股份有限公司(以下簡(jiǎn)稱“東方通信”)創(chuàng)立于 1958 年,是一家集硬件設(shè)備、軟件、服務(wù)為一體的整體解決方案提供商。公司于 1996 年成功改制上市,成為上海證交所同時(shí)發(fā)行 A 股和 B 股的國(guó)有控股上市公司。公司業(yè)務(wù)主要包括:專網(wǎng)通信及信息安全產(chǎn)品和解決方案、公網(wǎng)通信相關(guān)產(chǎn)品及 ICT 服務(wù)、金融電子設(shè)備及軟件產(chǎn)品、智能制造業(yè)務(wù)。
十四五期間,公司主責(zé)主業(yè)聚焦在以專網(wǎng)通信、公網(wǎng)通信、ICT 服務(wù)為基礎(chǔ)的“信息通信產(chǎn)業(yè)”,金融電子為基礎(chǔ)的“金融科技產(chǎn)業(yè)”和“智能制造產(chǎn)業(yè)”三大產(chǎn)業(yè),圍繞主責(zé)主業(yè)不斷創(chuàng)新與轉(zhuǎn)型升級(jí)。 肩負(fù)“科技創(chuàng)造價(jià)值,共筑美好生活”的使命,東方通信堅(jiān)持“誠(chéng)信、務(wù)實(shí)、創(chuàng)新、共贏”的理念,致力于為客戶提供優(yōu)質(zhì)的產(chǎn)品、便利的體驗(yàn)、完美的方案和滿意的服務(wù),努力成為在國(guó)際市場(chǎng)中擁有優(yōu)勢(shì)品牌、持續(xù)創(chuàng)新和發(fā)展的領(lǐng)先企業(yè)!
技術(shù)現(xiàn)狀
- 在使用 KubeSphere 之前,公司已經(jīng)開始研究云原生和探索應(yīng)用上云的道路。但是由于每個(gè)團(tuán)隊(duì)接觸和學(xué)習(xí)云原生技術(shù)的時(shí)間不同,原生 Kubernetes 的使用還是存在一定的門檻。并且隨著公司云的基礎(chǔ)設(shè)施和使用團(tuán)隊(duì)的的增加,也提高了云平臺(tái)團(tuán)隊(duì)對(duì)云的管理難度。
- 項(xiàng)目的交付方式還是傳統(tǒng)的瀑布式開發(fā)模式,沒有高效的流程,不同的環(huán)境下需要對(duì)應(yīng)的開發(fā)或運(yùn)維人員手動(dòng)部署,增大出現(xiàn)差異性和錯(cuò)誤的幾率。
團(tuán)隊(duì)規(guī)模
公司擁有國(guó)家級(jí)企業(yè)技術(shù)中心和博士后工作站,承擔(dān)著多項(xiàng)國(guó)家重點(diǎn)研發(fā)項(xiàng)目,并多次榮獲國(guó)家科技進(jìn)步獎(jiǎng),現(xiàn)有員工 2500 余名,其中 75% 以上為技術(shù)專業(yè)人才。
背景介紹
近幾年,云原生技術(shù)已經(jīng)不再是一個(gè)新鮮詞匯,根據(jù)權(quán)威 IT 研究公司 Gartner 預(yù)測(cè),到 2025 年,云原生平臺(tái)將成為 95%以上的新數(shù)字化計(jì)劃的基礎(chǔ),而在 2021 年這一比例只有不到 40%。云原生技術(shù)在效率上的巨大優(yōu)勢(shì),使其逐漸成為 IT 發(fā)展的主流趨勢(shì)。
針對(duì)用戶在業(yè)務(wù)上提出的一些需求,云原生技術(shù)能夠?yàn)槲覀兲峁└嗟倪x擇。以我司最近的一個(gè)項(xiàng)目為例,用戶要求為每條業(yè)務(wù)線路提供主備實(shí)例,同時(shí)還需要提供容災(zāi)備份。在傳統(tǒng)部署方式下,需要采購的服務(wù)器數(shù)量是業(yè)務(wù)線路數(shù)量的 4 倍。但是使用云原生技術(shù),通過容器的方式來實(shí)現(xiàn)業(yè)務(wù)線路之間的隔離,可以大大降低基礎(chǔ)設(shè)施部署的成本,使用 Kubernetes 作為編排引擎,以聲明式腳本的方式部署業(yè)務(wù),規(guī)范并簡(jiǎn)化了部署流程,提高了可重復(fù)性和一致性。
上面舉例中提到的只是云原生技術(shù)帶來的其中一部分改變,隨著業(yè)務(wù)更加深入的進(jìn)行云化改造,還可以在業(yè)務(wù)的彈性和高可用,敏捷開發(fā)等方面帶來更多的價(jià)值。
選型說明
工具選型的過程
公司與 KubeSphere 的相遇始于針對(duì) Kubernetes 的 Dashboard 的選型。在使用 KubeSphere 之前,我們也研究和試用了許多其他的項(xiàng)目,比如 Kubernetes 官方的 Dashboard 和其他市場(chǎng)同類型產(chǎn)品。Kubernetes 官方的 Dashboard 的功能比較單一,只是提供了對(duì)集群資源的管理,市場(chǎng)同類型產(chǎn)品雖然功能更豐富,但還是無法完全滿足我們的需求。
選擇 KubeSphere 的原因
最終選擇 KubeSphere 的原因有以下幾點(diǎn):
- 首先,KubeSphere 不僅僅只是單純的 Dashboard ,除了針對(duì) Kubernetes 資源管理之外,還提供了統(tǒng)一的集群管理、包含日志、審計(jì)、監(jiān)控在內(nèi)的強(qiáng)大的可觀測(cè)性等許多附加功能。同時(shí)提供可插拔組件的部署方式,既滿足了功能多樣性,又滿足了部署的靈活性需求。
- 其次,KubeSphere 很好的集成了 DevOps 自動(dòng)化流程,而 DevOps 自動(dòng)化流程是提高軟件交付速度、保障質(zhì)量和可靠性的最佳實(shí)踐方法。
- 最后,我們看重的是 KubeSphere 活躍的開源社區(qū)。最為一款開源產(chǎn)品,一個(gè)充滿活力的開放性開源社區(qū),才能提供充分的能力和技術(shù)知識(shí)支持,讓大家能共享開源模式所帶來的紅利。
實(shí)踐過程
基礎(chǔ)設(shè)施與部署架構(gòu)
在使用 KubeSphere 的過程中,我們首先是借助 KubeSphere 提供的多集群和多租戶功能對(duì)現(xiàn)有的集群資源和云上的組織整體架構(gòu)做了調(diào)整,下圖所示是我們現(xiàn)在基于 KubeSphere 的東信云組織架構(gòu)。
利用多集群管理功能,對(duì)現(xiàn)有的集群資源進(jìn)行了統(tǒng)一管理。既實(shí)現(xiàn)了隔離不同環(huán)境,又實(shí)現(xiàn)了跨集群的統(tǒng)一管理。通過統(tǒng)一的控制平面,將應(yīng)用程序及其副本分發(fā)到不同集群,實(shí)現(xiàn)了集中監(jiān)控、日志系統(tǒng)、事件和審計(jì)日志。
其次,借助多租戶管理功能,為不同的事業(yè)部創(chuàng)建各自的企業(yè)空間(WorkSpace),在企業(yè)空間中控制資源訪問權(quán)限。每個(gè)企業(yè)空間下按開發(fā)、測(cè)試、運(yùn)維小組劃分為不同的部門,同時(shí)為每個(gè)項(xiàng)目創(chuàng)建項(xiàng)目空間(NameSpace)。部門作為權(quán)限管理的邏輯單元,通過設(shè)置項(xiàng)目角色使部門擁有項(xiàng)目的對(duì)應(yīng)權(quán)限,再將用戶分配至部門后,簡(jiǎn)化對(duì)新加入成員的權(quán)限分配過程。
引入 DevOps 工作流,利用 S2I、B2I 實(shí)現(xiàn)鏡像的快速交付,借助 Jenkins 流水線實(shí)現(xiàn) CI/CD,幫助團(tuán)隊(duì)實(shí)現(xiàn)軟件的快速、安全、可靠地交付。
借助 KubeSphere 的應(yīng)用商店功能來管理應(yīng)用程序的整個(gè)生命周期(提交、審核、測(cè)試、發(fā)布、升級(jí)和下架),同時(shí)我們還部署了 Harbor 來管理容器鏡像。
存儲(chǔ)實(shí)現(xiàn)方案
為了解決持久化存儲(chǔ)的問題,采用基于 nfs-subdir-external-provisioner 的 storageclass 作為存儲(chǔ)類,同時(shí)對(duì)不方便進(jìn)行改造的業(yè)務(wù)支持使用本地存儲(chǔ)。由用戶創(chuàng)建業(yè)務(wù) Pod 和 PVC 來申請(qǐng)使用一定量的存儲(chǔ)資源,集群管理員管理存儲(chǔ)類和 PV,如果使用的是 NFS 類型的存儲(chǔ),由 nfs-subdir-external-provisioner 根據(jù) PVC 申請(qǐng)的存儲(chǔ)大小自動(dòng)創(chuàng)建 PV,如果使用的是本地存儲(chǔ),則由管理員負(fù)責(zé)手動(dòng)創(chuàng)建 PV。
日志和監(jiān)控方案
為了實(shí)現(xiàn)日志文件持久化存儲(chǔ),從容器中讀取日志可讀,且重啟和掉電不丟。采用 EFK(Elasticsearch + Fluentd + Kibana)的日志收集和分析方案來幫助有效的管理和分析大規(guī)模日志數(shù)據(jù)。日志收集目標(biāo)包括:Docker 組件日志、業(yè)務(wù)容器日志、管理面組件日志。Elasticsearch 組件目前是直接使用 KubeSphere 內(nèi)置的 ES,后期為了提升性能,考慮接入外部的 Elasticsearch。
引入 Prometheus 服務(wù)作為監(jiān)控中心,定時(shí)采集業(yè)務(wù)容器、控制面組件以及物理服務(wù)器三個(gè)層面的指標(biāo)數(shù)據(jù),通過 KubeSphere 界面或 Grafana 的界面展示詳細(xì)信息。使用采集到的各種指標(biāo)來判斷業(yè)務(wù)或集群是否正常,針對(duì)異常可通過 Prometheus 的 AlarmManage 告警功能進(jìn)行信息的轉(zhuǎn)發(fā),將告警信息同步到網(wǎng)管(內(nèi)部管理平臺(tái))或通過郵箱、短信、釘釘?shù)确绞酵ㄖ竭\(yùn)維人員。
多租戶管理
這里我們想重點(diǎn)分享一下我們針對(duì) KubeSphere 的多租戶結(jié)構(gòu)的分析,KubeSphere 在 Kubernetes 的 RBAC 和命名空間提供的基本的邏輯隔離能力基礎(chǔ)上,增加了企業(yè)空間提供了跨集群、跨項(xiàng)目(即 Kubernetes 中的命名空間)共享資源的能力和權(quán)限控制。下面的分析都是基于我們公司使用的 KubeSphere V3.3.0 版本展開。
多租戶元素 | 資源類型 | 來源 |
---|---|---|
用戶 | users.iam.kubesphere.io |
KubeSphere crds |
平臺(tái)角色 | globalroles.iam.kubesphere.io |
KubeSphere crds |
平臺(tái)角色綁定 | globalrolebindings.iam.kubesphere.io |
KubeSphere crds |
企業(yè)空間 | workspaces.tenant.kubesphere.io |
KubeSphere crds |
workspacesTemplate.tenant.kubesphere.io |
KubeSphere crds | |
企業(yè)空間角色 | workspaceroles.iam.kubesphere.io |
KubeSphere crds |
企業(yè)空間角色綁定 | workspacerolebindings.iam.kubesphere.io |
KubeSphere crds |
項(xiàng)目 | namespace |
K8s 自帶 |
項(xiàng)目角色 | roles |
K8s 自帶 |
項(xiàng)目角色綁定 | rolebindings |
K8s 自帶 |
- 用戶 Users
用戶是 KubeSphere 的帳戶實(shí)例,是登陸 KubeSphere 控制臺(tái)的實(shí)體賬號(hào),在 KubeSphere 中使用 users.iam.kubesphere.io
資源對(duì)用戶進(jìn)行抽象。
用戶信息中保存了用戶名、密碼、最后登陸時(shí)間等信息。
- 平臺(tái)角色 globalroles
在 KubeSphere 中平臺(tái)角色使用 globalroles.iam.kubesphere.io
資源抽象。安裝成功后,會(huì)預(yù)創(chuàng)建 4 個(gè)內(nèi)置的平臺(tái)角色,每個(gè)平臺(tái)角色實(shí)際又關(guān)聯(lián)著一個(gè)或多個(gè)平臺(tái)模板角色(平臺(tái)角色的權(quán)限是關(guān)聯(lián)模板角色權(quán)限的集合)。
內(nèi)置角色 | 描述 |
---|---|
workspaces-manager | 企業(yè)空間管理員,管理平臺(tái)所有企業(yè)空間。 |
users-manager | 用戶管理員,管理平臺(tái)所有用戶。 |
platform-regular | 平臺(tái)普通用戶,在被邀請(qǐng)加入企業(yè)空間或集群之前沒有任何資源操作權(quán)限。 |
platform-admin | 平臺(tái)管理員,可以管理平臺(tái)內(nèi)的所有資源。 |
以 users-manager 角色為例子,其關(guān)聯(lián)了用戶查看、角色查看、用戶管理、角色管理四個(gè)模板角色,這讓 users-manager 角色擁有了這四個(gè)角色模板下所對(duì)應(yīng)的資源訪問權(quán)限。
- 平臺(tái)角色綁定 globalrolebindings
創(chuàng)建用戶后,需要為用戶分配一個(gè)平臺(tái)角色,使用 globalrolebindings.iam.kubesphere.io
資源來抽象用戶和平臺(tái)角色的綁定關(guān)系。
在創(chuàng)建一個(gè)新的平臺(tái)角色時(shí),需要編輯權(quán)限,此時(shí)就是為新創(chuàng)建的平臺(tái)角色關(guān)聯(lián)預(yù)創(chuàng)建的角色模板。
- 企業(yè)空間 WorkSpace
企業(yè)空間是 KubeSphere 中用來管理項(xiàng)目、DevOps 項(xiàng)目、應(yīng)用模板和應(yīng)用倉庫的一種邏輯單元??梢栽谄髽I(yè)空間中控制資源訪問權(quán)限,也可以安全地在團(tuán)隊(duì)內(nèi)部分享資源。在 KubeSphere 中使用 workspaces.tenant.kubesphere.io
和 workspacesTemplate.tenant.kubesphere.io
資源對(duì)企業(yè)空間進(jìn)行抽象。
- 企業(yè)空間角色 workspaceroles
在 KubeSphere 中企業(yè)空間角色使用 workspaceroles.iam.kubesphere.io
資源抽象。安裝成功后,會(huì)預(yù)創(chuàng)建 4 個(gè)內(nèi)置的企業(yè)空間角色,每個(gè)企業(yè)空間角色實(shí)際又關(guān)聯(lián)著一個(gè)或多個(gè)企業(yè)空間模板角色(企業(yè)空間角色的權(quán)限是關(guān)聯(lián)企業(yè)空間模板角色權(quán)限的集合)。
名稱 | 描述 |
---|---|
workspace-viewer | 企業(yè)空間觀察員,可以查看企業(yè)空間中所有資源。 |
workspace-self-provisioner | 企業(yè)空間普通成員,可以查看企業(yè)設(shè)置、管理應(yīng)用模板、創(chuàng)建項(xiàng)目和 DevOps 項(xiàng)目。 |
workspace-regular | 企業(yè)空間普通成員,可以查看企業(yè)空間設(shè)置。 |
workspace-admin | 企業(yè)空間管理員,可以管理企業(yè)空間中的所有資源。 |
以 system-workspace-viewer 為例子,其關(guān)聯(lián)了業(yè)空間設(shè)置查看、角色查看、成員查看、部門查看、項(xiàng)目查看、DevOps 項(xiàng)目查看、應(yīng)用模板查看、應(yīng)用倉庫查看八個(gè)模板角色。
- 企業(yè)空間角色綁定 workspacerolebindings
在企業(yè)空間中,可以在企業(yè)空間成員處邀請(qǐng)用戶加入企業(yè)空間,邀請(qǐng)用戶加入時(shí),還需要為其分配企業(yè)空間角色,使用 workspacerolebindings.iam.kubesphere.io
資源來抽象用戶和企業(yè)空間角色的綁定關(guān)系。
此處以企業(yè)空間的默認(rèn)管理員角色為例(管理員的角色綁定是在創(chuàng)建企業(yè)空間時(shí)選擇管理員時(shí)綁定)。
- 項(xiàng)目 NameSpace
KubeSphere 中項(xiàng)目就是 K8s 中的命名空間,使用的就是 NameSpace 資源來抽象項(xiàng)目,企業(yè)空間和項(xiàng)目的關(guān)系是一對(duì)多,即一個(gè)企業(yè)空間下,可以創(chuàng)建多個(gè)項(xiàng)目。K8s 的默認(rèn)命名空間和 KubeSphere 系統(tǒng)相關(guān)的命名空間,都?xì)w屬于默認(rèn)企業(yè)空間 system-workspace。
下面在前面創(chuàng)建的 demo-ws
企業(yè)空間下創(chuàng)建一個(gè)新的項(xiàng)目 demo-ws-project-01
。
- 項(xiàng)目角色 roles
在 KubeSphere 中項(xiàng)目角色對(duì)應(yīng)的就是 K8s 自帶的 roles
資源。但是通過 KubeSphere 創(chuàng)建新項(xiàng)目時(shí),會(huì)自動(dòng)創(chuàng)建 3 個(gè)內(nèi)置的項(xiàng)目角色,每個(gè)項(xiàng)目角色實(shí)際又關(guān)聯(lián)著一個(gè)或多個(gè)項(xiàng)目模板角色(項(xiàng)目角色的權(quán)限是關(guān)聯(lián)項(xiàng)目模板角色權(quán)限的集合)。
內(nèi)置角色 | 描述 |
---|---|
viewer | 項(xiàng)目觀察者,可以查看項(xiàng)目下所有的資源。 |
operator | 項(xiàng)目維護(hù)者,可以管理項(xiàng)目下除用戶和角色之外的資源。 |
admin | 項(xiàng)目管理員,可以對(duì)項(xiàng)目下的所有資源執(zhí)行所有操作。此角色可以完全控制項(xiàng)目下的所有資源。 |
下圖展示的是 demo-ws-project-01
項(xiàng)目下的項(xiàng)目角色,如需查看其他項(xiàng)目下的角色,需要帶-n
參數(shù)指定項(xiàng)目名(命名空間)。
以 viewer 角色為例,關(guān)聯(lián)了如下的項(xiàng)目模板角色。
- 項(xiàng)目角色綁定 rolebindings
在項(xiàng)目下,可以在項(xiàng)目成員處邀請(qǐng)用戶加入項(xiàng)目,邀請(qǐng)用戶加入時(shí),還需要為其分配項(xiàng)目角色,此時(shí)使用的就是 K8s 自帶的 rolebindings
資源。
以 demo-ws-project-01
項(xiàng)目下綁定關(guān)系為例。
從下圖可以看到,admin 用戶綁定了該項(xiàng)目下的 admin 角色。
使用效果
對(duì)比使用 KubeSphere 之前,在針對(duì) Kubernetes 集群的管理和使用上,我們有以下幾點(diǎn)感受:
- 在使用了 KubeSphere 之后,原有的分散管理的多個(gè)集群在邏輯上組成了一個(gè)大一統(tǒng)環(huán)境,集群管理的許多操作不需要再分別連接到不同集群上去操作,對(duì)多個(gè)集群的狀態(tài)監(jiān)控也能夠在統(tǒng)一的入口獲取,極大的提高了管理的效率。
- 項(xiàng)目交付和部署更加的規(guī)范,減少了因環(huán)境和不同人員操作而可能產(chǎn)生的差異性,特別是應(yīng)用商城讓應(yīng)用如同貨架上的商品一樣唾手可得,應(yīng)用的部署也只需要很少的修改后即可一鍵安裝。
- 友好的用戶界面和可視化的操作方式,降低了公司其他團(tuán)隊(duì)使用云的門檻,讓即使是剛接觸云原生的團(tuán)隊(duì),也能很快的上手。
未來規(guī)劃
未來我們計(jì)劃探索和使用更多 KubeSphere 的組件功能,如審計(jì)日志、服務(wù)網(wǎng)格等。針對(duì)東信團(tuán)隊(duì)的內(nèi)部需求,對(duì) KubeSphere 的源碼進(jìn)行二次開發(fā),并爭(zhēng)取能夠回饋社區(qū)。積極參與社區(qū)活動(dòng),與社區(qū)進(jìn)行更加深入的交流。
同時(shí),對(duì)于 KubeSphere,我們也有一些建議:
-
KubeSphere 頁面上能提供的監(jiān)控?cái)?shù)據(jù)只有 CPU 內(nèi)存這些基本數(shù)據(jù),日志檢索功能也不是特別方便,我們現(xiàn)在是通過手動(dòng)跳轉(zhuǎn)到 Grafana 和 Kibana 頁面使用,希望未來能有更好用的日志和監(jiān)控功能。
-
目前官方提供的使用文檔相對(duì)簡(jiǎn)單,有些功能只是簡(jiǎn)略帶過,希望能細(xì)化文檔,最好是出一些視頻類的使用教程。
-
源碼中的注解信息比較少,增加了源碼解讀的難度,也希望官方能推出一些指導(dǎo)源碼解讀的文檔。文章來源:http://www.zghlxwxcb.cn/news/detail-582819.html
本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布!文章來源地址http://www.zghlxwxcb.cn/news/detail-582819.html
到了這里,關(guān)于東方通信基于 KubeSphere 的云計(jì)算落地經(jīng)驗(yàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!