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