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