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的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以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