容器監控實踐 kube state metrics

2022-05-10 12:18:09 字數 3449 閱讀 6415

已經有了cadvisor、heapster(metric server),幾乎容器執行的所有指標都能拿到,但是下面這種情況卻無能為力:

而這些則是kube-state-metrics提供的內容,它基於client-go開發,輪詢kubernetes api,並將kubernetes的結構化資訊轉換為metrics。

kube-state-metrics提供的指標,按照階段分為三種類別:

指標類別包括:

以pod為例:

部署清單:

kube-state-metrics/├──kube-state-metrics-cluster-role-binding.yaml

├──kube-state-metrics-cluster-role.yaml

├──kube-state-metrics-deployment.yaml

├──kube-state-metrics-role-binding.yaml

├──kube-state-metrics-role.yaml

├──kube-state-metrics-service-account.yaml

├──kube-state-metrics-service.yaml

主要映象有:

image:quay.io/coreos/kube-state-metrics:v1.5.0

對於pod的資源限制,一般情況下:

200mib memory 0.1 cores

超過100節點的集群:

2mib memory per node 0.001 cores per node

kube-state-metrics做過一次效能優化,具體內容參考下文

部署成功後,prometheus的target會出現如下標誌

因為kube-state-metrics-service.yaml中有prometheus.io/scrape:

『true』標識,因此會將metric暴露給prometheus,而prometheus會在kubernetes-service-endpoints這個job下自動發現kube-state-metrics,並開始拉取metrics,無需其他配置。

使用kube-state-metrics後的常用場景有:

集群節點狀態錯誤: kube_node_status_condition==1

集群中存在啟動失敗的pod:kube_pod_status_phase==1

最近30分鐘內有pod容器重啟: changes(kube_pod_container_status_restarts[30m])>0

配合報警可以更好地監控集群的執行

kube-state-metrics本質上是不斷輪詢api-server,**結構也很簡單

主要**目錄

.├──collectors

│├──builder.go

│├──collectors.go

│├──configmap.go

│......│├──testutils.go

│├──testutils_test.go

│└──utils.go

├──constant

│└──resource_unit.go

├──metrics

│├──metrics.go

│└──metrics_test.go

├──metrics_store

│├──metrics_store.go

│└──metrics_store_test.go

├──options

│├──collector.go

│├──options.go

│├──options_test.go

│├──types.go

│└──types_test.go

├──version

│└──version.go

└──whiteblacklist

├──whiteblacklist.go

└──whiteblacklist_test.go

所有型別:

var(defaultnamespaces=namespacelistdefaultcollectors=collectorset{},"deployments":struct{}{},"limitranges":struct{}{},"nodes":struct{}{},"pods":struct{}{},"poddisruptionbudgets":struct{}{},"replicasets":struct{}{},"replicationcontrollers":struct{}{},"resourcequotas":struct{}{},"services":struct{}{},"jobs":struct{}{},"cronjobs":struct{}{},"statefulsets":struct{}{},"persistentvolumes":struct{}{},"persistentvolumeclaims":struct{}{},"namespaces":struct{}{},"horizontalpodautoscalers":struct{}{},"endpoints":struct{}{},"secrets":struct{}{},"configmaps":struct{}{},})

構建對應的收集器

family即乙個型別的資源集合,如job下的kube_job_info、kube_job_created,都是乙個familygenerator例項

metrics.familygenerator}}),},

func (b *builder)buildcronjobcollector()*collector,store,b.namespaces,createcronjoblistwatch)returnnewcollector(store)}

效能優化:

kube-state-metrics在之前的版本中暴露出兩個問題:

metrics介面響應慢(10-20s)

記憶體消耗太大,導致超出limit被殺掉

問題一的方案就是基於client-go的cache tool實現本地快取,具體結構為:

var cache = map[uuid]byte{}

問題二的的方案是:對於時間序列的字串,是存在很多重複字元的(如namespace等字首篩選),可以用指標或者結構化這些重複字元。

基於kube-state-metrics的監控資料,可以組裝一些常用的監控面板,如下面的grafana面板

容器監控實踐 Heapster

該專案將被廢棄 retired heapster是kubernetes旗下的乙個專案,heapster是乙個收集者,並不是採集 流程 1.heapster首先從apiserver獲取集群中所有node的資訊。2.通過這些node上的kubelet獲取有用資料,而kubelet本身的資料則是從cadv...

容器監控實踐 kube state metrics

已經有了cadvisor heapster metric server,幾乎容器執行的所有指標都能拿到,但是下面這種情況卻無能為力 而這些則是kube state metrics提供的內容,它基於client go開發,輪詢kubernetes api,並將kubernetes的結構化資訊轉換為me...

容器監控實踐 Prometheus概述

prometheus是一套開源的監控 報警 時間序列資料庫的組合,起始是由soundcloud公司開發的。從2016年加入cncf,2016年6月正式發布1.0版本,2017年底發布了基於全新儲存層的2.0版本,能更好地與容器平台 雲平台配合,到2018年8月畢業,現在已經成為kubernetes的...