Kubernetes集群中要監控哪些組件?采集哪些指標?
本文轉載自微信公眾號「大數據DT」,作者Brendan Burns。轉載本文請聯系大數據DT公眾號。
Kubernetes集群由控制平面和工作節點兩類組件組成。控制平面包括API Server、etcd、Scheduler以及Controller Manager。工作節點則包括kubelet、Container Runtime、kube-proxy、kube-dns以及Pod。你需要監控所有這些組件以確保集群和應用程序的正常運行。
Kubernetes通過多種方式暴露這些組件的指標,讓我們看看可以使用哪些不同的組件來采集集群的指標。
1. cAdvisor
Container Advisor(或者稱為cAdvisor)是一個開源項目,用來采集節點上容器的資源使用情況和指標。cAdvisor內置在kubelet中,kubelet運行在集群中的每個節點上。它通過Linux cgroups(Control Group,控制組)來收集內存和CPU指標。
cgroups是Linux內核的一個功能,用來隔離諸如CPU、磁盤I/O或者網絡I/O等資源。cAdvisor也會通過Linux內核內置的statfs來收集磁盤指標。你不需要關心這些技術的實現細節,但是應該理解這些指標是如何暴露的,以及你需要采集什么類型的信息。最后,你應該將cAdvisor視為所有容器指標的可信來源。
2. Metrics Server
Kubernetes Metrics Server和Metrics Server API替代了棄用的Heapster。Heapster在數據接收器的架構上存在一些缺陷,導致在Heapster的核心代碼中引入了大量的供應商解決方案。
這個問題最終通過在Kubernetes中將Resource Metrics API(資源指標API)和Custom Metrics API(自定義指標API)實現成一個聚合API而得到解決。這樣就可以在不改變API的情況下切換不同的實現。
Metrics Server API和Metrics Server有兩個方面需要理解。
首先,Metrics Server是 Resource Metrics API的典型實現,它通過kubelet的API采集諸如CPU和內存這類資源的指標,并將其存儲在內存中以供Kubernetes Scheduler、HPA(Horizontal Pod Autoscaler)以及VPA(Vertical Pod Autoscaler)使用。
其次,Custom Metrics API 允許監控系統收集任意指標,這將允許在監控方案中構建自定義的適配器,將監控范圍擴展到核心資源指標之外。
例如,Prometheus構建了最早的自定義指標適配器之一,它可以讓你基于自定義的指標來使用HPA。這樣就可以根據場景提供更好的伸縮性,因為你可以引入諸如隊列大小這樣的指標, 并且基于這類外部指標進行縮放。
Metrics API的標準化為擴展傳統的CPU和內存指標提供了更多的可能。
3. kube-state-metrics
kube-state-metrics是Kubernetes的一個附加組件,用來監控存儲在Kubernetes中的對象。cAdvisor和Metrics Server 用于提供資源使用的詳細指標,而kube-state-metrics則關注識別集群中對象的狀態。
以下是一些kube-state-metrics可以回答的問題:
- Pod
- 有多少Pod部署在集群中?
- 有多少Pod處于掛起狀態?
- 是否有足夠的資源來滿足Pod的請求?
- Deployment
- 有多少Pod處于運行狀態或者預期的狀態?
- 有多少副本可用?
- 哪些Deployment已更新過?
- Node
- 工作節點處于什么狀態?
- 集群中分配了多少CPU?
- 是否存在不可調度的節點?
- Job
- Job是何時啟動的?
- Job是何時結束的?
- 多少Job失敗了?
在撰寫本文時,kube-state-metrics可以追蹤22種Kubernetes對象類型,這個范圍還在擴大,你可以從官方Github倉庫中找到相關文檔。
關于作者:Brendan Burns,微軟Azure的杰出工程師,也是Kubernetes開源項目的聯合創始人,現為微軟副總裁,從事云應用的開發工作已有十多年。
Eddie Villalba,微軟商業軟件工程部門的軟件工程師,專注于開源云和Kubernetes。他幫助過許多用戶將Kubernetes 用于應用程序。
Dave Strebel,微軟Azure的全球云原生架構師,專注于開源云和Kubernetes。他深度參與了Kubernetes開源項目,為Kubernetes發布團隊提供幫助并領導SIG-Azure工作組。
Lachlan Evenson,微軟Azure的容器計算團隊的首席開發經理,他通過動手實操教學和會議演講幫助許多人去了解Kubernetes。
本文摘編自《Kubernetes實戰》,經出版方授權發布。(ISBN:9787111672128)