本文創建在你已經會安裝prometheus服務的基礎之上,若是你還不會安裝,請參考:prometheus多維度監控容器node
若是你尚未安裝庫k8s集羣,情參考: 從零開始搭建基於calico的kubenetesapi
kubernetes顯然已成爲各大公司親睞的容器編排工具,各類私有云公有云平臺基於它構建,那麼,咱們怎麼監控集羣中的全部容器呢?目前有三套方案:ruby
heapster+influxDBmarkdown
heapster爲k8s而生,它從apiserver獲取節點信息,每一個節點kubelet內含了cAdvisor的功能,暴露出api,heapster經過訪問這些端點獲得容器監控數據。它支持多種儲存方式,你們經常使用的的就是influxDB。這套方案的缺點是缺少報警等功能,influxDB的單點問題。所以本方案適合需求是隻要實時監控展現。app
heapster+hawkular工具
本方案解決了上面方案的問題,而且大大提高了監控的高可用性和高性能。比較重量級,適合大型集羣的監控。目前hawkular開源不久。功能完善。有興趣能夠研究。本文不作詳細介紹。性能
prometheusui
本方案下文詳細敘述。lua
prometheus做爲一個時間序列數據收集,處理,存儲的服務,可以監控的對象必須直接或間接提供prometheus承認的數據模型,經過http api的形式暴露出來。咱們知道cAdvisor支持prometheus,一樣,包含了cAdivisor的kubelet也支持prometheus。每一個節點都暴露了供prometheus調用的api。spa
prometheus獲取監控端點的方式有不少,其中就包括k8s,prometheu會經過調用master的apiserver獲取到節點信息,而後去調取每一個節點的數據。
如下爲一個簡單的配置例子
global:
scrape_interval: 20s
scrape_timeout: 10s
evaluation_interval: 20s
scrape_configs:
- job_name: 'kubernetes-nodes-cadvisor' kubernetes_sd_configs: - api_server: 'http://<YOUR MASTER IP>:8080' role: node relabel_configs: - action: labelmap regex: __meta_kubernetes_node_label_(.+) - source_labels: [__meta_kubernetes_role] action: replace target_label: kubernetes_role #將默認10250端口改爲10255端口 - source_labels: [__address__] regex: '(.*):10250' replacement: '${1}:10255' target_label: __address__ #如下是監控每一個宿主機,須要安裝node-exporter - job_name: 'kubernetes_node' kubernetes_sd_configs: - role: node api_server: 'http://172.16.100.101:8080' relabel_configs: - source_labels: [__address__] regex: '(.*):10250' replacement: '${1}:9100' target_label: __address__
以上爲prometheus的配置,如上配置會監控每一個節點的容器信息和節點監控信息。須要在k8s中部署node-exporter pod,yaml文件以下:
apiVersion: v1
kind: Service
metadata:
annotations:
prometheus.io/scrape: 'true' labels: app: node-exporter name: node-exporter name: node-exporter spec: clusterIP: None ports: - name: scrape port: 9100 protocol: TCP selector: app: node-exporter type: ClusterIP apiVersion: extensions/v1beta1 kind: DaemonSet metadata: name: node-exporter spec: template: metadata: labels: app: node-exporter name: node-exporter spec: containers: - image: prom/node-exporter name: node-exporter ports: - containerPort: 9100 hostPort: 9100 name: scrape hostNetwork: true hostPID: true
node-exporter啓動成功後,啓動prometheus便可監控到集羣的宿主機和容器狀態信息。監控端點以下圖:
不只監控容器狀態,通過k8s,prometheus能夠獲取到部署到集羣中的全部服務。若是是一個exporter服務,依然能夠被prometheus收集。prometheus配置文件中
- role: node
role支持:node
,pod
,service
,endpoints
具體的效果你本身去嘗試吧。。