介紹Kubernetes監控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)。
框架圖Heapster首先從K8S Master獲取叢集中所有Node的資訊,然後通過這些Node上的kubelet獲取有用資料,而kubelet本身的資料則是從cAdvisor得到。所有獲取到的資料都被推到Heapster配置的後端儲存中,並還支援資料的視覺化。現在後端儲存 + 視覺化的方法,如InfluxDB + grafana。
Heapster使用這裡主要介紹Heapster的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-usageHeapster系統部署
我們採用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檔案。
具體命令如下:
InfluxDBdocker run -p 8083:8083 -p 8086:8086 --net=host -v /data heapster_influxdb:canary
注:data是資料儲存目錄,需要考慮資料可持久化,並且能保證容器重啟不影響資料。
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:canaryHeapster
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