1. 程式人生 > >介紹Kubernetes監控Heapster

介紹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命令參考相對較為重要,可以參考官方文件,具體如下:

–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