介紹Kubernetes監控Heapster

什麼是Heapster?

Heapster是容器集羣監控和性能分析工具,天然的支持Kubernetes和CoreOS,Kubernetes有個出名的監控agent—cAdvisor。在每個kubernetes Node上都會運行cAdvisor,它會收集本機以及容器的監控數據(cpu,memory,filesystem,network,uptime),在較新的版本中,K8S已經將cAdvisor功能集成到kubelet組件中。每個Node節點可以直接進行web訪問。

cAdvisor web界面訪問: http://< Node-IP >:4194

cAdvisor也提供Restful API: https://github.com/google/cadv … pi.md

Heapster是一個收集者,將每個Node上的cAdvisor的數據進行彙總,然後導到第三方工具(如InfluxDB)。

框架圖

介紹Kubernetes監控Heapster介紹Kubernetes監控Heapster

Heapster首先從K8S Master獲取集羣中所有Node的信息,然後通過這些Node上的kubelet獲取有用數據,而kubelet本身的數據則是從cAdvisor得到。所有獲取到的數據都被推到Heapster配置的後端存儲中,並還支持數據的可視化。現在後端存儲 + 可視化的方法,如InfluxDB + grafana。

Heapster使用

這裏主要介紹Heapster的API使用,及可獲取的Metrics;API文檔及可用Metrics在官方文檔中都介紹的比較齊全。下面用幾條測試命令來解釋API使用,獲取支持的metrics

curl -L http://:8082/api/v1/model/metrics

列出所有的Nodes支持的metrics

curl -L http://:8082/api/v1/model/nodes/metrics

查看對應Pod的cpu使用率

curl -L http://:8082/api/v1/model/namespaces//pods//metrics/cpu-usage

Heapster系統部署

我們採用Heapster以InfluxDB作爲數據存儲後端,再配合Grafana的前端進行數據可視化的系統監控方案,進行部署。

鏡像製作:
Heapster的版本:v0.19.0

沒有采用最新的Heapster版本,是因爲我們使用的Kubernets版本爲較舊的v1.0.3,較新的Heapster版本不兼容該K8S版本。

Heapster鏡像:
進入heapster-0.19.0//deploy/docker,使用build.sh進行鏡像製作。 該腳本會依賴go環境進行heapster源碼編譯,所以需要提前安裝go環境(go和godep的安裝)。

InfluxDB和Grafana鏡像:
這兩個鏡像的Dockerfile分別在根目錄下的對應文件中,只需查看Makefile進行對應的命令編譯製作鏡像即可。Dockerfile會依賴一些基礎鏡像,最好提前下載好。

容器的運行

Heapster容器的運行可以依賴Kubernetes進行部署,也可以單獨使用docker命令進行部署。

Kubernetes部署

直接依賴heapster-0.19.0/deploy/kube-config/influxdb/目錄下的yaml文件,使用kubectl create -f heapster-0.19.0/deploy/kube-config/influxdb/命令進行部署。

我們沒有采用該方式,是考慮到如果K8S和監控系統相互依賴,會導致K8S異常之後,存在監控系統無法使用的隱患。

但是直接使用單獨的容器進行部署,也需要考慮到監控容器異常退出了,誰來維護重啓?

需要進行權衡?

還需要注意一點:Heapster會使用內存進行數據緩存,容易撐爆內存,導致容器OOM

Docker命令部署

使用docker命令進行部署的話,需要傳入各種參數,該參數可以參考kubernetes部署使用到的yaml文件。

具體命令如下:

InfluxDB

docker run -p 8083:8083 -p 8086:8086 --net=host -v /data heapster_influxdb:canary
注:data是數據存儲目錄,需要考慮數據可持久化,並且能保證容器重啓不影響數據。

Grafana

docker run -p 3000:3000 --net=host -e INFLUXDB_SERVICE_URL=http://:8086 -e GF_AUTH_BASIC_ENABLED="false" -e GF_AUTH_ANONYMOUS_ENABLED="true" -e GF_AUTH_ANONYMOUS_ORG_ROLE="Admin" -e GF_SERVER_ROOT_URL=/ -v /var heapster_grafana:canary

Heapster

docker run -it -p 8082:8082 --net=host heapster:canary --source=kubernetes:http://:8080?inClusterConfig=false\&useServiceAccount=false --sink=influxdb:http://:8086

Heapster命令參考相對較爲重要,可以參考官方文檔,具體如下:Linux就該這麼學

–source: 指定數據獲取源。這裏我們指定kube-apiserver即可。
後綴參數:
inClusterConfig:
kubeletPort: 指定kubelet的使用端口,默認10255
kubeletHttps: 是否使用https去連接kubelets(默認:false)
apiVersion: 指定K8S的apiversion
insecure: 是否使用安全證書(默認:false)
auth: 安全認證
useServiceAccount: 是否使用K8S的安全令牌

–sink: 指定後端數據存儲。這裏指定influxdb數據庫。
後綴參數:
user: InfluxDB用戶
pw: InfluxDB密碼
db: 數據庫名
secure: 安全連接到InfluxDB(默認:false)
withfields: 使用InfluxDB fields(默認:false)。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章