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

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

1. 基礎功能

咱們指望是實現一個儘量自助的服務,因此裏面先不考慮一些諸如審批,之類的操做,在此部分咱們要完成應用從打包到上線的關鍵流程redis

1.1 鏡像打包

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

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

其中部署流水線咱們能夠直接使用老牌的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

相關文章
相關標籤/搜索