本節在實踐時使用的是 Prometheus Operator 版本 v0.14.0。因爲項目開發迭代速度很快,部署方法可能會更新,必要時請參考官方文檔。html
git clone https://github.com/coreos/prometheus-operator.git
cd prometheus-operator
爲方便管理,建立一個單獨的 Namespace monitoring
,Prometheus Operator 相關的組件都會部署到這個 Namespace。node
kubectl create namespace monitoring
helm install --name prometheus-operator --set rbacEnable=true --namespace=monitoring helm/prometheus-operator
Prometheus Operator 全部的組件都打包成 Helm Chart,安裝部署很是方便。若是對 Helm 不熟悉,能夠參考前面相關章節。git
helm install --name prometheus --set serviceMonitorsSelector.app=prometheus --set ruleSelector.app=prometheus --namespace=monitoring helm/prometheus
helm install --name alertmanager --namespace=monitoring helm/alertmanager
helm install --name grafana --namespace=monitoring helm/grafana
能夠經過 kubectl get prometheus
查看 Prometheus
類型的資源。github
爲了方便訪問 Prometheus Server,這裏已經將 Service 類型經過 kubectl edit
改成 NodePort。api
一樣能夠查看 Alertmanager 和 Grafana 的相關資源。瀏覽器
Service 類型也都已經改成 NodePort。app
kube-prometheus 是一個 Helm Chart,打包了監控 Kubernetes 須要的全部 Exporter 和 ServiceMonitor。spa
helm install --name kube-prometheus --namespace=monitoring helm/kube-prometheus
每一個 Exporter 會對應一個 Service,爲 Pormetheus 提供 Kubernetes 集羣的各種監控數據。code
每一個 Service 對應一個 ServiceMonitor,組成 Pormetheus 的 Target 列表。orm
以下是與 Prometheus Operator 相關的全部 Pod。
咱們注意到有些 Exporter 沒有運行 Pod,這是由於像 API Server、Scheduler、Kubelet 等 Kubernetes 內部組件原生就支持 Prometheus,只須要定義 Service 就能直接從預約義端口獲取監控數據。
瀏覽器打開 Pormetheus 的 Web UI http://192.168.56.105:30413/targets
全部 Target 的狀態都是 UP
。
Prometheus Operator 提供了默認的 Alertmanager 告警規則,經過以下命令安裝。
sed -ie 's/role: prometheus-rulefiles/app: prometheus/g' contrib/kube-prometheus/manifests/prometheus/prometheus-k8s-rules.yaml
sed -ie 's/prometheus: k8s/prometheus: prometheus/g' contrib/kube-prometheus/manifests/prometheus/prometheus-k8s-rules.yaml
sed -ie 's/job=\"kube-controller-manager/job=\"kube-prometheus-exporter-kube-controller-manager/g' contrib/kube-prometheus/manifests/prometheus/prometheus-k8s-rules.yaml
sed -ie 's/job=\"apiserver/job=\"kube-prometheus-exporter-kube-api/g' contrib/kube-prometheus/manifests/prometheus/prometheus-k8s-rules.yaml
sed -ie 's/job=\"kube-scheduler/job=\"kube-prometheus-exporter-kube-scheduler/g' contrib/kube-prometheus/manifests/prometheus/prometheus-k8s-rules.yaml
sed -ie 's/job=\"node-exporter/job=\"kube-prometheus-exporter-node/g' contrib/kube-prometheus/manifests/prometheus/prometheus-k8s-rules.yaml
kubectl apply -n monitoring -f contrib/kube-prometheus/manifests/prometheus/prometheus-k8s-rules.yaml
Prometheus Operator 定義了顯示監控數據的默認 Dashboard,經過以下命令安裝。
sed -ie 's/grafana-dashboards-0/grafana-grafana/g' contrib/kube-prometheus/manifests/grafana/grafana-dashboards.yaml
sed -ie 's/prometheus-k8s.monitoring/prometheus-prometheus.monitoring/g' contrib/kube-prometheus/manifests/grafana/grafana-dashboards.yaml
kubectl apply -n monitoring -f contrib/kube-prometheus/manifests/grafana/grafana-dashboards.yaml
打開 Grafana 的 Web UI http://192.168.56.105:32342/
Grafana 的 DataSource 和 Dashboard 已自動配置。點擊 Home
就可使用咱們在最開始討論過的那些 Dashboard 了。
本章咱們實踐了三種 Kubernetes 監控方案。
Weave Scope 能夠展現集羣和應用的完整視圖。其出色的交互性讓用戶可以輕鬆對容器化應用進行實時監控和問題診斷。
Heapster 是 Kubernetes 原生的集羣監控方案。預約義的 Dashboard 可以從 Cluster 和 Pods 兩個層次監控 Kubernetes。
Prometheus Operator 多是目前功能最全面的 Kubernetes 開源監控方案。除了可以監控 Node 和 Pod,還支持集羣的各類管理組件,好比 API Server、Scheduler、Controller Manager 等。
Kubernetes 監控是一個快速發展的領域。隨着 Kubernetes 的普及,必定會涌現出更多的優秀方案。
書籍:
1.《天天5分鐘玩轉Kubernetes》
https://item.jd.com/26225745440.html
2.《天天5分鐘玩轉Docker容器技術》
https://item.jd.com/16936307278.html
3.《天天5分鐘玩轉OpenStack》
https://item.jd.com/12086376.html