Kubernetes / 云计算

Prometheus监控ETCD集群

浅时光 · 1月10日 · 2021年 · 11984次已读

一、监控ETCD流程


  • 第一步:建立一个 ServiceMonitor 资源对象,用于 Prometheus 添加监控项;
  • 第二步:为 ServiceMonitor 对象关联 metrics 数据接口的一个 Service 对象;
  • 第三步:确保 Service 对象可以正确获取到 metrics 数据。

二、获取ETCD证书

文章来源(Source):浅时光博客

对于 Etcd 集群来说,我们在搭建的时候就采用了通过https证书认证的方式(这也是K8S中强烈建议的),所以如果想通过Kube-Prometheus 访问到 etcd 集群中的监控数据,就需要添加证书。我们可以通过 systemctl status etcd 查看证书路径:

[root@k8s-prod-master01 ~]# systemctl status etcd.service -l
Prometheus监控ETCD集群-浅时光博客
  • 我们需要创建一个 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
文章来源(Source):https://www.dqzboy.com
  • 创建以后我们可以通过下面的命令来检查
文章来源(Source):https://www.dqzboy.com
[root@k8s-master01 ~]# kubectl describe secrets -n monitoring etcd-ssl
Prometheus监控ETCD集群-浅时光博客

三、挂载ETCD证书


  • 我们可以看到证书已经创建成功,然后我们将 etcd-ssl secret 对象配置到 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
Prometheus监控ETCD集群-浅时光博客
  • 修改完成之后我们直接更新上面的资源文件
# 更新资源文件
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/
Prometheus监控ETCD集群-浅时光博客

四、创建ServiceMonitor文章来源(Source):浅时光博客


[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集群-浅时光博客
  • 通过上图我们已经可文章来源(Source):浅时光博客以看到prometheus中已经有了ETCD监控项了,但是可以看到ETCD数为0,这是因为还没有关联对应的Service对象,下面我们进行创建Service资源

五、创建Service资源


[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的监控数据了
Prometheus监控ETCD集群-浅时光博客

六、ETCD监控面板配置


Prometheus监控ETCD集群-浅时光博客
Prometheus监控ETCD集群-浅时光博客
Prometheus监控ETCD集群-浅时光博客
0 条回应
    本站已安全运行: | 耗时 0.323 秒 | 查询 124 次 | 内存 17.10 MB