1.安暢網(wǎng)絡(luò)簡(jiǎn)介
安暢網(wǎng)絡(luò)是中國(guó)市場(chǎng)領(lǐng)先的下一代云托管服務(wù)商(Cloud MSP),安暢以客戶需求驅(qū)動(dòng),以云計(jì)算為底座,面向企業(yè)客戶提供云原生技術(shù)服務(wù)和數(shù)字化解決方案,幫助客戶上好云、管好云和用好云(為客戶構(gòu)建下一代云基礎(chǔ)設(shè)施和技術(shù)中臺(tái)、提供智能化全托管云運(yùn)維和管理服務(wù)、開(kāi)發(fā)現(xiàn)代化云原生應(yīng)用),致力于成為 IT 新生態(tài)和產(chǎn)業(yè)互聯(lián)網(wǎng)的連接器。
安暢網(wǎng)絡(luò)
2.SmartAnt 遷移平臺(tái)的云原生之路
一站式遷移平臺(tái) SmartAnt,是安暢網(wǎng)絡(luò)開(kāi)發(fā)的一款輕量級(jí)的遷移平臺(tái),能幫助用戶快速將業(yè)務(wù)遷移上云,擺脫繁瑣的遷移上云過(guò)程。
通過(guò)可視化界面,一鍵遷移,支持主機(jī)/數(shù)據(jù)庫(kù)/對(duì)象存儲(chǔ)等遷移類型,從根本上顛覆傳統(tǒng)云遷移所帶來(lái)的困擾。
一鍵式遷移流程,高效快捷,能讓任何人具備“云計(jì)算遷移工程師”的能力,幫助更多個(gè)人、企業(yè)用戶打通通向云端的“榮耀之路”,助力企業(yè)數(shù)字化轉(zhuǎn)型。
3.基礎(chǔ)架構(gòu)演進(jìn)
一路走來(lái),遷移工具從單模塊單體,到多模塊單體,再到微服務(wù)架構(gòu),業(yè)務(wù)架構(gòu)在順應(yīng)分布式的微服務(wù)技術(shù)潮流進(jìn)行演進(jìn)。
同時(shí),我們的基礎(chǔ)設(shè)施架構(gòu)也在不斷變更,從傳統(tǒng)的 IDC 物理機(jī)房服務(wù)器,到云服務(wù)器的虛擬化,利用公有云資源提供的負(fù)載均衡器及其他云產(chǎn)品完成高可用架構(gòu),再到以 Docker 和 Kubernetes 為基礎(chǔ)的云原生架構(gòu),我們?yōu)榱隧憫?yīng)市場(chǎng)的快速需求而不斷進(jìn)行技術(shù)革新與演進(jìn)。
4.遇到的問(wèn)題
我們?cè)谖⒎?wù)改造過(guò)程中并不是一帆風(fēng)順的:
如何管理 Kubernetes 聲明式的 API,
如何對(duì)微服務(wù)進(jìn)行快速部署與監(jiān)控運(yùn)維,
如何落地 Service Mesh(服務(wù)網(wǎng)絡(luò))等,
如何搭建 CI/CD 系統(tǒng),都給我們帶來(lái)了不小的挑戰(zhàn)。
在最初僅使用原生的 Docker + Kubernetes 環(huán)境時(shí),我們踩了不少坑,也走了不少?gòu)澛?,我們調(diào)研和嘗試了業(yè)界流行的各種技術(shù)方案,最終構(gòu)建了一套非常適合我們產(chǎn)品的解決方案。
本文將詳細(xì)解讀我們?nèi)绾谓鉀Q這一系列問(wèn)題,希望我們的經(jīng)驗(yàn)總結(jié)對(duì)大家有幫助。
5.如何搭建生產(chǎn)級(jí)別的集群
我們直接采用了開(kāi)源的 KubeSphere 容器平臺(tái),使用 KubeSphere Installer 一鍵部署了高可用架構(gòu)的 Kubernetes 集群,配合我們?cè)诠性坪退接性频呢?fù)載均衡器來(lái)實(shí)現(xiàn)高可用架構(gòu)。
并且,我們對(duì)私有部署的 Kubernetes 集群中 3 個(gè) master 節(jié)點(diǎn) api-server 的 6443 端口進(jìn)行監(jiān)聽(tīng),保證集群高可用。
搭建生產(chǎn)級(jí)別的集群
通過(guò) KubeSphere 內(nèi)置的集群狀態(tài)監(jiān)控面板,實(shí)現(xiàn)了對(duì)節(jié)點(diǎn)的資源用量進(jìn)行可視化管理。
即使在安裝后遇到節(jié)點(diǎn)資源不足,也能非常方便地通過(guò) Installer 按需新增 Node 節(jié)點(diǎn),免去了 Kubernetes 基礎(chǔ)設(shè)施部署的復(fù)雜性。
集群狀態(tài)監(jiān)控面板
存儲(chǔ)利用云盤(pán)自建 Ceph 集群,KubeSphere 提供豐富的存儲(chǔ)插件,快速方便地繼承到 Kubernetes 的 StorageClass中,為應(yīng)用提供持久化的數(shù)據(jù)存儲(chǔ),并且在界面也可以非常方便地對(duì) Ceph RBD 存儲(chǔ)卷進(jìn)行可視化管理。
Ceph RBD 存儲(chǔ)卷
6.如何對(duì)不同環(huán)境的權(quán)限進(jìn)行管控
由于 Kubesphere 對(duì)原生 Kubernetes 的 RBAC 基于企業(yè)空間層(Workspace)的權(quán)限管控設(shè)計(jì),以及細(xì)粒度的基于用戶與角色的權(quán)限分配。
我們直接通過(guò) KubeSphere 不同企業(yè)空間下的項(xiàng)目(Namespace)來(lái)進(jìn)行開(kāi)發(fā)、測(cè)試與生產(chǎn)環(huán)境的隔離。
如下圖,其中 Dev 環(huán)境為業(yè)務(wù)開(kāi)發(fā)環(huán)境,開(kāi)發(fā)人員授權(quán)可以登錄容器終端查看容器日志等,test 環(huán)境為測(cè)試人員開(kāi)放權(quán)限,方便測(cè)試人員進(jìn)行業(yè)務(wù)功能的測(cè)試,prod 環(huán)境為線上正式環(huán)境,只有集群管理員可以登錄維護(hù)。
對(duì)不同環(huán)境的權(quán)限進(jìn)行管控
7.服務(wù)怎么治理
針對(duì)南北流量,利用開(kāi)源 Kong 提供 API 網(wǎng)關(guān),基礎(chǔ)設(shè)施下沉到 Kubernetes 內(nèi),提供流量控制、黑白名單、認(rèn)證鑒權(quán)等功能。
在微服務(wù)間的東西流量管理上,我們使用了 KubeSphere 內(nèi)置的 Istio 來(lái)實(shí)現(xiàn)微服務(wù)治理,幫助我們對(duì) SmartAnt 平臺(tái)滿足了負(fù)載均衡、流量監(jiān)控、鏈路追蹤、熔斷降級(jí)等非常典型的應(yīng)用場(chǎng)景。
下圖為 SmartAnt 中將服務(wù)器主機(jī)遷移微服務(wù)的服務(wù)治理圖,KubeSphere 集成了 Istio 多樣化功能,使我們能夠非常高效地運(yùn)行分布式微服務(wù)架構(gòu),為微服務(wù)提供保護(hù)、連接和監(jiān)控微服務(wù)的統(tǒng)一方法,通過(guò)豐富的路由規(guī)則、重試、故障轉(zhuǎn)移和故障注入,可以對(duì)流量行為進(jìn)行細(xì)粒度控制。
在我們的 SmartAnt 平臺(tái)的實(shí)際應(yīng)用中,遷移偶爾存在網(wǎng)絡(luò)異常情況,該步驟可以設(shè)置重試,從而避免單詞調(diào)用異常導(dǎo)致整個(gè)遷移過(guò)程的失敗。
對(duì)于高并發(fā)的后端服務(wù),我們配置了服務(wù)降級(jí)及熔斷策略,保障核心調(diào)度可以穩(wěn)定正常的工作,期間配合 Kubernetes 的 HPA,動(dòng)態(tài)拉起多個(gè)應(yīng)用 Pod 來(lái)減輕請(qǐng)求壓力,我們基于 KubeSphere 設(shè)計(jì)的這一整套微服務(wù)治理方案使得業(yè)務(wù)本身的故障自愈能力大大提升,無(wú)需開(kāi)發(fā)人員介入。
流量拓?fù)?/p>
KubeSphere 基于 Jaeger 實(shí)現(xiàn)的 Tracing,使得我們能夠在不同微服務(wù)之間存在的很長(zhǎng)的請(qǐng)求調(diào)用鏈中,清楚地了解服務(wù)性能,以及快速定位排錯(cuò),方便了我們將更多的精力專注于 SmartAnt 遷移平臺(tái)的開(kāi)發(fā)和測(cè)試。
服務(wù)請(qǐng)求調(diào)用鏈追蹤
8.如何灰度上線
對(duì)于頻繁更新的應(yīng)用,灰度上線是必不可少的功能?;?KubeSphere 內(nèi)置的 Istio 提供的金絲雀發(fā)布的特性,我們可以非常方便地在 KubeSphere 控制臺(tái)通過(guò)拖拽的方式對(duì)不同版本的應(yīng)用組件的進(jìn)行灰度發(fā)布上線。
灰度上線
9.CI/CD 流水線如何落地
在 CI/CD 的方案實(shí)施上,我們勇于嘗鮮,在不同的項(xiàng)目環(huán)境中使用了不同 CI/CD 工具方案。
例如,目前針對(duì) Dev 環(huán)境,為了方便開(kāi)發(fā)人員進(jìn)行協(xié)同開(kāi)發(fā),我們直接使用 Gitalb CI,利用 GitOPS 理念,端到端的開(kāi)發(fā)自動(dòng)部署。
GitLab CI
而正式環(huán)境則使用 KubeSphere 內(nèi)置的 DevOps 流水線,天然繼承,無(wú)需多余擴(kuò)張即可實(shí)現(xiàn)應(yīng)用的快速發(fā)布上線。
如圖, KubeSphere 的 Devops 流水線,WEB 簡(jiǎn)單配置即可生成 Jenkinsfile,快捷方便。另外,我們有一部分應(yīng)用也使用了 Argo CD ,在未來(lái)也計(jì)劃嘗試 Tekton 等。
KubeSphere 流水線
CI/CD 流水線
10.如何落地監(jiān)控與告警
集群維度的監(jiān)控我們使用了 KubeSphere 內(nèi)置的監(jiān)控,希望 KubeSphere 在后續(xù)版本可以提供更多告警方式。
我們也自研了一套監(jiān)控告警系統(tǒng),實(shí)現(xiàn)了對(duì) Kubernetes 集群、 Node、事件(Events)、以及業(yè)務(wù)本身的監(jiān)控,通過(guò)短信、微信、釘釘和郵件的方式發(fā)送告警通知給運(yùn)維人員。
監(jiān)控與告警
11.日志如何查詢與管理
KubeSphere 也提供了開(kāi)箱即用的解決方案 FluentBit Operator,在集群所有節(jié)點(diǎn)以 DaemonSet 運(yùn)行,并統(tǒng)一部署配置了 Fluent Bit。
我們的遷移平臺(tái)在容器化的時(shí)候就一些考慮到后期的日志繼承方式,為適配多種類型的日志,我們將日志分為兩個(gè)地方輸出,一份輸出到 stdout,一份以文件形式持久化到 logs 目錄,萬(wàn)一需要 filebeat 方式繼承,那么無(wú)需后期對(duì)應(yīng)用做其他修改,可借助 KubeSphere 的日志收集,方便快捷地在平臺(tái)上查看日志,也可以將日志發(fā)送到集群外的 ES/Kafka 等接收者中,對(duì)日志進(jìn)行持久化保存,以供后期分析處理。
同時(shí),KubeSphere 提供了一鍵日志索引與定位的特性,利用該特性,我們可以從日志控制臺(tái)搜索關(guān)鍵字,通過(guò)日志輸出信息發(fā)現(xiàn)問(wèn)題后,一鍵下鉆到出現(xiàn)異常的容器,或項(xiàng)目的詳情頁(yè),快速定位容器異常問(wèn)題。
日志查詢
12.KubeSphere 排錯(cuò)實(shí)戰(zhàn)三連載
當(dāng)然在真實(shí)的微服務(wù)改造及應(yīng)用中困難也不少,之前我也精心整理了 KubeSphere 實(shí)戰(zhàn)排查三連載,希望可以幫助到用 KubeSphere 的用戶朋友。
《Kubesphere排查實(shí)戰(zhàn)一》
《Kubesphere排查實(shí)戰(zhàn)二》
《Kubesphere排查實(shí)戰(zhàn)三》
13.擁抱開(kāi)源,共話云原生
KubeSphere 幫助我們將打造了 SmartAnt 云原生遷移平臺(tái),我們能夠把更多的精力放在遷移平臺(tái)的邏輯業(yè)務(wù)開(kāi)發(fā)。
同時(shí),KubeSphere 提供從基礎(chǔ)設(shè)施高可用部署、CI/CD、服務(wù)治理、權(quán)限管控、監(jiān)控日志告警等一整套完善的云原生解決方案,并且 KubeSphere 是完全開(kāi)源的,社區(qū)也非?;钴S,在這里可以遇到志同道合的友人,共同探討適合自己的業(yè)務(wù)轉(zhuǎn)型的云原生之路。