1. 程式人生 > >雲原生應用 Kubernetes 監控與彈性實踐

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

前言  

雲原生應用的設計理念已經被越來越多的開發者接受與認可,而Kubernetes做為雲原生的標準介面實現,已經成為了整個stack的中心,雲服務的能力可以通過Cloud Provider、CRD Controller、Operator等等的方式從Kubernetes的標準介面向業務層透出。開發者可以基於Kubernetes來構建自己的雲原生應用與平臺,Kubernetes成為了構建平臺的平臺。今天我們會向大家介紹一個雲原生應用該如何在Kubernetes中無縫整合監控和彈效能力。

本文整理自由阿里雲容器平臺技術專家 劉中巍(莫源)在 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中,日誌元件已經預設安裝,開發者只需要通過在叢集建立時勾選即可。

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。

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即可完成接入,通過多維度的監控、彈效能力,可以讓雲原生應用在最低的成本下獲得更高的穩定性和魯棒性。
若有收穫,就賞束稻穀吧


原文連結
本文為雲棲社群原創內容,未經