已經有了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的...