云原生应用如何做到低成本获得高稳定?
前言
云原生應用的設計理念已經被越來越多的開發者接受與認可,而 Kubernetes 做為云原生的標準接口實現,已經成為了整個 stack 的中心,云服務的能力可以通過 Cloud Provider、CRD Controller、Operator 等等的方式從 Kubernetes 的標準接口向業務層透出。開發者可以基于 Kubernetes 來構建自己的云原生應用與平臺,Kubernetes 成為了構建平臺的平臺。今天我們會向大家介紹一個云原生應用該如何在 Kubernetes 中無縫集成監控和彈性能力。
阿里云容器服務 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 即可完成接入,通過多維度的監控、彈性能力,可以讓云原生應用在最低的成本下獲得更高的穩定性和魯棒性。
總結
以上是生活随笔為你收集整理的云原生应用如何做到低成本获得高稳定?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kubernetes 从懵圈到熟练:集群
- 下一篇: 云原生时代|分布式系统设计知识图谱(内含