基於k8s的Paas平臺概要設計

2021-02-23 K8S中文社區

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

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

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

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

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

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

應用上線後,通常需要對外提供訪問,在k8s中因為網絡的原因,通常需要通過ingress來進行網絡內部service的暴露,則要給用戶提供一個可以將服務和負載均衡自動關聯的組件負載均衡組件的選擇通常有兩種:老牌的負載均衡組件(Nginx/Kong/Haproxy)和微服務服務網關(Traefik)等,選擇的核心通常是我們要不要改造,比如我們想在ingress上做一些基礎驗證、熔斷、限流等實現則就需要進行二次開發,則就需要選擇合適技術棧的ingress

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

相關焦點

  • 如何選擇基於 Kubernetes 的 PaaS?
    一開始時這個bug很小,他只是在勸說團隊採用新的技術,或者在項目裡採用一個新的模塊,但在不知不覺之間,到處都是奇怪的項目和天花亂墜的文檔,聲稱只需要三步就能解決你的業務問題!然而,要想真的解決問題,似乎還需要花費更多的工夫。我們都遇到過這種情況,而去年的類似情況之一就是一個名為Kubernetes的項目。有些公司和團隊已經被Kubernetes淹沒,有些公司還沒有入坑。
  • 在Kubernetes上部署一個簡單的、類PaaS的平臺,原來這麼容易!
    看了Knative之後,我發現我可以運行一個跟Google自家用的PaaS一樣的平臺。考慮到k8s就是Google做的,那麼Knative項目肯定是完美的!不過安裝要比想像的難了一點。似乎沒有太簡單的方法來安裝,而無法簡單地嘗試,在未來可能是一個風險。也許只有我這樣想,也許我應該更深入地研究一下Knative,不過由於這點原因,我把目光轉向了下一個候選。安裝非常容易!很快我就能運行這個平臺了。
  • IaaS、PaaS、SaaS、FaaS等概念的理解
    IT行業經常喜歡造名詞,在雲計算的浪潮下,湧現了一些我們經常看到的概念,如Iaas、paas、saas、faas、baas,這些代表什麼意思?
  • DevOps研習社:PaaS平臺集成解決方案——F5實現K8S管理平面的高可用和安全
    下面講介紹通過F5的LTM和AWAF模塊實現k8s集群master節點的高可用和安全防護。            state up        }    }    monitor gateway_icmp}▲可上下(手指貼近右側黑邊邊緣處)、左右滑動查看全部內容VS層面除了配置了基本的負載功能外還基於安全特性增加了AWAF針對API的防護策略以及針對master集群的DDos保護。
  • 基於k8s手動部署rabbitmq集群
    RabbitMQ伺服器是用Erlang語言編寫的,而集群和故障轉移是構建在開放電信平臺框架上的。AMQP:Advanced Message Queue,高級消息隊列協議。它是應用層協議的一個開放標準,為面向消息的中間件設計,基於此協議的客戶端與消息中間件可傳遞消息,並不受產品、開發語言燈條件的限制AMQP具有如下的特性:可靠性Reliablity:使用了一些機制來保證可靠性,比如持久化、傳輸確認、發布確認靈活的路由Flexible Routing:在消息進入隊列之前,通過Exchange來路由消息。
  • 基於EFK實現對k8s集群日誌的採集
    環境說明iphostname系統版本內核版本節點屬性172.16.99.139k8s-m1CentOS 7.83.10.0-1127.19.11.18.0master172.16.99.140k8s-m2CentOS 7.83.10.0-1127.19.11.18.0master172.16.99.141k8s-m3CentOS 7.83.10.0-1127.19.11.18.0master172.16.18.179k8s-n1CentOS
  • 基於k8s、docker、jenkins、springboot構建docker服務.
    本文介紹基於Jenkins + github  + k8s + springboot構建docker
  • 如何基於k8s快速搭建TeamCity(YAML分享)
    最近有朋友基於之前的博客《Docker最全教程之使用TeamCity來完成內部CI、CD流程(十七)》搭建TeamCity時出現了一些問題,由於平常比較忙
  • 日誌可視化方案及Lens-K8S桌面管理平臺IDE介紹
    上家公司AllIN k8s的時候,我們遇到一個日誌可視化的問題。大致情況如下:非容器化時代:開發環境開通 Developer 只讀或普通用戶權限,登錄主機查看日誌。或 ELK日誌檢索平臺查看。主要能為大家解決如下場景的問題:不登錄集群主機節點查看集群負載: cpu,memory,pods,deployment,svc,nginx,event,log等;不登錄集群主機節點查看伺服器日誌「對想收伺服器登錄權限又沒能力開發運管平臺的公司幫助非常大」;「不用登錄k8s集群,在本地通過類似IDE的使用體驗,完成對k8s的基礎功能管理
  • k8s之informer架構
    在k8s的架構設計中,在各個系統模塊之間的通信都是基於http的方式通信,在系統中,如何保持模塊之間的通信可靠性,魯棒性,循序性。
  • k8s+jenkins+SonarQube+harbor構建DevOps自動化容器雲平臺
    文檔跟《kubernetes/k8s+SpringCloud全棧技術:基於世界500強的企業實戰》
  • 技術分享|K8S平臺之Headless Service介紹
    在介紹Headless Services之前,先介紹下k8s中的Service的概念。Service是k8s中非常重要的組成單元,其作用是作為一個代理把pod中的服務發布出去。每個Service在被創建時,會被分配一個唯一的IP位址(也被稱為ClusterIP)。
  • IaaS,PaaS,SaaS 的區別
    IaaS:基礎設施服務,Infrastructure-as-a-servicePaaS:平臺服務,Platform-as-a-serviceSaaS:軟體服務,Software-as-a-service
  • k8s網絡開發丨k8s與OpenStack網絡如何打通?
    獲取最in雲端資訊和海量技術乾貨喜歡看動漫的IT男還是火影迷、海賊迷、死神迷、妖尾迷、全職獵人迷、龍珠迷、網球王子迷~左手一個OpenStack,右手一個K8s~有OpenStack, 又有Kubernetes; 網絡想做統一管理,k8s
  • K8s火了!
    而 Kubernetes 作為基於容器編排領域的王者,具備擴展集群、滾動升級回滾、彈性伸縮、自動治癒、服務發現等多種特性能力,表現十分出色,備受雲端業務方的關注。容器編排技術仍處於快速增長期,搞懂 k8s ,跟上新的生產技術標準,十分有必要。但另一方面, k8s 的開發工具繁多,組件的源碼晦澀,業務裡涉及的技術細節也十分繁雜。
  • 基於首雲K8S快速搭建EFK
    1.首雲平臺創建集群,通過以下界面創建集群,整個集群創建時間在20-30分鐘左右。
  • 不懂技術也能看明白的k8s
    k8s,全稱Kubernetes, k8s 這個縮寫是因為 k 和 s 之間有8個字符,官方是這樣解釋這套技術體系的,是一個可移植的、可擴展的開源平臺,用於管理容器化的工作負載和服務,可促進聲明式配置和自動化(看著很懵逼,剛開始我也沒理解)。