Heapster是kubernetes叢集監控工具。在1.2的時候,kubernetes的監控需要在node節點上運作cAdvisor作為agent收集本機和容器的資源資料,包括cpu、記憶體、網絡、檔案系統等。在新版的kubernetes中,cAdvisor被內建到kubelet中。通過netstat可以檢視到kubelet新開了一個4194的端口,這就是cAdvisor監聽的端口,現在我們然後可以通過http://<node-ip>:4194的方式通路到cAdvisor。Heapster就是通過每個node上的kubelet,也就是實際的cAdvisor上收集資料并彙總,儲存到後端存儲中。
Heapster支援多種後端存儲,包括influxDB,Elasticsearch,Kafka等,在這篇文檔裡,我們使用influxDB作為後端存儲來展示heapster的相關配置。需要說明的是,heapster依賴kubernetes
dns配置。具體相關配置請參考另一篇博文《kubernetes 1.5配置dns》。
1、下載下傳heapster
目前heapster的最新版本是1.2版本:
https:
上面的操作是下載下傳heapster,然後将其中的influxdb目錄複制到我們用于儲存相關yaml檔案的目錄/data/kubernetes目錄。其中influxdb目錄中包含如下幾個檔案:
[root@server-116 influxdb]# ll -h
total 20K-rw-r--r--. 1 root root 414 Mar 15 18:04 grafana-service.yaml-rw-r--r--. 1 root root 630 Mar 15 21:04 heapster-controller.yaml-rw-r--r--. 1 root root 249 Mar 15 18:04 heapster-service.yaml-rw-r--r--. 1 root root 1.5K Mar 15 18:17 influxdb-grafana-controller.yaml-rw-r--r--. 1 root root 259 Mar 15 18:04 influxdb-service.yaml
我們需要修改相應幾個controller檔案中的p_w_picpath鏡像的位址,還是一樣,通過使用阿裡雲鏡像位址dev.aliyun.com,修改完成以後,直接執行操作如下:
kubectl create -f /data/kubernetes/influxdb
這個時候,我們通過kubectl get pods --all-namespaces指令可以看到兩個pod都正常啟動,但我們通過dashboard卻看不到相應的監控圖。通過kubectl logs 檢視heapster的容器日志。看到如下報錯:
E0315 11:58:16.155096 1 reflector.go:205] k8s.io/heapster/metrics/heapster.go:232: Failed to list *api.Pod: Get https://kubernetes.default/api/v1/pods?resourceVersion=0: x509: certificate is valid for server-116, not kubernetes.defaultE0315 11:58:16.168369 1 reflector.go:205] k8s.io/heapster/metrics/processors/namespace_based_enricher.go:84: Failed to list *api.Namespace: Get https://kubernetes.default/api/v1/namespaces?resourceVersion=0: x509: certificate is valid for server-116, not kubernetes.default
從報錯可以看出,是無法連接配接https://kubernetes.default這個位址。我們知道kubernetes.default其實就是apiserver本身,隻不過這裡是使用了kubernetes的域名系統進行解析。報錯是因為連接配接了apiserver的secure
port,需要ssl認證,導緻了校驗異常。為了規避這種校驗,我們可以使用一種取巧的辦法,就是使用非insecure-port連接配接,即apiserver的8080端口。
我們找到heapster-controller.yaml檔案,裡面有關于其啟動參數配置如下:
command: - /heapster - --source=kubernetes:https://kubernetes.default
- --sink=influxdb:http://monitoring-influxdb:8086
對兩個參數做下簡單說明:
--source代表heapster的資料源,即從哪裡擷取資料,這裡當然是從apiserver拿資料
--sink代表heapster擷取到的資料存儲到哪裡,我們這裡使用了influxdb,influxdb的位址在influxdb相關的yaml檔案中有定義,可以自行檢視。
我們要做的,就是修改--source的位址,改成如下配置:
--source=kubernetes:http://10.5.10.116:8080?inClusterConfig=false
其中10.5.10.116即apiserver位址,inClusterConfig=false代表不使用service accounts中的kube config資訊。
這樣配置以後,我們重新運作heapster,再等一會生成資料,就可以看到如下界面了: