云原生应用 Kubernetes 监控与弹性实践
前言??
云原生應用的設(shè)計理念已經(jīng)被越來越多的開發(fā)者接受與認可,而Kubernetes做為云原生的標準接口實現(xiàn),已經(jīng)成為了整個stack的中心,云服務的能力可以通過Cloud Provider、CRD Controller、Operator等等的方式從Kubernetes的標準接口向業(yè)務層透出。開發(fā)者可以基于Kubernetes來構(gòu)建自己的云原生應用與平臺,Kubernetes成為了構(gòu)建平臺的平臺。今天我們會向大家介紹一個云原生應用該如何在Kubernetes中無縫集成監(jiān)控和彈性能力。
本文整理自由阿里云容器平臺技術(shù)專家 劉中巍(莫源)在 KubeCon 分享的《Cloud Native Application monitoring and autoscaling in kubernetes》演講。獲取 KubeCon 全部阿里演講PPT,關(guān)注阿里巴巴云原生公眾號,微信菜單欄點擊 PPT下的“獲取PPT”
阿里云容器服務Kubernetes的監(jiān)控總覽
云服務集成??
阿里云容器服務Kubernetes目前已經(jīng)和四款監(jiān)控云服務進行了打通,分別是SLS(日志服務)、ARMS(應用性能監(jiān)控)、AHAS(架構(gòu)感知監(jiān)控服務)、Cloud Monitor(云監(jiān)控)。
SLS主要負責日志的采集、分析。在阿里云容器服務Kubernetes中,SLS可以采集三種不同類型的日志
- APIServer等核心組件的日志
- Service Mesh/Ingress等接入層的日志
- 應用的標準日志??
除了采集日志的標準鏈路外,SLS還提供了上層的日志分析能力,默認提供了基于APIServer的審計分析能力、接入層的可觀測性展現(xiàn)、應用層的日志分析。在阿里云容器服務Kubernetes中,日志組件已經(jīng)默認安裝,開發(fā)者只需要通過在集群創(chuàng)建時勾選即可。
ARMS主要負責采集、分析、展現(xiàn)應用的性能指標。目前主要支持Java與PHP兩種語言的集成,可以采集虛擬機(JVM)層的指標,例如GC的次數(shù)、應用的慢SQL、調(diào)用棧等等。對于后期性能調(diào)優(yōu)可以起到非常重要的作用。
AHAS是架構(gòu)感知監(jiān)控,通常在Kubernetes集群中負載的類型大部分為微服務,微服務的調(diào)用拓撲也會比較復雜,因此當集群的網(wǎng)絡(luò)鏈路出現(xiàn)問題時,如何快速定位問題、發(fā)現(xiàn)問題、診斷問題則成為了最大的難題。AHAS通過網(wǎng)絡(luò)的流量和走向,將集群的拓撲進行展現(xiàn),提供更高層次的問題診斷方式。
開源方案集成
開源方案的兼容和集成也是阿里云容器服務Kubernetes監(jiān)控能力的一部分。主要包含如下兩個部分:
Kubernetes內(nèi)置監(jiān)控組件的增強與集成??
在kubernetes社區(qū)中,heapster/metrics-server是內(nèi)置的監(jiān)控方案,而且例如Dashboard、HPA等核心組件會依賴于這些內(nèi)置監(jiān)控能力提供的metrics。由于Kubernetes生態(tài)中組件的發(fā)布周期和Kubernetes的release不一定保證完整的同步,這就造成了部分監(jiān)控能力的消費者在Kubernetes中存在監(jiān)控問題。因此阿里云就這個問題做了metrics-server的增強,實現(xiàn)版本的兼容。此外針對節(jié)點的診斷能力,阿里云容器服務增強了NPD的覆蓋場景,支持了FD文件句柄的監(jiān)測、NTP時間同步的校驗、出入網(wǎng)能力的校驗等等,并開源了eventer,支持離線Kubernetes的事件數(shù)據(jù)到SLS、kafka以及釘釘,實現(xiàn)ChatOps。
Prometheus生態(tài)的增強與集成? ?
Promethes作為Kubernetes生態(tài)中三方監(jiān)控的標準,阿里云容器服務也提供了集成的Chart供開發(fā)者一鍵集成。此外,我們還在如下三個層次作了增強:
- 存儲、性能增強:支持了產(chǎn)品級的存儲能力支持(TSDB、InfluxDB),提供更持久、更高效的監(jiān)控存儲與查詢。
- 采集指標的增強:修復了部分由于Prometheus自身設(shè)計缺欠造成的監(jiān)控不準的問題,提供了GPU單卡、多卡、共享分片的exporter。
- 提供上層可觀測性的增強:支持場景化的CRD監(jiān)控指標集成,例如argo、spark、tensorflow等云原生的監(jiān)控能力,支持多租可觀測性。
阿里云容器服務Kubernetes的彈性總覽??
阿里云容器服務Kubernetes主要包含如下兩大類彈性組件:調(diào)度層彈性組件與資源層彈性組件。
調(diào)度層彈性組件??
調(diào)度層彈性組件是指所有的彈性動作都是和Pod相關(guān)的,并不關(guān)心具體的資源情況。
- HPA
HPA是Pod水平伸縮的組件,除了社區(qū)支持的Resource Metrics和Custom Metrics,阿里云容器服務Kubernetes還提供了external-metrics-adapter,支持云服務的指標作為彈性伸縮的判斷條件。目前已經(jīng)支持例如:Ingress的QPS、RT,ARMS中應用的GC次數(shù)、慢SQL次數(shù)等等多個產(chǎn)品不同維度的監(jiān)控指標。
- VPA?
VPA是Pod的縱向伸縮的組件,主要面向有狀態(tài)服務的擴容和升級場景。? ?
- cronHPA?
cronHPA是定時伸縮組件,主要面向的是周期性負載,通過資源畫像可以預測有規(guī)律的負載周期,并通過周期性伸縮,實現(xiàn)資源成本的節(jié)約。
- Resizer
Resizer是集群核心組件的伸縮控制器,可以根據(jù)集群的CPU核數(shù)、節(jié)點的個數(shù),實現(xiàn)線性和梯度兩種不同的伸縮,目前主要面對的場景是核心組件的伸縮,例如:CoreDNS。
資源層彈性組件
資源層彈性組件是指彈性的操作都是針對于Pod和具體資源關(guān)系的。
- Cluster-Autoscaler?
Cluster-Autoscaler是目前比較成熟的節(jié)點伸縮組件,主要面向的場景是當Pod資源不足時,進行節(jié)點的伸縮,并將無法調(diào)度的Pod調(diào)度到新彈出的節(jié)點上。
- virtual-kubelet-autoscaler?
virtual-kubelet-autoscaler是阿里云容器服務Kubernetes開源的組件,和Cluster-Autoscaler的原理類似,當Pod由于資源問題無法調(diào)度時,此時彈出的不是節(jié)點,而是將Pod綁定到虛擬節(jié)點上,并通過ECI的方式將Pod進行啟動。
Demo Show Case?
最后給大家進行一個簡單的Demo演示:應用主體是apiservice,apiservice會通sub-apiservice調(diào)用database,接入層通過ingress進行管理。我們通過PTS模擬上層產(chǎn)生的流量,并通過SLS采集接入層的日志,ARMS采集應用的性能指標,并通過alibaba-cloud-metrics-adapster暴露external metrics觸發(fā)HPA重新計算工作負載的副本,當伸縮的Pod占滿集群資源時,觸發(fā)virtual-kubelet-autoscaler生成ECI承載超過集群容量規(guī)劃的負載。
總結(jié)??
在阿里云容器服務Kubernetes上使用監(jiān)控和彈性的能力是非常簡單的,開發(fā)者只需一鍵安裝相應的組件Chart即可完成接入,通過多維度的監(jiān)控、彈性能力,可以讓云原生應用在最低的成本下獲得更高的穩(wěn)定性和魯棒性。
若有收獲,就賞束稻谷吧
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的云原生应用 Kubernetes 监控与弹性实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大家都关注的Serverless,阿里怎
- 下一篇: Spark内置图像数据源初探