Kubernetes監(jiān)控之Heapster介紹

什么是Heapster?

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

cAdvisor web界面訪問: http://< Node-IP >:4194
cAdvisor也提供Restful API: https://github.com/google/cadvisor/blob/master/docs/api.md

Heapster是一個收集者,將每個Node上的cAdvisor的數(shù)據(jù)進行匯總,然后導(dǎo)到第三方工具(如InfluxDB)。

框架圖:


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

Heapster使用

這里主要介紹Heapster的API使用,及可獲取的Metrics。
參考資料:
API文檔: https://github.com/kubernetes/heapster/blob/master/docs/model.md
Metrics: https://github.com/kubernetes/heapster/blob/master/docs/storage-schema.md

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

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

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

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

Heapster系統(tǒng)部署

我們采用Heapster以InfluxDB作為數(shù)據(jù)存儲后端,再配合Grafana的前端進行數(shù)據(jù)可視化的系統(tǒng)監(jiān)控方案,進行部署。

鏡像制作:

Heapster的版本:v0.19.0

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

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

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

容器的運行

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和監(jiān)控系統(tǒng)相互依賴,會導(dǎo)致K8S異常之后,存在監(jiān)控系統(tǒng)無法使用的隱患。
但是直接使用單獨的容器進行部署,也需要考慮到監(jiān)控容器異常退出了,誰來維護重啟?
需要進行權(quán)衡?
還需要注意一點:Heapster會使用內(nèi)存進行數(shù)據(jù)緩存,容易撐爆內(nèi)存,導(dǎo)致容器OOM

Docker命令部署:
使用docker命令進行部署的話,需要傳入各種參數(shù),該參數(shù)可以參考kubernetes部署使用到的yaml文件。
具體命令如下:

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

Grafana:
docker run -p 3000:3000 --net=host -e INFLUXDB_SERVICE_URL=http://172.25.5.151: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://172.25.5.150:8080?inClusterConfig=false\&useServiceAccount=false --sink=influxdb:http://172.25.5.151:8086

Heapster命令參考相對較為重要,可以參考官方文檔,具體如下:

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

  • --sink: 指定后端數(shù)據(jù)存儲。這里指定influxdb數(shù)據(jù)庫。
    后綴參數(shù):
    user: InfluxDB用戶
    pw: InfluxDB密碼
    db: 數(shù)據(jù)庫名
    secure: 安全連接到InfluxDB(默認:false)
    withfields: 使用InfluxDB fields(默認:false)??梢詤⒖?a target="_blank" rel="nofollow">Here

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • kubernetes 簡介 一個迅速過一遍kubernetes 非常不錯的資源:基于Kubernetes構(gòu)建Doc...
    bradyjoestar閱讀 15,357評論 2 7
  • ?Kubernetes介紹1.背景介紹云計算飛速發(fā)展- IaaS- PaaS- SaaSDocker技術(shù)突飛猛進-...
    Zero___閱讀 14,872評論 0 21
  • 悵 望 分別來臨,突有預(yù)感, 送君歸去,黯然神傷。 撒淚千行,細流萬里, 最后一別,竟是人散。 后記...
    茗星閱讀 423評論 0 1
  • 今天去南京。這次是除了大學(xué)的時候一個人去學(xué)校外第一次真正意義上的獨自外出。大一去學(xué)校還是在市里直接由學(xué)校的直通車...
    飛飛藍閱讀 230評論 2 2

友情鏈接更多精彩內(nèi)容