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/cad...node

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

框架圖:
github

Heapster首先從K8S Master獲取集羣中全部Node的信息,而後經過這些Node上的kubelet獲取有用數據,而kubelet自己的數據則是從cAdvisor獲得。全部獲取到的數據都被推到Heapster配置的後端存儲中,並還支持數據的可視化。如今後端存儲 + 可視化的方法,如InfluxDB + grafana。web

Heapster使用

這裏主要介紹Heapster的API使用,及可獲取的Metrics。
參考資料:
API文檔: https://github.com/kubernetes...
Metrics: https://github.com/kubernetes...docker

API文檔及可用Metrics在官方文檔中都介紹的比較齊全。下面用幾條測試命令來解釋API使用:數據庫

# 獲取cluster支持的metrics
# curl -L http://<heapster-IP>:8082/api/v1/model/metrics

# 列出Nodes支持的metrics
# curl -L http://<heapster-IP>:8082/api/v1/model/nodes/metrics

# 查看對應Pod的cpu使用率
# curl -L http://<heapster-IP>:8082/api/v1/model/namespaces/<namespace-name>/pods/<pod-name>/metrics/cpu-usage

Heapster系統部署

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

鏡像製做:

Heapster的版本:v0.19.0api

沒有采用最新的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://<InfluxDB-IP>: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://<K8S-IP>:8080?inClusterConfig=false\&useServiceAccount=false --sink=influxdb:http://<InfluxDB-IP>:8086

Heapster命令參考相對較爲重要,能夠參考官方文檔,具體以下:

--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)。能夠參考Here

相關文章
相關標籤/搜索