雲原生應用 Kubernetes 監控與彈性實踐

前言  

雲原生應用的設計理念已經被愈來愈多的開發者接受與承認,而Kubernetes作爲雲原生的標準接口實現,已經成爲了整個stack的中心,雲服務的能力能夠經過Cloud Provider、CRD Controller、Operator等等的方式從Kubernetes的標準接口向業務層透出。開發者能夠基於Kubernetes來構建本身的雲原生應用與平臺,Kubernetes成爲了構建平臺的平臺。今天咱們會向你們介紹一個雲原生應用該如何在Kubernetes中無縫集成監控和彈性能力。api

本文整理自由阿里雲容器平臺技術專家 劉中巍(莫源)在 KubeCon 分享的《Cloud Native Application monitoring and autoscaling in kubernetes》演講。獲取 KubeCon 所有阿里演講PPT,關注阿里巴巴雲原生公衆號,微信菜單欄點擊 PPT下的「獲取PPT」微信

阿里雲容器服務Kubernetes的監控總覽

雲服務集成  

阿里雲容器服務Kubernetes目前已經和四款監控雲服務進行了打通,分別是SLS(日誌服務)、ARMS(應用性能監控)、AHAS(架構感知監控服務)、Cloud Monitor(雲監控)。網絡

SLS主要負責日誌的採集、分析。在阿里雲容器服務Kubernetes中,SLS能夠採集三種不一樣類型的日誌架構

  • APIServer等核心組件的日誌
  • Service Mesh/Ingress等接入層的日誌
  • 應用的標準日誌  

除了採集日誌的標準鏈路外,SLS還提供了上層的日誌分析能力,默認提供了基於APIServer的審計分析能力、接入層的可觀測性展示、應用層的日誌分析。在阿里雲容器服務Kubernetes中,日誌組件已經默認安裝,開發者只須要經過在集羣建立時勾選便可。ide

ARMS主要負責採集、分析、展示應用的性能指標。目前主要支持Java與PHP兩種語言的集成,能夠採集虛擬機(JVM)層的指標,例如GC的次數、應用的慢SQL、調用棧等等。對於後期性能調優能夠起到很是重要的做用。微服務

AHAS是架構感知監控,一般在Kubernetes集羣中負載的類型大部分爲微服務,微服務的調用拓撲也會比較複雜,所以當集羣的網絡鏈路出現問題時,如何快速定位問題、發現問題、診斷問題則成爲了最大的難題。AHAS經過網絡的流量和走向,將集羣的拓撲進行展示,提供更高層次的問題診斷方式。性能

開源方案集成

開源方案的兼容和集成也是阿里雲容器服務Kubernetes監控能力的一部分。主要包含以下兩個部分:阿里雲

Kubernetes內置監控組件的加強與集成  

在kubernetes社區中,heapster/metrics-server是內置的監控方案,並且例如Dashboard、HPA等核心組件會依賴於這些內置監控能力提供的metrics。因爲Kubernetes生態中組件的發佈週期和Kubernetes的release不必定保證完整的同步,這就形成了部分監控能力的消費者在Kubernetes中存在監控問題。所以阿里雲就這個問題作了metrics-server的加強,實現版本的兼容。此外針對節點的診斷能力,阿里雲容器服務加強了NPD的覆蓋場景,支持了FD文件句柄的監測、NTP時間同步的校驗、出入網能力的校驗等等,並開源了eventer,支持離線Kubernetes的事件數據到SLS、kafka以及釘釘,實現ChatOps。spa

Prometheus生態的加強與集成   

Promethes做爲Kubernetes生態中三方監控的標準,阿里雲容器服務也提供了集成的Chart供開發者一鍵集成。此外,咱們還在以下三個層次做了加強:設計

  • 存儲、性能加強:支持了產品級的存儲能力支持(TSDB、InfluxDB),提供更持久、更高效的監控存儲與查詢。
  • 採集指標的加強:修復了部分因爲Prometheus自身設計缺欠形成的監控不許的問題,提供了GPU單卡、多卡、共享分片的exporter。
  • 提供上層可觀測性的加強:支持場景化的CRD監控指標集成,例如argo、spark、tensorflow等雲原生的監控能力,支持多租可觀測性。

阿里雲容器服務Kubernetes的彈性總覽  

阿里雲容器服務Kubernetes主要包含以下兩大類彈性組件:調度層彈性組件與資源層彈性組件。

調度層彈性組件  

調度層彈性組件是指全部的彈性動做都是和Pod相關的,並不關心具體的資源狀況。

  • HPA

HPA是Pod水平伸縮的組件,除了社區支持的Resource Metrics和Custom Metrics,阿里雲容器服務Kubernetes還提供了external-metrics-adapter,支持雲服務的指標做爲彈性伸縮的判斷條件。目前已經支持例如:Ingress的QPS、RT,ARMS中應用的GC次數、慢SQL次數等等多個產品不一樣維度的監控指標。

  • VPA 

VPA是Pod的縱向伸縮的組件,主要面向有狀態服務的擴容和升級場景。   

  • cronHPA 

cronHPA是定時伸縮組件,主要面向的是週期性負載,經過資源畫像能夠預測有規律的負載週期,並經過週期性伸縮,實現資源成本的節約。

  • Resizer

Resizer是集羣核心組件的伸縮控制器,能夠根據集羣的CPU核數、節點的個數,實現線性和梯度兩種不一樣的伸縮,目前主要面對的場景是核心組件的伸縮,例如:CoreDNS。

資源層彈性組件

資源層彈性組件是指彈性的操做都是針對於Pod和具體資源關係的。

  • Cluster-Autoscaler 

Cluster-Autoscaler是目前比較成熟的節點伸縮組件,主要面向的場景是當Pod資源不足時,進行節點的伸縮,並將沒法調度的Pod調度到新彈出的節點上。

  • virtual-kubelet-autoscaler 

virtual-kubelet-autoscaler是阿里雲容器服務Kubernetes開源的組件,和Cluster-Autoscaler的原理相似,當Pod因爲資源問題沒法調度時,此時彈出的不是節點,而是將Pod綁定到虛擬節點上,並經過ECI的方式將Pod進行啓動。

Demo Show Case 

最後給你們進行一個簡單的Demo演示:應用主體是apiservice,apiservice會通sub-apiservice調用database,接入層經過ingress進行管理。咱們經過PTS模擬上層產生的流量,並經過SLS採集接入層的日誌,ARMS採集應用的性能指標,並經過alibaba-cloud-metrics-adapster暴露external metrics觸發HPA從新計算工做負載的副本,當伸縮的Pod佔滿集羣資源時,觸發virtual-kubelet-autoscaler生成ECI承載超過集羣容量規劃的負載。

總結  

在阿里雲容器服務Kubernetes上使用監控和彈性的能力是很是簡單的,開發者只需一鍵安裝相應的組件Chart便可完成接入,經過多維度的監控、彈性能力,可讓雲原生應用在最低的成本下得到更高的穩定性和魯棒性。



本文做者:jessie筱姜

閱讀原文

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索