跳转至

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)

二、前置条件

  1. 新栈已部署且 Pod 正常:kubectl get pods -n monitoring(prometheus / alertmanager / grafana 均 Running)。
  2. 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
  3. 管理工作站(192.168.0.11)具备 kubectl、curl、python3。
  4. 确认新栈选择器标签(本次实测值): 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 作业运行。


六、风险说明

  1. 低风险变更:全部为 monitoring 命名空间内新增/覆盖 slurm 相关资源,不改动 kube-prometheus-stack 本体与任何 k8s 系统组件;SLURM 集群运行完全不受影响。
  2. 唯一覆盖项:Alertmanager 用户配置 secret(覆盖前已自动备份到 备份/ 目录,可一键还原)。
  3. Endpoints deprecated 警告:k8s 1.33+ 提示 v1 Endpoints 弃用,当前 endpointslicemirroring 控制器仍自动镜像且实测生效;未来 k8s 版本若移除镜像控制器,需改为直接创建 EndpointSlice (ServiceMonitor 不变)。
  4. Prometheus 3 distroless 镜像:容器内无 shell/wget/curl,所有在 Pod 内执行 wget 的旧 排障命令均失效,统一改用 kubectl port-forward + 本机 curl(脚本已封装)。
  5. 告警噪声说明:新栈默认开启了 etcd/KCM/scheduler/kube-proxy 控制面告警,因这些组件 metrics 绑定 localhost 无法抓取而处于 active 状态,均路由到 null 接收器(不发邮件), 与旧版治理思路一致;如需消除,可参照旧 SOP 在 values.yaml 将对应组件设为 enabled: false。
  6. 邮件通道: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 同步,请勿在站点侧修改)