SLURM 监控迁移至新版 kube-prometheus-stack (chart 35.x → 87.x) SOP¶
项目: SLURM 集群监控在 k8s 监控栈大版本升级后的重新对接 执行日期: 2026-09-03 旧栈: kube-prometheus-stack chart 35.x(release 名
prometheus,Prometheus 2.x / Grafana 11.4 / Alertmanager 0.26) 新栈: kube-prometheus-stack chart 87.21.0(release 名kube-prometheus-stack,operator v0.92.1,Prometheus 3.13.1 / Grafana 13.1.1 / Alertmanager 0.33.1,k8s v1.34.3) 最终状态: 全链路已打通并验证通过 ✅ — 采集 target up / 8 条规则加载 / 大盘 18 面板自动导入 / 测试邮件发送成功(notifications_total=1, failed=0)
一、背景与目标¶
k8s 集群监控栈从 chart 35.x 跨越式升级到 87.x(release 名由 prometheus 改为 kube-prometheus-stack),
升级后 monitoring 命名空间被重建,旧版手工部署的 SLURM 监控资源(Service/Endpoints/ServiceMonitor/
PrometheusRule/大盘 ConfigMap)全部丢失,Alertmanager 也回到仅 null 接收器的默认配置。
目标:把运行在 SLURM 主节点 192.168.0.2 上的 slurm-exporter(:9261)重新接入新栈,恢复 「指标采集 → Grafana 大盘 → 邮件告警」完整闭环,且配置可经未来 helm upgrade 留存。
1.1 新旧版本差异对照表(本次适配的核心)¶
| 项目 | 旧版 chart 35.x | 新版 chart 87.x | 迁移动作 |
|---|---|---|---|
| Helm release 名 | prometheus |
kube-prometheus-stack |
所有资源标签 release 同步改名 |
| Prometheus CR 选择器 | release: prometheus |
release: kube-prometheus-stack |
ServiceMonitor / PrometheusRule 必须改标签,否则不被选中 |
| Prometheus Pod | prometheus-prometheus-kube-prometheus-prometheus-0 |
prometheus-kube-prometheus-stack-prometheus-0 |
验证命令改名 |
| Prometheus 镜像 | 2.x(含 wget/sh) | 3.13.1 distroless(无 wget/curl/sh) | 验证改用 kubectl port-forward + 本机 curl |
| Alertmanager Pod | alertmanager-prometheus-kube-prometheus-alertmanager-0 |
alertmanager-kube-prometheus-stack-alertmanager-0 |
命令改名 |
| Alertmanager 版本 | 0.26.0 | 0.33.1(仍 Go net/smtp,25+STARTTLS 方案照旧有效) | 配置内容不变,secret 名改名 |
| AM 配置 secret | alertmanager-prometheus-kube-prometheus-alertmanager |
alertmanager-kube-prometheus-stack-alertmanager |
应用目标改名 |
| Grafana | Deployment prometheus-grafana,Grafana 11 |
Deployment kube-prometheus-stack-grafana,Grafana 13 |
命令改名 |
| Grafana 数据源 UID | prometheus |
prometheus(未变) |
大盘 JSON 无需改数据源 |
| 大盘 sidecar 标签 | grafana_dashboard=1 |
grafana_dashboard=1(未变,watch 全命名空间) |
照旧打标 |
| 服务发现 | Endpoints | operator 基于 EndpointSlice;手工 Endpoints 仍由镜像控制器自动生成 EndpointSlice(k8s 1.34 实测生效,有 deprecated 警告) | 保持手工 Endpoints,已验证自动镜像 |
1.2 最终架构(与旧版一致,仅组件名变化)¶
SLURM 主节点 k8s-master-01 (192.168.0.2)
└── slurm_exporter systemd :9261(62 项 slurm_ 指标,无需重装)
│ flannel pod 网络 10.244.x.x 经节点 SNAT 访问(已实测 HTTP 200)
▼
Kubernetes monitoring 命名空间(chart 87.21.0)
├── Service/Endpoints/ServiceMonitor: slurm-exporter(标签 release=kube-prometheus-stack)
├── Prometheus 3.13.1:target up,slurm_cpus_total=48
├── PrometheusRule: slurm-alerts(8 条,category=slurm)
├── Grafana 13.1.1:sidecar 自动导入「SLURM 集群监控」大盘(18 面板)
└── Alertmanager 0.33.1:category=slurm → slurm-email → saier_cy@163.com(25+STARTTLS)
二、前置条件¶
- 新栈已部署且 Pod 正常:
kubectl get pods -n monitoring(prometheus / alertmanager / grafana 均 Running)。 - SLURM 主节点 exporter 存活(升级 k8s 不影响该 systemd 服务):
bash ssh root@192.168.0.2 'systemctl is-active slurm-exporter && curl -s http://127.0.0.1:9261/metrics | grep -c "^slurm_"' # 期望: active / 62 - 管理工作站(192.168.0.11)具备 kubectl、curl、python3。
- 确认新栈选择器标签(本次实测值):
bash kubectl get prometheus -n monitoring -o jsonpath='{.items[0].spec.serviceMonitorSelector}{"\n"}{.items[0].spec.ruleSelector}{"\n"}' # 期望: {"matchLabels":{"release":"kube-prometheus-stack"}} 两行
三、分步操作(一键脚本已封装)¶
本目录文件清单:
| 文件 | 作用 |
|---|---|
01-slurm-exporter-k8s-v87.yaml |
Service + 手工 Endpoints(192.168.0.2:9261) + ServiceMonitor(release 标签已适配) |
02-slurm-alerts-v87.yaml |
8 条 SLURM PrometheusRule(release 标签已适配,PromQL 与 Prometheus 3 兼容) |
03-slurm-dashboard.json |
Grafana 大盘 JSON(uid=slurm-cluster-overview,数据源 uid=prometheus,18 面板) |
04-alertmanager-slurm.yaml |
Alertmanager 邮件路由(25+STARTTLS,category=slurm → slurm-email) |
deploy-slurm监控-新版k8s.sh |
一键部署脚本(前置检查→备份→部署→全链路验证) |
rollback-slurm监控.sh |
一键回滚脚本(删除资源 + 从备份恢复 AM secret) |
备份/迁移前备份_<时间戳>/ |
部署前自动导出的现存资源与 AM secret |
执行:
cd slurm监控迁移k8s新版_20260903
bash deploy-slurm监控-新版k8s.sh
脚本内部步骤:
1. 前置检查:kubectl 连通性、新栈 Pod 存在、exporter 可达;
2. 备份:现存 slurm 相关资源 + Alertmanager secret 导出到 备份/ 目录;
3. kubectl apply 采集层清单(Service/Endpoints/ServiceMonitor),等待 operator 同步并确认 EndpointSlice 自动镜像;
4. kubectl apply 告警规则 PrometheusRule;
5. 大盘 ConfigMap 创建并打标 grafana_dashboard=1(sidecar 约 20 秒内自动导入 Grafana);
6. Alertmanager 配置写入 secret alertmanager-kube-prometheus-stack-alertmanager,amtool check-config 校验;
7. 全链路验证(见下节)。
Helm values 持久化(防下次 helm upgrade 覆盖)¶
Alertmanager 邮件配置已存在于 helm values 文件中(升级时未生效):
/home/rian/Documents/rain/k8s/helm-template/monitor/kube-prometheus-stack/values.yaml
第 189–225 行 alertmanager.config 段内容与 04-alertmanager-slurm.yaml 一致。
下次 helm upgrade 务必带 -f values.yaml,否则 AM 配置会回到默认 null 接收器;
若被覆盖,重跑部署脚本步骤 5(或直接重跑整个脚本,幂等)即可恢复。
四、验证结果(2026-09-03 实测)¶
| # | 验证项 | 方法 | 实测结果 |
|---|---|---|---|
| 1 | exporter 存活 | ssh root@192.168.0.2 'systemctl is-active slurm-exporter' |
active,62 项指标 |
| 2 | pod 网络可达 | grafana sidecar python urllib 访问 192.168.0.2:9261 | HTTP 200,62 行 slurm_ 指标 |
| 3 | EndpointSlice 镜像 | kubectl get endpointslices -n monitoring -l kubernetes.io/service-name=slurm-exporter |
自动生成 ✅ |
| 4 | Prometheus target | port-forward 后 /api/v1/targets |
http://192.168.0.2:9261/metrics health=up job=slurm-exporter |
| 5 | 指标可查 | /api/v1/query?query=slurm_cpus_total |
48(instance=192.168.0.2:9261) |
| 6 | 告警规则 | /api/v1/rules |
8 条 Slurm* 规则全部加载,state=inactive |
| 7 | Grafana 大盘 | /api/dashboards/uid/slurm-cluster-overview |
「SLURM 集群监控」version=1,18 面板,数据源 prometheus |
| 8 | AM 配置 | amtool check-config |
SUCCESS;渲染配置含 smtp.163.com:25 与 slurm-email 接收器 |
| 9 | AM 路由 | amtool config routes test ... category=slurm |
路由结果 slurm-email |
| 10 | 邮件链路 | 投递测试告警 SlurmEmailTest | alertmanager_notifications_total{integration="email"} 1,各 failed 计数均 0;已收到告警/恢复两封邮件 |
日常访问 Grafana:
kubectl port-forward -n monitoring svc/kube-prometheus-stack-grafana 13000:80
# 浏览器 http://127.0.0.1:13000 admin / Rain--4630(或取 secret:kubectl get secret kube-prometheus-stack-grafana -n monitoring -o jsonpath='{.data.admin-password}' | base64 -d)
# 大盘:SLURM 集群监控(uid: slurm-cluster-overview)
五、回滚方案¶
cd slurm监控迁移k8s新版_20260903
bash rollback-slurm监控.sh
回滚内容(原子、幂等):
1. 删除 ServiceMonitor / Service / Endpoints / PrometheusRule / 大盘 ConfigMap(--ignore-not-found);
2. 用 备份/迁移前备份_<最新时间戳>/secret_alertmanager-*.yaml 恢复 Alertmanager 配置;
3. SLURM 主节点 exporter 的 systemd 服务不受影响(如需停用:ssh root@192.168.0.2 'systemctl disable --now slurm-exporter')。
回滚影响面:仅 monitoring 命名空间内 slurm 相关资源;不触碰 k8s 组件、不影响 SLURM 作业运行。
六、风险说明¶
- 低风险变更:全部为 monitoring 命名空间内新增/覆盖 slurm 相关资源,不改动 kube-prometheus-stack 本体与任何 k8s 系统组件;SLURM 集群运行完全不受影响。
- 唯一覆盖项:Alertmanager 用户配置 secret(覆盖前已自动备份到
备份/目录,可一键还原)。 - Endpoints deprecated 警告:k8s 1.33+ 提示 v1 Endpoints 弃用,当前 endpointslicemirroring 控制器仍自动镜像且实测生效;未来 k8s 版本若移除镜像控制器,需改为直接创建 EndpointSlice (ServiceMonitor 不变)。
- Prometheus 3 distroless 镜像:容器内无 shell/wget/curl,所有在 Pod 内执行 wget 的旧
排障命令均失效,统一改用
kubectl port-forward+ 本机 curl(脚本已封装)。 - 告警噪声说明:新栈默认开启了 etcd/KCM/scheduler/kube-proxy 控制面告警,因这些组件
metrics 绑定 localhost 无法抓取而处于 active 状态,均路由到
null接收器(不发邮件), 与旧版治理思路一致;如需消除,可参照旧 SOP 在 values.yaml 将对应组件设为enabled: false。 - 邮件通道:163 邮箱使用 25 + STARTTLS(Alertmanager 的 Go net/smtp 不支持 465 隐式 TLS),
授权码失效时仅需更新
04-alertmanager-slurm.yaml中smtp_auth_password后重跑脚本步骤 5。
七、变更记录¶
| 日期 | 内容 |
|---|---|
| 2026-09-03 | chart 35.x→87.21.0 迁移:release 标签适配、Prometheus 3/Grafana 13/AM 0.33 兼容验证、全链路打通 |
来源:
/home/rain/Documents/slurm/slurm_monitoring_prometheus/slurm监控迁移k8s新版_20260903/SOP-slurm监控迁移k8s-prometheus87.md| 最后更新:2026-09-03 20:48(由build/sync.py同步,请勿在站点侧修改)