部署Prometheus Operator - 每天5分鐘玩轉 Docker 容器技術

本節在實踐時使用的是 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 Operator - 每天5分鐘玩轉 Docker 容器技術


安裝 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 Operator - 每天5分鐘玩轉 Docker 容器技術


爲了方便訪問 Prometheus Server,這裏已經將 Service 類型通過 kubectl edit 改爲 NodePort。

同樣可以查看 Alertmanager 和 Grafana 的相關資源。

部署Prometheus Operator - 每天5分鐘玩轉 Docker 容器技術


部署Prometheus Operator - 每天5分鐘玩轉 Docker 容器技術


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 集羣的各類監控數據。

部署Prometheus Operator - 每天5分鐘玩轉 Docker 容器技術


每個 Service 對應一個 ServiceMonitor,組成 Pormetheus 的 Target 列表。

部署Prometheus Operator - 每天5分鐘玩轉 Docker 容器技術


如下是與 Prometheus Operator 相關的所有 Pod。

部署Prometheus Operator - 每天5分鐘玩轉 Docker 容器技術


我們注意到有些 Exporter 沒有運行 Pod,這是因爲像 API Server、Scheduler、Kubelet 等 Kubernetes 內部組件原生就支持 Prometheus,只需要定義 Service 就能直接從預定義端口獲取監控數據。

瀏覽器打開 Pormetheus 的 Web UI http://192.168.56.105:30413/targets

部署Prometheus Operator - 每天5分鐘玩轉 Docker 容器技術


所有 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/

部署Prometheus Operator - 每天5分鐘玩轉 Docker 容器技術


Grafana 的 DataSource 和 Dashboard 已自動配置。點擊 Home 就可以使用我們在最開始討論過的那些 Dashboard 了。

部署Prometheus Operator - 每天5分鐘玩轉 Docker 容器技術


小結

本章我們實踐了三種 Kubernetes 監控方案。

Weave Scope 可以展示集羣和應用的完整視圖。其出色的交互性讓用戶能夠輕鬆對容器化應用進行實時監控和問題診斷。

Heapster 是 Kubernetes 原生的集羣監控方案。預定義的 Dashboard 能夠從 Cluster 和 Pods 兩個層次監控 Kubernetes。

Prometheus Operator 可能是目前功能最全面的 Kubernetes 開源監控方案。除了能夠監控 Node 和 Pod,還支持集羣的各種管理組件,比如 API Server、Scheduler、Controller Manager 等。

Kubernetes 監控是一個快速發展的領域。隨着 Kubernetes 的普及,一定會涌現出更多的優秀方案。

來源: CloudMan