之前有一个是使用docker-compose部署的exporter服务.这篇文章使用deploy部署服务.
先看下配置信息
直接上yaml文件,这里为了简单,将所有的配置都写到了一个文件中,这里只是做了配置,后面才是创建相关信息,以及展开说明了下各个项目的配置
[root@prometheus-operator /zpf/prometheus/exporter]$cat deploy-all.yaml
---
# ConfigMap 配置:存储 MySQL Exporter 的连接配置
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-exporter-config # ConfigMap 名称
namespace: monitoring # 部署在 monitoring 命名空间
data:
my.cnf: | # 配置文件内容,会被挂载到容器中
[client]
host=192.168.59.21 # MySQL 服务器地址
user=app # 连接用户名
password=mysql # 连接密码
port=3306 # MySQL 端口
# Deployment 配置:定义 MySQL Exporter 的部署方式
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-exporter # Deployment 名称
namespace: monitoring # 部署在 monitoring 命名空间
labels:
app: mysql-exporter # 标签,用于 Service 和 ServiceMonitor 选择
spec:
replicas: 1 # 副本数量
selector:
matchLabels:
app: mysql-exporter # 选择器,匹配 Pod 标签
template:
metadata:
labels:
app: mysql-exporter # Pod 标签,与 selector 匹配
spec:
imagePullSecrets:
- name: aliyun-docker-images-registry # 私有镜像拉取密钥
containers:
- name: mysql-exporter
image: registry.cn-beijing.aliyuncs.com/scorpio/mysqld-exporter:0.17.2 # 镜像地址
args: # 启动参数
- "--collect.info_schema.processlist" # 启用各种收集器
- "--collect.info_schema.innodb_metrics"
- "--collect.info_schema.tablestats"
- "--collect.info_schema.tables"
- "--collect.info_schema.userstats"
- "--collect.engine_innodb_status"
- "--config.my-cnf=/etc/mysql/my.cnf" # 指定配置文件路径
ports:
- containerPort: 9104 # 容器暴露的端口
volumeMounts:
- name: config-volume # 挂载 ConfigMap 到容器
mountPath: /etc/mysql
volumes:
- name: config-volume # 定义 volume,来源是 ConfigMap
configMap:
name: mysql-exporter-config # 引用上面定义的 ConfigMap
# Service 配置:为 MySQL Exporter 创建服务端点
---
apiVersion: v1
kind: Service
metadata:
name: mysql-exporter # Service 名称
namespace: monitoring # 部署在 monitoring 命名空间
labels:
app: mysql-exporter # 标签,用于 ServiceMonitor 选择
spec:
selector: # 选择器,关联到 Deployment 的 Pod
app: mysql-exporter # 匹配 Deployment 中定义的 Pod 标签
ports:
- name: http-metrics # 端口名称,被 ServiceMonitor 引用
port: 9104 # Service 端口
targetPort: 9104 # 目标容器端口
protocol: TCP
type: ClusterIP # 服务类型,集群内部访问
# ServiceMonitor 配置:告诉 Prometheus 如何发现和抓取指标
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: mysql-exporter # ServiceMonitor 名称
namespace: monitoring # 部署在 monitoring 命名空间
spec:
endpoints:
- port: http-metrics # 引用 Service 中定义的端口名称
interval: 15s # 抓取间隔
selector:
matchLabels:
app: mysql-exporter # 选择器,匹配 Service 的标签
namespaceSelector:
matchNames:
- monitoring # 只监控 monitoring 命名空间中的服务
说明一下各部分的作用:
部署ConfigMap
用于后面deploy文件的挂载,实现mysql-client的配置持久化
#配置一个Configmap,将mysql-client需要的配置信息,后面会以configmap的形式挂载到deploy中,
# ConfigMap 配置:存储 MySQL Exporter 的连接配置
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-exporter-config # ConfigMap 名称
namespace: monitoring # 部署在 monitoring 命名空间
data:
my.cnf: | # 配置文件内容,会被挂载到容器中
[client]
host=192.168.59.21 # MySQL 服务器地址
user=app # 连接用户名
password=mysql # 连接密码
port=3306 # MySQL 端口
创建DeployMent,是mysqld-exporter的工作容器主体
# Deployment 配置:定义 MySQL Exporter 的部署方式
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-exporter # Deployment 名称
namespace: monitoring # 部署在 monitoring 命名空间
labels:
app: mysql-exporter # 标签,用于 Service 和 ServiceMonitor 选择
spec:
replicas: 1 # 副本数量
selector:
matchLabels:
app: mysql-exporter # 选择器,匹配 Pod 标签
template:
metadata:
labels:
app: mysql-exporter # Pod 标签,与 selector 匹配
spec:
imagePullSecrets:
- name: aliyun-docker-images-registry # 私有镜像拉取密钥
containers:
- name: mysql-exporter
image: registry.cn-beijing.aliyuncs.com/scorpio/mysqld-exporter:0.17.2 # 镜像地址
args: # 启动参数
- "--collect.info_schema.processlist" # 启用各种收集器
- "--collect.info_schema.innodb_metrics"
- "--collect.info_schema.tablestats"
- "--collect.info_schema.tables"
- "--collect.info_schema.userstats"
- "--collect.engine_innodb_status"
- "--config.my-cnf=/etc/mysql/my.cnf" # 指定配置文件路径
ports:
- containerPort: 9104 # 容器暴露的端口
volumeMounts:
- name: config-volume # 挂载 ConfigMap 到容器
mountPath: /etc/mysql
volumes:
- name: config-volume # 定义 volume,来源是 ConfigMap
configMap:
name: mysql-exporter-config # 引用上面定义的 ConfigMap
创建Service,用于代理上面创建的deploy服务对外提供访问用
# Service 配置:为 MySQL Exporter 创建服务端点
---
apiVersion: v1
kind: Service
metadata:
name: mysql-exporter # Service 名称
namespace: monitoring # 部署在 monitoring 命名空间
labels:
app: mysql-exporter # 标签,用于 ServiceMonitor 选择
spec:
selector: # 选择器,关联到 Deployment 的 Pod
app: mysql-exporter # 匹配 Deployment 中定义的 Pod 标签
ports:
- name: http-metrics # 端口名称,被 ServiceMonitor 引用
port: 9104 # Service 端口
targetPort: 9104 # 目标容器端口
protocol: TCP
type: ClusterIP # 服务类型,集群内部访问
创建operator使用的Monitoring资源,
创建这个资源服务的作用是将已经对外提供的服务让prometheus-operator读取到.
也就是prometheus知道从哪里拉取监控数据
# ServiceMonitor 配置:告诉 Prometheus 如何发现和抓取指标
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: mysql-exporter # ServiceMonitor 名称
namespace: monitoring # 部署在 monitoring 命名空间
spec:
endpoints:
- port: http-metrics # 引用 Service 中定义的端口名称
interval: 15s # 抓取间隔
selector:
matchLabels:
app: mysql-exporter # 选择器,匹配 Service 的标签
namespaceSelector:
matchNames:
- monitoring # 只监控 monitoring 命名空间中的服务
创建上面的各项服务
创建资源
#创建资源
[root@prometheus-operator /zpf/prometheus/exporter]$kubectl create -f deploy-all.yaml
service/mysql-exporter created
servicemonitor.monitoring.coreos.com/mysql-exporter created
configmap/mysql-exporter-config created
deployment.apps/mysql-exporter created
查看各部分创建结果
#查看ConfigMap创建结果
[root@prometheus-operator /zpf/prometheus/exporter]$kubectl get cm -A|grep mysql
monitoring mysql-exporter-config 1 67s
#查看创建详细信息
[root@prometheus-operator /zpf/prometheus/exporter]$kubectl get cm -n monitoring mysql-exporter-config -o yaml
apiVersion: v1
data:
my.cnf: |
[client]
host=192.168.59.21
user=app
password=mysql
port=3306
kind: ConfigMap
metadata:
creationTimestamp: "2025-04-22T03:09:31Z"
name: mysql-exporter-config
namespace: monitoring
resourceVersion: "8080337"
uid: 3829a17f-ab58-451f-bffb-614212e9811d
#查看deploy创建结果
[root@prometheus-operator /zpf/prometheus/exporter]$kubectl get deploy -A|grep mysql
monitoring mysql-exporter 1/1 1 1 76s
#查看service创建结果
[root@prometheus-operator /zpf/prometheus/exporter]$kubectl get svc -A|grep mysql
monitoring mysql-exporter ClusterIP 10.233.37.86 <none> 9104/TCP 82s
#查看ServiceMonitor创建结果
[root@prometheus-operator /zpf/prometheus/exporter]$kubectl get ServiceMonitor -A|grep mysql
monitoring mysql-exporter 2m1s
验证页面是否已经抓取到exporter的相关信息
页面已经可以展示mysql-exporter的相关信息.