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版本:
wget https://github.com/kubernetes/heapster/archive/v1.2.0.tar.gz
tar xf v1.2.0.tar.gz
cd heapster-1.2.0/deploy/kube-config
cp -r influxdb /data/kubernetes/
上面的操作是下載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文件中的image鏡像的地址,還是一樣,通過使用阿里雲鏡像地址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.default E0315 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,再等一會生成數據,就可以看到如下界面了:
參考:http://tonybai.com/2017/01/20/integrate-heapster-for-kubernetes-dashboard/