Kubernetes 集群监控 ETCD 组件

网友投稿 798 2022-05-28

前言

查看 Etcd 信息

创建 ServiceMonitor

创建 Service & Endpoints

查看 Prometheus 规则

Grafana 引入 ETCD 仪表盘

前言

查看 Etcd 信息

创建 ServiceMonitor

创建 Service & Endpoints

查看 Prometheus 规则

Grafana 引入 ETCD 仪表盘

前言

除了 Kubernetes 集群中的一些资源对象、节点以及组件需要监控,有的时候我们可能还需要根据实际的业务需求去添加自定义的监控项,添加一个自定义监控的步骤也是非常简单的,主要有以下三个步骤:

第一步建立一个 ServiceMonitor 对象,用于 Prometheus 添加监控项;

第二步为 ServiceMonitor 对象关联 metrics 数据接口的一个 Service 对象;

第三步确保 Service 对象可以正确获取到 Metrics 数据;

上面已经配置了 Kubernetes 集群监控 kube-prometheus 部署,但是并没有监控 ETCD 的信息,接下来我们就来为大家演示如何添加 ETCD 集群的监控。无论是 Kubernetes 集群外的还是使用 Kubeadm 安装在集群内部的 ETCD 集群,我们这里都将其视作集群外的独立集群,因为对于二者的使用方法没什么特殊之处。

注意:

ETCD 是 K8S 集群的核心组件,即数据库。

查看 Etcd 信息

获取 Etcd Pod 名称:

Kubernetes 集群监控 ETCD 组件

$ kubectl get pods -n kube-system | grep etcd etcd-k8s-master.novalocal 1/1 Running 0 17h

查看 Etcd 描述信息:

$ kubectl describe pod etcd-k8s-master.novalocal -n kube-system

...... Containers: etcd: Container ID: docker://4ac9ea30de1ea4e0f6f0be10069f7333dff492e17654484dcf11e9c7c73db28e Image: registry.aliyuncs.com/k8sxio/etcd:3.4.3-0 Image ID: docker-pullable://registry.aliyuncs.com/k8sxio/etcd@sha256:4afb99b4690b418ffc2ceb67e1a17376457e441c1f09ab55447f0aaf992fa646 Port: Host Port: Command: etcd --advertise-client-urls=https://172.16.106.200:2379 --cert-file=/etc/kubernetes/pki/etcd/server.crt --client-cert-auth=true --data-dir=/var/lib/etcd --initial-advertise-peer-urls=https://172.16.106.200:2380 --initial-cluster=k8s-master.novalocal=https://172.16.106.200:2380 --key-file=/etc/kubernetes/pki/etcd/server.key --listen-client-urls=https://127.0.0.1:2379,https://172.16.106.200:2379 --listen-metrics-urls=http://0.0.0.0:2381 --listen-peer-urls=https://172.16.106.200:2380 --name=k8s-master.novalocal --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt --peer-client-cert-auth=true --peer-key-file=/etc/kubernetes/pki/etcd/peer.key --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt --snapshot-count=10000 --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt ......

我们可以看到启动参数里面有一个 --listen-metrics-urls=http://127.0.0.1:2381 的配置,该参数就是来指定 Metrics 接口运行在 2381 端口下面的,而且是 http 的协议,所以也不需要什么证书配置,这就比以前的版本要简单许多了,以前的版本需要用 https 协议访问,所以要配置对应的证书。

创建 ServiceMonitor

创建 Prometheus 监控资源,配置用于监控 ETCD 参数:

$ vi 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: 15s selector: matchLabels: k8s-app: etcd namespaceSelector: matchNames: - kube-system

上面我们在 monitoring 命名空间下面创建了名为 etcd-k8s 的 ServiceMonitor 对象,基本属性和前面介绍的一致,匹配 kube-system 这个命名空间下面的具有 k8s-app=etcd 这个 label 标签的 Service,jobLabel 表示用于检索 job 任务名称的标签,由于 etcd 的 metrics 接口在 2381 端口下面,不需要 https 安全认证,所以用默认的配置即可。然后我们直接创建这个 ServiceMonitor 对象即可:

kubectl apply -f prometheus-serviceMonitorEtcd.yaml

创建 Service & Endpoints

但实际上现在并不能监控到 ETCD 集群,因为并没有一个满足 ServiceMonitor 条件的 Service 对象与之关联:

$ kubectl get svc -n kube-system -l k8s-app=etcd No resources found.

因为 ETCD 是独立于集群之外的,所以我们需要创建一个 Endpoints 将其代理到 Kubernetes 集群,然后创建一个 Service 绑定 Endpoints,然后 Kubernetes 集群的应用就可以访问 ETCD 集群了。

$ vi prometheus-etcdService.yaml

apiVersion: v1 kind: Service metadata: name: etcd-k8s namespace: kube-system labels: k8s-app: etcd spec: type: ClusterIP clusterIP: None #设置为None,不分配Service IP ports: - name: port port: 2381 --- apiVersion: v1 kind: Endpoints metadata: name: etcd-k8s namespace: kube-system labels: k8s-app: etcd subsets: - addresses: - ip: 10.151.30.11 # 指定etcd节点地址,如果是集群则继续向下添加 nodeName: etc-master ports: - name: port port: 2381 # Etcd 端口号

我们这里创建的 Service 没有采用前面通过 label 标签的形式去匹配 Pod 的做法,因为前面我们说过很多时候我们创建的 ETCD 集群是独立于集群之外的,这种情况下面我们就需要自定义一个 Endpoints,要注意 metadata 区域的内容要和 Service 保持一致,Service 的 clusterIP 设置为 None,新版本的 etcd 将 metrics 接口数据放置到了 2381 端口。

创建 Service & Endpoints:

$ kubectl apply -f prometheus-etcdService.yaml $ kubectl get svc -n kube-system -l k8s-app=etcd NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE etcd-k8s ClusterIP None 2381/TCP 1m

查看 Prometheus 规则

上述配置完成后,隔一会儿去 Prometheus 的 Dashboard 中查看 targets,便会有 ETCD 的监控项了:

可以看到有一个明显的错误,2381 端口链接被拒绝,这是因为我们这里的 ETCD 的 Metrics 接口是监听在 127.0.0.1 这个 IP 上面的,所以访问会拒绝:

--listen-metrics-urls=http://127.0.0.1:2381

我们只需要在 /etc/kubernetes/manifests/ 目录下面(静态 Pod 默认的目录)的 etcd.yaml 文件中将上面的 listen-metrics-urls 更改成节点 IP 即可:

--listen-metrics-urls=http://0.0.0.0:2381

修改完 ETCD 自动重启生效后,查看 ETCD 这个监控任务就正常了:

Grafana 引入 ETCD 仪表盘

完成 Prometheus 配置后,直接打开 Grafana 页面,引入 Dashboard ,输入编号 “3070” 的仪表盘:

可以看到监控 ETCD 的各个看板:

本文源码:

https://github.com/zuozewei/blog-example/tree/master/Kubernetes/k8s-kube-promethues/etcd

Kubernetes

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MySQL深分页调优实战
下一篇:Midnight Commander (mc) 指南:强大的基于文本的 Unix 文件管理器
相关文章