基於k8s的容器雲Paas平臺概要設計

基於K8s的容器雲Paas平臺應該是每個使用k8s的公司必須要做的一件事,今天我們嘗試以應用爲中心,採用搭積木的方式完成一個最小版本的容器雲Paas平臺的設計,Let's Go

1. 基礎功能

我們期望是實現一個儘可能自助的服務,所以裏面先不考慮一些諸如審批,之類的操作,在此部分我們要完成應用從打包到上線的關鍵流程

1.1 鏡像打包

研發編寫好代碼,此時就要進行代碼的生產環境部署,而部署的最小單元通常就是Docker鏡像,那麼我們就要實現一個自助的鏡像打包服務,來實現從源代碼到docker鏡像的交付 image.png

研發將代碼提交到GIt代碼倉庫後,可以讓代碼倉庫管理員設定一個回調鉤子,通知我們的部署流水線,按照部署流水線按照之前設定的步驟來進行目標鏡像的構建,並將構建的鏡像發佈到我們的鏡像倉庫中

其中部署流水線我們可以直接使用老牌的Jenkins,也可以選擇Tekton這種雲原生的部署工具

1.2 基礎服務

image.png

如果僅僅從應用本身來說,除了基礎的運行環境和代碼,通常還會依賴於一些基礎服務(不考慮應用層的依賴), 比如mysql、redis、kafka等基礎服務,但是諸如這種服務通常可能並不在k8s中(opeartor除外),則此時我們就需要一種自助的集成方式,這裏我們通過service catalog 進行集成,用戶只需要進行申請,則就可以自助獲取對應的基礎服務資源

1.3 日誌監控

應用上線後,我們如何獲取到對應的健康狀態呢?通常就需要日誌和監控來進行輔助,我們希望一種方式可以自助的進行服務的日誌收集、監控項的收集,此時我們就需要一種與監控和日誌系統集成的方式, 還會涉及到各自監控告警,針對日誌我們使用EFK來進行日誌的收集,監控則採用Prometheus完成,此外除了應用的基礎資源監控,可以讓業務也進行對應業務指標的暴露,這樣我們就可以實現業務層的指標級別的監控

1.4 負載均衡

應用上線後,通常需要對外提供訪問,在k8s中因爲網絡的原因,通常需要通過ingress來進行網絡內部service的暴露,則要給用戶提供一個可以將服務和負載均衡自動關聯的組件

image.png

負載均衡組件的選擇通常有兩種:老牌的負載均衡組件(Nginx/Kong/Haproxy)和微服務服務網關(Traefik)等,選擇的核心通常是我們要不要改造,比如我們想在ingress上做一些基礎驗證、熔斷、限流等實現則就需要進行二次開發,則就需要選擇合適技術棧的ingress

這些Ingress通常我們需要一些專有節點,即只負責ingress的運行,即通常說的Proxy節點,我們需要結合K8s中的污點來進行一些控制,只允許ingress容器調度到這些節點上

1.5 部署更新

大多數應用都會隨着產品的迭代或者bug修復,進行代碼的迭代,而在k8s中則通常就是我們說的鏡像更新,此過程可以藉助k8s的deployment來進行自動完成

在應用更新的時候,通常需要進行灰度測試,即只允許部分用戶進行訪問,如果出現異常,則就立刻回滾,如果正常就滾動更新整個應用集羣,而在k8s中實現該種方法主要包是通過Deployment來實現,我們這裏主要是按照用戶灰度的比例通過創建一個新的Deployment,如果成功就繼續更新舊的Deployment來實現

1.6 應用下線

針對下線的應用,通常我們要進行對應的資源的釋放操作,這裏可能需要一個gc模塊,負責應用的各種資源的清理工作

至此我們基於k8s和應用的一些基本需求,完成了基礎版本的應用從代碼打包、上線監控、部署更新、可觀測性(日誌監控)等基於雲原生的應用全生命週期管理

2.基於K8s的Paas平臺功能實現

在本節中我們主要關注基於K8s平面完成一些Paas平臺相關的功能的實現,主要包含:多租戶管理、彈性伸縮、容量規劃、配置管理、共享存儲、集羣管理、應用市場等功能

2.1 多租戶隔離

image.png

多租戶是基於paas平臺的一種重要機制,多租戶的本質是實現資源的隔離,資源的隔離通常又包含物理隔離和軟件隔離,所謂物理隔離即在物理實體上(比如服務器)就進行隔離,而軟件隔離則是指通過准入控制來進行資源的訪問隔離,考慮大多數的公司內部通常不會對k8s進行物理隔離,所以我們這裏可以直接使用k8s中的namespace來做軟件幾倍的隔離

2.2 彈性伸縮

image.png

彈性伸縮按需計費是Paas平臺的典型特點,而K8s中自帶了HPA(橫向自動伸縮),並且通過autoscaler實現了VPA(縱向自動伸縮)以及Cluster自動伸縮, 依靠這些控制器我們可以很容易的爲用戶提供彈性伸縮的功能(一般還是橫向的多一些)

2.3 容量規劃

容量規劃主要的目標是通過限定各業務線的資源配額實現資源隔離,同時通過容量計算可以進行資源計費,並且進行未來容量的規劃決策資源採購,進行企業的成本覈算與控制, 此部分主要是依賴於k8s的ResourceQuota來實現配額功能,通過監控數據來做成本覈算

2.4 配置管理

image.png

在應用開發的過程中通常會使用一些配置信息,比如基礎的日誌、緩存、數據庫等配置信息,在以前的環境中要麼是基於env文件,要麼是基於配置中心來進行管理,而在k8s中文名可以通過configMap和Secret兩種資源來實現基礎的配置管理,即將配置數據與鏡像分離,實現按環境進行自動的配置加載

2.5 共享存儲

在k8s中共享存儲主要是依賴於PV/PVC來實現,這部分由於每個公司的基礎設施差異相對較大,通常需要根據公司現有的技術能力來進行調整,具體的實現則依賴於CSI相關的實現,這裏不再進行說明

2.6 集羣管理

在公司內部的環境中有時候需要進行容災備份等的考慮,則就需要進行多機房部署,那我們的PAAS的平臺也需要擁有這種多集羣管理的能力, 其實也適用於生產、測試等多環境集羣的管理,集羣的管理主要是爲了解決平臺多環境部署的問題,通過一套平臺來進行整個集團所有集羣的管理

2.7 應用市場

image.png

應用市場主要是指的針對一些諸如redis、etcd、kafka中間件等應用除了之前說的服務目錄的集成方式之外,我們還允許用戶通過opeartor來創建一些基礎服務,從而推動基礎設施的容器化,這部分通常需要根據當前的環境還有開源的opeartor來進行微調,從而適配公司的內部環境

2.8 用戶中心

在很多公司通常都會有一些企業內部的用戶中心服務,可以集成該部分來進行容器雲平臺的用戶認證甚至一些權限控制,避免重複造輪子

2.9 基礎功能

除以上的業務功能外,通常我們還要進行基礎的功能,比如操作審計、權限控制、安全管控等基礎功能,至此我們已經擁有了一個基礎可用的基於k8s的雲原生Paas平臺

3. 容器Paas平臺總結

image.png

通過上面的的基礎建設,我們通常可以得到一個以應用爲中的基於K8s的容器PaaS平臺,並且從各種功能上來看,基於k8s的各種資源我們只需要很少的開發工作,就可以完成整個Paas平臺的建設,從下一節我們開始進行一些關鍵部分的開發工作,並進行一些k8s operator的開發, Let's Go。。

kubernetes學習筆記地址: https://www.yuque.com/baxiaoshi/tyado3

微信號:baxiaoshi2020 關注公告號閱讀更多源碼分析文章 圖解源碼 本文由博客一文多發平臺 OpenWrite 發佈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章