云计算 / Kubernetes

Prometheus监控ETCD集群

温馨提示:本文最后更新于2021-03-02 18:52:34,某些文章具有时效性,若有错误或已失效,请在下方留言或提交工单提交工单
浅时光 · 1月10日 · 2021年 · 本文2897个字,预计阅读8分钟 30960次已读

一、监控ETCD流程


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

二、获取ETCD证书


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

[root@k8s-prod-master01 ~]# systemctl status etcd.service -l
1609847619 51838f623fb30d3
文章来源(Source):https://www.dqzboy.com
  • 我们需要创建一个 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
1609847894 ede721520093d7c

三、挂载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
1609847990 aa5452fca5ef9d0
  • 修改完成之后我们直接更新上面的资源文件
# 更新资源文件
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/
1609848042 69ab3013c8327b0

四、创建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=tru文章来源(Source):https://www.dqzboy.come 将不再对服务端的证书进行校验。
# 创建资源文件
kubectl apply -f prometheus-serviceMonitorEtcd.yaml

# 查看servicemonitors资源
kubectl get servicemonitors -n monitoring |grep etcd
  • 等待一会我们打开prometheus web界面,点击Targets检查ETCD监控数据
1609848241 c81fab80fd692e2
  • 通过上图我们已经可以看到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的监控数据了
1609848468 0e3191efd813419

六、ETCD监控面板配置


1609848553 2e3823873db7e73
原文链接:https://www.dqzboy.com
1609848554 d0f85cc8412ff0d



本文作者:浅时光
原文链接:https://www.dqzboy.com/5335.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可
转载时请以超链接形式标明文章原始出处和作者信息

0 条回应

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