本节在实践时使用的是 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 不熟悉,可以参考前面相关章节。
![](http://mmbiz.qpic.cn/mmbiz_png/Hia4HVYXRicqENhl1ueGrvN4G9UxvCsRhWx8SJpR1GneiaBPRYNgU1g9XSa0WSnfpOslvno2JcHxpod8XC5PKd8Wg/640?wx_fmt=png)
安装 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
类型的资源。
![](http://mmbiz.qpic.cn/mmbiz_png/Hia4HVYXRicqENhl1ueGrvN4G9UxvCsRhWok60pICK1pIcibe8q6mSjQiaIowCf0fHOj8m7wUJaywpTOFdMuQgYkcQ/640?wx_fmt=png)
为了方便访问 Prometheus Server,这里已经将 Service 类型通过 kubectl edit
改为 NodePort。
同样可以查看 Alertmanager 和 Grafana 的相关资源。
![](http://mmbiz.qpic.cn/mmbiz_png/Hia4HVYXRicqENhl1ueGrvN4G9UxvCsRhW0xqBiavTklQ7uRiammbGywuX0NE2DQ9uHmDibARw1CD7GT7ERTJ5FlNsw/640?wx_fmt=png)
![](http://mmbiz.qpic.cn/mmbiz_png/Hia4HVYXRicqENhl1ueGrvN4G9UxvCsRhWKjNY9WUzSUZ0ESsAqRPzphlcItjno8yIMqtrPRFOmjMk4pEfKibpHWA/640?wx_fmt=png)
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 集群的各类监控数据。
![](http://mmbiz.qpic.cn/mmbiz_png/Hia4HVYXRicqENhl1ueGrvN4G9UxvCsRhWz1aV2wCqj8he0150sVLxZEvJgN6Liadmhld39dATVMFY59JyumjOCdg/640?wx_fmt=png)
每个 Service 对应一个 ServiceMonitor,组成 Pormetheus 的 Target 列表。
![](http://mmbiz.qpic.cn/mmbiz_png/Hia4HVYXRicqENhl1ueGrvN4G9UxvCsRhWic86AJxBQrR7GBNew7hIGTcfLsq6wnYYml7xFc1BNArxNibSZ1H012CA/640?wx_fmt=png)
如下是与 Prometheus Operator 相关的所有 Pod。
![](http://mmbiz.qpic.cn/mmbiz_png/Hia4HVYXRicqENhl1ueGrvN4G9UxvCsRhW1pm8JTXaD0SOwrO9SjpcKhVia33liaZSkKWR2UoXeEOicuYMjMnmiavP2A/640?wx_fmt=png)
我们注意到有些 Exporter 没有运行 Pod,这是因为像 API Server、Scheduler、Kubelet 等 Kubernetes 内部组件原生就支持 Prometheus,只需要定义 Service 就能直接从预定义端口获取监控数据。
浏览器打开 Pormetheus 的 Web UI http://192.168.56.105:30413/targets
![](http://mmbiz.qpic.cn/mmbiz_png/Hia4HVYXRicqENhl1ueGrvN4G9UxvCsRhWD3zibcgNm5nrs2fUO5gAO0hibptyNUlCOzeBPuTd38iaspo5NQhMVTOlw/640?wx_fmt=png)
所有 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