一、监控ETCD流程
- 第一步:建立一个
ServiceMonitor
资源对象,用于 Prometheus 添加监控项; - 第二步:为 ServiceMonitor 对象关联
metrics
数据接口的一个Service
对象; - 第三步:确保 Service 对象可以正确获取到 metrics 数据。
二、获取ETCD证书
对于 Etcd 集群来说,我们在搭建的时候就采用了通过https证书认证的方式(这也是K8S中强烈建议的),所以如果想通过Kube-Prometheus 访问到 etcd 集群中的监控数据,就需要添加证书。我们可以通过 systemct
查看证书路径:
[root@k8s-prod-master01 ~]# systemctl status etcd.service -l

- 我们需要创建一个
secret
,让Kube-Prometheus pod
节点挂载 - 注意:改成自己的证书的存储路径
[root@k8s-master01 ~]# kubectl create secret generic etcd-ssl --from-file=/etc/kubernetes/cert/ca.pem --from-file=/etc/etcd/cert/etcd.pem --from-file=/etc/etcd/cert/etcd-key.pem -n monitoring
secret/etcd-ssl created
- 创建以后我们可以通过下面的命令来检查
[root@k8s-master01 ~]# kubectl describe secrets -n monitoring etcd-ssl

三、挂载ETCD证书
- 我们
原文链接:https://www.dqzboy.com 可以看到证书已经创建成功,然后我们将etcd-ssl secret
对象原文链接:https://www.dqzboy.com 配置到 Kube-Prometheus 资源对象中。
[root@k8s-master01 ~]# cd /opt/k8s/work/kube-prometheus/manifests/
[root@k8s-master01 manifests]# vim prometheus-prometheus.yaml
#这里我们直接修改 prometheus-prometheus.yaml 资源文件,并添加内容如下
secrets:
- etcd-ssl

- 修改完成之后我们直接更新上面的资源文件
# 更新资源文件
kubectl apply -f prometheus-prometheus.yaml
# 查看pod状态
kubectl get pod -n monitoring
# 进入prometheus-k8s-0 Pod中
kubectl exec -it -n monitoring prometheus-k8s-0 -- /bin/sh
# 查看证书
ls /etc/prometheus/secrets/etcd-ssl/

四、创建ServiceMonitor
[root@k8s-master1 manifests]# vim prometheus-serviceMonitorEtcd.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: etcd-k8s
namespace: monitoring
labels:
k8s-app: etcd-k8s
spec:
jobLabel: k8s-app
endpoints:
- port: port
interval: 30s
scheme: https
tlsConfig:
caFile: /etc/prometheus/secrets/etcd-ssl/ca.pem #证书路径 (Pod里的路径)
certFile: /etc/prometheus/secrets/etcd-ssl/etcd.pem
keyFile: /etc/prometheus/secrets/etcd-ssl/etcd-key.pem
insecureSkipVerify: true
selector:
matchLabels:
k8s-app: etcd
namespaceSelector:
matchNames:
- kube-system
- 上面我们匹配
Kube-system
这个命名空间下面具有k8s-app=etcd
这个label标签的Service;由于证书 serverName 和 etcd 中签发的证书可能不匹配,所以添加了insecureSkipVerify=true
将不再对服务端的证书进行校验。
# 创建资源文件
kubectl apply -f prometheus-serviceMonitorEtcd.yaml
# 查看servicemonitors资源
kubectl get servicemonitors -n monitoring |grep etcd
- 等待一会我们打开prometheus web界面,点击
Targets
检查ETCD监控数据

- 通过上图我们已经可以看到prometheus中已经有了ETCD监控项了,但是可以看到ETCD数为0,这是因为还没有关联对应的Service对象,下面我们进行创建Service资源
五、创建Servic原文链接:https://www.dqzboy.com e资源
[root@k8s-master01 manifests]# vim prometheus-EtcdService.yaml
apiVersion: v1
kind: Service
metadata:
name: etcd-k8s
namespace: kube-system
labels:
k8s-app: etcd
spec:
type: ClusterIP
clusterIP: None
ports:
- name: port
port: 2379
protocol: TCP
[root@k8s-master01 manifests]# vim prometheus-EtcdServiceEnpoints.yaml
apiVersion: v1
kind: Endpoints
metadata:
name: etcd-k8s
namespace: kube-system
labels:
k8s-app: etcd
subsets:
- addresses:
- ip: 192.168.66.62 #etcd节点地址
- ip: 192.168.66.63
- ip: 192.168.66.64
ports:
- name: port
port: 2379
protocol: TCP
#创建etcd service资源对象
kubectl apply -f prometheus-EtcdService.yaml
kubectl apply -f prometheus-EtcdServiceEnpoints.yaml
# 查看ETCD状态
kubectl describe svc -n kube-system etcd-k8s
- 创建完成后,稍等一会我们可以去Prometheus 里面查看targets,再次查看则会看到ETCD的监控数据了

六、ETCD监控面板配置
- 数据采集完成后,接下来可以在grafana中导入dashboard
- https://grafana.com/grafana/dashboards/3070


必须 注册 为本站用户, 登录 后才可以发表评论!