部署 Prometheus Operator - 每天5分鐘玩轉 Docker 容器技術(179)
本節在實踐時使用的是 Prometheus Operator 版本 v0.14.0。由於項目開發叠代速度很快,部署方法可能會更新,必要時請參考官方文檔。
下載最新源碼
git clone https://github.com/coreos/prometheus-operator.git
cd prometheus-operator
為方便管理,創建一個單獨的 Namespace monitoring
,Prometheus Operator 相關的組件都會部署到這個 Namespace。
kubectl create namespace monitoring
安裝 Prometheus Operator Deployment
helm install --name prometheus-operator --set rbacEnable=true --namespace=monitoring helm/prometheus-operator
Prometheus Operator 所有的組件都打包成 Helm Chart,安裝部署非常方便。如果對 Helm 不熟悉,可以參考前面相關章節。
安裝 Prometheus、Alertmanager 和 Grafana
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
類型的資源。
為了方便訪問 Prometheus Server,這裏已經將 Service 類型通過 kubectl edit
改為 NodePort。
同樣可以查看 Alertmanager 和 Grafana 的相關資源。
Service 類型也都已經改為 NodePort。
安裝 kube-prometheus
kube-prometheus 是一個 Helm Chart,打包了監控 Kubernetes 需要的所有 Exporter 和 ServiceMonitor。
helm install --name kube-prometheus --namespace=monitoring helm/kube-prometheus
每個 Exporter 會對應一個 Service,為 Pormetheus 提供 Kubernetes 集群的各類監控數據。
每個 Service 對應一個 ServiceMonitor,組成 Pormetheus 的 Target 列表。
如下是與 Prometheus Operator 相關的所有 Pod。
我們註意到有些 Exporter 沒有運行 Pod,這是因為像 API Server、Scheduler、Kubelet 等 Kubernetes 內部組件原生就支持 Prometheus,只需要定義 Service 就能直接從預定義端口獲取監控數據。
瀏覽器打開 Pormetheus 的 Web UI http://192.168.56.105:30413/targets
所有 Target 的狀態都是 UP
。
安裝 Alert 規則
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
安裝 Grafana Dashboard
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
部署 Prometheus Operator - 每天5分鐘玩轉 Docker 容器技術(179)