- Kubernetes version: v1.16.3
- 部署架构:
$ kubectl apply -f prometheus-ns.yml
所有Prometheus相关的对象都部署在NameSpace“monitoring”之下。
node-exporter用于提供*NIX内核的硬件以及系统指标,采集服务器层面的运行指标,包括机器的loadavg、filesystem、meminfo等。
$ kubectl apply -f node-exporter-daemonset.yml
- 原始docker image是prom/node-exporter:v0.14.0
- 类型是daemonset,每个node上都会部署一份
- 使用宿主机网络,开放宿主机端口9100,可以直接通过<node_ip>:9100访问,如下:
$ kubectl apply -f node-exporter-service.yml
- 使用Cluster_IP,不能直接访问
kube-state-metrics关注于获取k8s各种资源的最新状态,如deployment或者daemonset,将k8s的运行状况在内存中做个快照,并且获取新的指标。
$ kubectl apply -f kube-state-metrics-ServiceAccount.yml
$ kubectl apply -f kube-state-metrics-deploy.yml
- 原始docker image是gcr.io/google_containers/kube-state-metrics:v0.5.0
$ kubectl apply -f kube-state-metrics-service.yml
- 使用Cluster_IP,不能直接访问
$ kubectl apply -f monitor-node-disk-daemonset.yml
- 监视Node的磁盘占用情况
- 原始docker image是giantswarm/tiny-tools:latest和dockermuenster/caddy:0.9.3
- 类型是daemonset,每个node上都会部署一份
$ kubectl apply -f prometheus-k8s-ServiceAccount.yml
$ kubectl apply -f prometheus-config-configmap.yml
可以到 https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config 查看相关设置的定义
$ kubectl apply -f prometheus-rules-configmap.yml
$ kubectl apply -f prometheus-secret.yml
- 缺省用户/密码为admin/admin:
$ echo "YWRtaW4=" | base64 -D
$ kubectl apply -f prometheus-deploy.yml
-
原始docker image是prom/prometheus:v1.7.0
-
指向了alertmanager的service:
-alertmanager.url=http://alertmanager:9093/
$ kubectl apply -f prometheus-service.yml
-
类型是NodePort,由K8s自由分配,通过
$ kubectl get service -n monitoring
可以查到分配的端口 -
可以通过<Node_IP>:<Node_Port>访问Prometheus的界面:
- 在Alerts,可以看到根据rule定义的警报规则报出的告警信息:
- 在Status->Targets,可以看到根据配置设置的监视目标:
$ kubectl apply -f grafana-net-2-dashboard-configmap.yml
可以到 https://grafana.com/grafana/dashboards 查看相关Dashboard模版的设置
$ kubectl apply -f grafana-deploy.yml
- 原始docker image是grafana/grafana:4.2.0
$ kubectl apply -f grafana-service.yml
-
类型是NodePort,由K8s自由分配,通过
$ kubectl get service -n monitoring
可以查到分配的端口 -
可以通过<Node_IP>:<Node_Port>访问Grafana的界面:
-
缺省登陆用户/密码是 admin/admin
-
注意:此时还没有添加数据源
$ kubectl apply -f grafana-net-2-dashboard-batch.yml
$ kubectl apply -f grafana-ingress.yml
- Ingress安装在Node节点,所以要设置/etc/hosts,Ingress里定义的Hostname指向Node节点IP
- grafana-ingress设置端口为80, 但要查看 $kubectl get service -n ingress-nginx , 确认80端口映射到哪个NodePort
- 可通过<Host_Name>:<Node_Port>的方式访问Grafana
$ kubectl apply -f alertmanager-config-configmap.yml
- 此处设置Alertmanager告警的发送渠道,如email, slack, wechat, pagerduty等。本例只设置了email
- Alertmanager配置的详细信息请参考https://prometheus.io/docs/alerting/configuration/
$ kubectl apply -f alertmanager-templates-configmap.yml
- 此处设置告警信息的各种模板
$ kubectl apply -f alertmanager-deploy.yml
- 原始Docker image是quay.io/prometheus/alertmanager:v0.7.1
$ kubectl apply -f alertmanager-service.yml
- 类型是NodePort,由K8s自由分配,通过
$ kubectl get service -n monitoring
可以查到分配的端口 - 可以通过<Node_IP>:<Node_Port>访问Alertmanager的界面:
可以看到,Alertmanager接收到Prometheus里的警报,会产生对应的告警信息
- 通过配置设定的渠道,Alertmanager会把告警信息按照模板定义的格式发送出去。下图为接收到的告警邮件: