今天就跟大家聊聊有關(guān)如何分析基于k8s的容器云Paas平臺(tái)概要設(shè)計(jì),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
專注于為中小企業(yè)提供網(wǎng)站建設(shè)、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)啟東免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千多家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
基于K8s的容器云Paas平臺(tái)應(yīng)該是每個(gè)使用k8s的公司必須要做的一件事,今天我們嘗試以應(yīng)用為中心,采用搭積木的方式完成一個(gè)最小版本的容器云Paas平臺(tái)的設(shè)計(jì),Let's Go
我們期望是實(shí)現(xiàn)一個(gè)盡可能自助的服務(wù),所以里面先不考慮一些諸如審批,之類的操作,在此部分我們要完成應(yīng)用從打包到上線的關(guān)鍵流程
研發(fā)編寫好代碼,此時(shí)就要進(jìn)行代碼的生產(chǎn)環(huán)境部署,而部署的最小單元通常就是Docker鏡像,那么我們就要實(shí)現(xiàn)一個(gè)自助的鏡像打包服務(wù),來(lái)實(shí)現(xiàn)從源代碼到docker鏡像的交付
研發(fā)將代碼提交到GIt代碼倉(cāng)庫(kù)后,可以讓代碼倉(cāng)庫(kù)管理員設(shè)定一個(gè)回調(diào)鉤子,通知我們的部署流水線,按照部署流水線按照之前設(shè)定的步驟來(lái)進(jìn)行目標(biāo)鏡像的構(gòu)建,并將構(gòu)建的鏡像發(fā)布到我們的鏡像倉(cāng)庫(kù)中
其中部署流水線我們可以直接使用老牌的Jenkins,也可以選擇Tekton這種云原生的部署工具
如果僅僅從應(yīng)用本身來(lái)說(shuō),除了基礎(chǔ)的運(yùn)行環(huán)境和代碼,通常還會(huì)依賴于一些基礎(chǔ)服務(wù)(不考慮應(yīng)用層的依賴), 比如MySQL、redis、kafka等基礎(chǔ)服務(wù),但是諸如這種服務(wù)通??赡懿⒉辉趉8s中(opeartor除外),則此時(shí)我們就需要一種自助的集成方式,這里我們通過(guò)service catalog 進(jìn)行集成,用戶只需要進(jìn)行申請(qǐng),則就可以自助獲取對(duì)應(yīng)的基礎(chǔ)服務(wù)資源
應(yīng)用上線后,我們?nèi)绾潍@取到對(duì)應(yīng)的健康狀態(tài)呢?通常就需要日志和監(jiān)控來(lái)進(jìn)行輔助,我們希望一種方式可以自助的進(jìn)行服務(wù)的日志收集、監(jiān)控項(xiàng)的收集,此時(shí)我們就需要一種與監(jiān)控和日志系統(tǒng)集成的方式, 還會(huì)涉及到各自監(jiān)控告警,針對(duì)日志我們使用EFK來(lái)進(jìn)行日志的收集,監(jiān)控則采用Prometheus完成,此外除了應(yīng)用的基礎(chǔ)資源監(jiān)控,可以讓業(yè)務(wù)也進(jìn)行對(duì)應(yīng)業(yè)務(wù)指標(biāo)的暴露,這樣我們就可以實(shí)現(xiàn)業(yè)務(wù)層的指標(biāo)級(jí)別的監(jiān)控
應(yīng)用上線后,通常需要對(duì)外提供訪問(wèn),在k8s中因?yàn)榫W(wǎng)絡(luò)的原因,通常需要通過(guò)ingress來(lái)進(jìn)行網(wǎng)絡(luò)內(nèi)部service的暴露,則要給用戶提供一個(gè)可以將服務(wù)和負(fù)載均衡自動(dòng)關(guān)聯(lián)的組件負(fù)載均衡組件的選擇通常有兩種:老牌的負(fù)載均衡組件(Nginx/Kong/Haproxy)和微服務(wù)服務(wù)網(wǎng)關(guān)(Traefik)等,選擇的核心通常是我們要不要改造,比如我們想在ingress上做一些基礎(chǔ)驗(yàn)證、熔斷、限流等實(shí)現(xiàn)則就需要進(jìn)行二次開(kāi)發(fā),則就需要選擇合適技術(shù)棧的ingress
這些Ingress通常我們需要一些專有節(jié)點(diǎn),即只負(fù)責(zé)ingress的運(yùn)行,即通常說(shuō)的Proxy節(jié)點(diǎn),我們需要結(jié)合K8s中的污點(diǎn)來(lái)進(jìn)行一些控制,只允許ingress容器調(diào)度到這些節(jié)點(diǎn)上
大多數(shù)應(yīng)用都會(huì)隨著產(chǎn)品的迭代或者bug修復(fù),進(jìn)行代碼的迭代,而在k8s中則通常就是我們說(shuō)的鏡像更新,此過(guò)程可以借助k8s的deployment來(lái)進(jìn)行自動(dòng)完成
在應(yīng)用更新的時(shí)候,通常需要進(jìn)行灰度測(cè)試,即只允許部分用戶進(jìn)行訪問(wèn),如果出現(xiàn)異常,則就立刻回滾,如果正常就滾動(dòng)更新整個(gè)應(yīng)用集群,而在k8s中實(shí)現(xiàn)該種方法主要包是通過(guò)Deployment來(lái)實(shí)現(xiàn),我們這里主要是按照用戶灰度的比例通過(guò)創(chuàng)建一個(gè)新的Deployment,如果成功就繼續(xù)更新舊的Deployment來(lái)實(shí)現(xiàn)
針對(duì)下線的應(yīng)用,通常我們要進(jìn)行對(duì)應(yīng)的資源的釋放操作,這里可能需要一個(gè)gc模塊,負(fù)責(zé)應(yīng)用的各種資源的清理工作
至此我們基于k8s和應(yīng)用的一些基本需求,完成了基礎(chǔ)版本的應(yīng)用從代碼打包、上線監(jiān)控、部署更新、可觀測(cè)性(日志監(jiān)控)等基于云原生的應(yīng)用全生命周期管理
在本節(jié)中我們主要關(guān)注基于K8s平面完成一些Paas平臺(tái)相關(guān)的功能的實(shí)現(xiàn),主要包含:多租戶管理、彈性伸縮、容量規(guī)劃、配置管理、共享存儲(chǔ)、集群管理、應(yīng)用市場(chǎng)等功能
多租戶是基于paas平臺(tái)的一種重要機(jī)制,多租戶的本質(zhì)是實(shí)現(xiàn)資源的隔離,資源的隔離通常又包含物理隔離和軟件隔離,所謂物理隔離即在物理實(shí)體上(比如服務(wù)器)就進(jìn)行隔離,而軟件隔離則是指通過(guò)準(zhǔn)入控制來(lái)進(jìn)行資源的訪問(wèn)隔離,考慮大多數(shù)的公司內(nèi)部通常不會(huì)對(duì)k8s進(jìn)行物理隔離,所以我們這里可以直接使用k8s中的namespace來(lái)做軟件幾倍的隔離
彈性伸縮按需計(jì)費(fèi)是Paas平臺(tái)的典型特點(diǎn),而K8s中自帶了HPA(橫向自動(dòng)伸縮),并且通過(guò)autoscaler實(shí)現(xiàn)了VPA(縱向自動(dòng)伸縮)以及Cluster自動(dòng)伸縮, 依靠這些控制器我們可以很容易的為用戶提供彈性伸縮的功能(一般還是橫向的多一些)
容量規(guī)劃主要的目標(biāo)是通過(guò)限定各業(yè)務(wù)線的資源配額實(shí)現(xiàn)資源隔離,同時(shí)通過(guò)容量計(jì)算可以進(jìn)行資源計(jì)費(fèi),并且進(jìn)行未來(lái)容量的規(guī)劃決策資源采購(gòu),進(jìn)行企業(yè)的成本核算與控制, 此部分主要是依賴于k8s的ResourceQuota來(lái)實(shí)現(xiàn)配額功能,通過(guò)監(jiān)控?cái)?shù)據(jù)來(lái)做成本核算
在應(yīng)用開(kāi)發(fā)的過(guò)程中通常會(huì)使用一些配置信息,比如基礎(chǔ)的日志、緩存、數(shù)據(jù)庫(kù)等配置信息,在以前的環(huán)境中要么是基于env文件,要么是基于配置中心來(lái)進(jìn)行管理,而在k8s中文名可以通過(guò)configMap和Secret兩種資源來(lái)實(shí)現(xiàn)基礎(chǔ)的配置管理,即將配置數(shù)據(jù)與鏡像分離,實(shí)現(xiàn)按環(huán)境進(jìn)行自動(dòng)的配置加載
在k8s中共享存儲(chǔ)主要是依賴于PV/PVC來(lái)實(shí)現(xiàn),這部分由于每個(gè)公司的基礎(chǔ)設(shè)施差異相對(duì)較大,通常需要根據(jù)公司現(xiàn)有的技術(shù)能力來(lái)進(jìn)行調(diào)整,具體的實(shí)現(xiàn)則依賴于CSI相關(guān)的實(shí)現(xiàn),這里不再進(jìn)行說(shuō)明
在公司內(nèi)部的環(huán)境中有時(shí)候需要進(jìn)行容災(zāi)備份等的考慮,則就需要進(jìn)行多機(jī)房部署,那我們的PAAS的平臺(tái)也需要擁有這種多集群管理的能力, 其實(shí)也適用于生產(chǎn)、測(cè)試等多環(huán)境集群的管理,集群的管理主要是為了解決平臺(tái)多環(huán)境部署的問(wèn)題,通過(guò)一套平臺(tái)來(lái)進(jìn)行整個(gè)集團(tuán)所有集群的管理
應(yīng)用市場(chǎng)主要是指的針對(duì)一些諸如redis、etcd、kafka中間件等應(yīng)用除了之前說(shuō)的服務(wù)目錄的集成方式之外,我們還允許用戶通過(guò)opeartor來(lái)創(chuàng)建一些基礎(chǔ)服務(wù),從而推動(dòng)基礎(chǔ)設(shè)施的容器化,這部分通常需要根據(jù)當(dāng)前的環(huán)境還有開(kāi)源的opeartor來(lái)進(jìn)行微調(diào),從而適配公司的內(nèi)部環(huán)境
在很多公司通常都會(huì)有一些企業(yè)內(nèi)部的用戶中心服務(wù),可以集成該部分來(lái)進(jìn)行容器云平臺(tái)的用戶認(rèn)證甚至一些權(quán)限控制,避免重復(fù)造輪子
除以上的業(yè)務(wù)功能外,通常我們還要進(jìn)行基礎(chǔ)的功能,比如操作審計(jì)、權(quán)限控制、安全管控等基礎(chǔ)功能,至此我們已經(jīng)擁有了一個(gè)基礎(chǔ)可用的基于k8s的云原生Paas平臺(tái)
通過(guò)上面的的基礎(chǔ)建設(shè),我們通常可以得到一個(gè)以應(yīng)用為中的基于K8s的容器PaaS平臺(tái),并且從各種功能上來(lái)看,基于k8s的各種資源我們只需要很少的開(kāi)發(fā)工作,就可以完成整個(gè)Paas平臺(tái)的建設(shè),從下一節(jié)我們開(kāi)始進(jìn)行一些關(guān)鍵部分的開(kāi)發(fā)工作,并進(jìn)行一些k8s operator的開(kāi)發(fā), Let's Go。
看完上述內(nèi)容,你們對(duì)如何分析基于k8s的容器云Paas平臺(tái)概要設(shè)計(jì)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。