本文永久链接: https://www.xtplayer.cn/rancher/monitors/rancher-monitors-collection-external-etcd-data/

目前,rancher 自带监控暂时只支持收集 rancher 自定义集群的 ETCD 监控数据。对于 rke 创建并导入或者其他工具创建并导入的 k8s 集群,因为架构的差异,暂时不能直接支持监控 ETCD 监控数据。

rancher 内置监控也是通过 prometheus-operator 部署,只需要自定义一些 serviceMonitor 配置即可实现其他类型集群 ETCD 监控数据收集。

方案介绍

serviceMonitor 是通过对 service 获取数据的一种方式。prometheus-operator 可以通过 serviceMonitor 自动识别带有某些 label 的 service,并从这些 service 获取数据。serviceMonitor 也是由 prometheus-operator 自动发现。

对应一些启用 ssl 认证的服务,需要提供 ssl 证书给 prometheus 用以进行认证 。首先创建一个 secret 用来存放 ssl 证书,再把证书挂载到 prometheus 容器内。接下来创建 ServiceMonitor 对象,用于 Prometheus 添加监控项,再为 ServiceMonitor 对象关联 metrics 数据接口对应的 Service 对象,确保通过 Service 对象可以正确获取到 metrics 数据。

创建 Secrets 挂载证书

在 ETCD 节点中,通过以下命令去创建 ETCD 证书密文:

kubectl create secret generic exporter-etcd-cert -n cattle-prometheus \
--from-file=exporter-etcd-ca.pem=< etcd ca 文件路径 > \
--from-file=exporter-etcd-key.pem=< etcd key 文件路径 > \
--from-file=exporter-etcd-cert.pem=< etcd 证书文件路径 >

添加 Secrets 到 Prometheus 容器

依次进入 集群|工具|监控 ,在监控配置页面点击右下角的 显示高级选项。添加 添加应答,添加以下应答:

prometheus.secrets[0]=exporter-etcd-cert
# 如果有多个密文,则依次叠加
prometheus.secrets[1]=xxxx

创建 etcd-server svc,把外部 etcd 服务引入 k8s 集群

  1. 访问 system 项目|服务发现,统计 添加 DNS 记录

  2. 选择 外部 IP 地址,并在右侧的 目标 IP 地址 填写 etcd 节点 ip,命名空间选择 cattle-prometheus

  3. 点击右侧 显示高级选项

    1. 类型选择 headless service

    2. 添加端口映射

  4. 在底部 标签与注释 中添加以下两个标签,最后点击创建。

    jobLabel=exporter-etcd-server
    app=exporter-etcd-server

创建 etcd ServiceMonitor 对象

保存以下内容为:prometheus-serviceMonitorEtcd.yaml,然后执行 kubectl apply -f prometheus-serviceMonitorEtcd.yaml

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: exporter-etcd-server-monitoring
namespace: cattle-prometheus
labels:
app: exporter-etcd-server
spec:
jobLabel: external-etcd-server # exporter-etcd-server svc 的标签 jobLabel=exporter-etcd-server
endpoints:
- port: https-2379 # 此处的设置需要与 etcd-server svc 中端口映射的 name 对应
scheme: https
interval: 30s
tlsConfig: # 此处的证书路径与密文挂载到 prometheus 容器中的路径一致
caFile: /etc/prometheus/secrets/exporter-etcd-cert/exporter-etcd-ca.pem
certFile: /etc/prometheus/secrets/exporter-etcd-cert/exporter-etcd-cert.pem
keyFile: /etc/prometheus/secrets/exporter-etcd-cert/exporter-etcd-key.pem
insecureSkipVerify: true
namespaceSelector:
matchNames:
- cattle-prometheus # exporter-etcd-server svc 所在的命名空间
selector:
matchLabels:
app: exporter-etcd-server # exporter-etcd-server svc 的标签

验证 prometheus 状态

  1. 点击 system 项目|应用商店 的访问入口,进入 prometheus 管理界面

  2. 点击 Status|Targets 和 Status|Service Discovery 查看状态

验证 Grafana 状态

  • 与 prometheus 相同, 点击 system 项目|应用商店 的访问入口,进入 Grafana 管理界面,点击左上角的 Home

  • 接着点击 ETCD。

  • 如果结果如下图显示,则说明数据可以正常显示,配置成功。