SOP:Dell R620 温度监控恢复部署(kube-prometheus-stack 大版本升级后)¶
一、背景¶
| 项目 | 内容 |
|---|---|
| 触发事件 | K8s 集群 v1.22 → v1.34.3 升级,kube-prometheus-stack chart 35.5.0 → 87.21.0(app v0.92.1)跨大版本升级 |
| 故障现象 | Dell R620(192.168.0.250) 硬件温度监控在 Grafana 中丢失:无仪表盘、无告警、targets 中无外部 node-exporter |
| 根因 | ① 监控栈 release 名由旧版 prometheus 变更为 kube-prometheus-stack,Prometheus CR 选择器为 release=kube-prometheus-stack,旧自定义资源标签 release=prometheus 不再被选中;② 自定义资源(ServiceMonitor/PrometheusRule/Dashboard ConfigMap)为独立 kubectl apply、不受 helm 管理,升级重建命名空间后被清除;③ Alertmanager 邮件接收器配置随旧 release 丢失 |
| 未受影响 | 192.168.0.250 主机侧:node-exporter Docker 容器(Up 2 days)、ipmi-collector.service(active/enabled)、IPMI 采集数据持续更新——采集端无需重建 |
| 执行日期 | 2026-09-03 |
| 执行后状态 | helm revision 22 deployed,全链路验证通过 |
二、目标¶
- Prometheus 重新抓取 192.168.0.250:9100(external-node-exporter)
- 8 条硬件告警规则(HPR620*)重新加载并触发邮件告警
- Grafana 重新出现「Dell R620 硬件温度监控」仪表盘(uid=hp-r620-temp,8 面板)
- Alertmanager 硬件告警路由到 163 邮箱(hp-r620-email),且不影响既有 slurm 告警路由
三、前置条件¶
- K8s v1.34.3 集群 6 节点全部 Ready,kubeconfig 可用(本机 192.168.0.11 为管理机)
- helm release kube-prometheus-stack(monitoring 命名空间)已部署且 Pod 全部 Running
- chart 包存在:/home/rian/Documents/k8s_ins/monitoring_upgrade/kube-prometheus-stack-87.21.0.tgz
- 192.168.0.250 上 node-exporter 容器与 ipmi-collector 服务正常(已确认)
- 集群内可访问 192.168.0.250:9100(同网段,已确认)
四、目录结构¶
dell-r620_temperature_monitor/
├── inventory.yaml # 集群资产清单
├── dell-r620-temperature-monitoring-report.md # 原始监控配置报告(v2.0)
├── 08-dell-r620-temp-dashboard.yaml # 旧版仪表盘(标签为旧 release 名,仅存档)
└── 监控恢复部署_20260903/
├── SOP_dell-r620监控恢复部署.md # 本文档
├── 1-部署_dell-r620温度监控.sh # 一键部署(含自动备份)
├── 2-验证_监控链路.sh # 全链路验证(含可选测试邮件)
├── 3-回滚_dell-r620监控.sh # 回滚脚本
├── manifests/
│ ├── 01-external-node-exporter.yaml # Service+Endpoints+ServiceMonitor(外部主机静态接入)
│ ├── 02-hp-r620-hardware-alerts.yaml # PrometheusRule 8 条硬件告警
│ ├── 03-hp-r620-temp-dashboard.yaml # Grafana 仪表盘 ConfigMap(sidecar 自动导入)
│ └── 04-alertmanager-邮件路由-values.yaml # helm overlay:hp-r620-email 邮件路由
└── 备份_<时间戳>/ # 部署前自动备份(helm values、alertmanager 配置、CR 现状)
五、分步操作¶
第 1 步:部署(自动备份 + apply + helm upgrade)¶
cd /home/rian/Documents/dell-r620_temperature_monitor/监控恢复部署_20260903
bash 1-部署_dell-r620温度监控.sh
脚本自动完成: 1. 前置检查(kubectl/helm、集群连通、chart 包) 2. 备份 helm get values 与 Alertmanager 当前配置到 备份_<时间戳>/ 3. kubectl apply 三个 manifest(ServiceMonitor / PrometheusRule / Dashboard ConfigMap) 4. helm upgrade(chart 版本不变,仅以 values overlay 注入 alertmanager.config,deep merge 不影响镜像/存储/密码,不影响 slurm 等独立 CR)
第 2 步:验证¶
bash 2-验证_监控链路.sh # 交互处输入 n 可跳过测试邮件
第 3 步:(可选)测试告警邮件¶
验证脚本最后一步输入 y,或手动:
kubectl port-forward -n monitoring svc/kube-prometheus-stack-alertmanager 19093:9093 &
NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ)
curl -s -X POST "http://127.0.0.1:19093/api/v2/alerts" -H "Content-Type: application/json" \
-d "[{\"labels\":{\"alertname\":\"HPR620TestEmail\",\"severity\":\"warning\",\"category\":\"hardware\",\"instance\":\"192.168.0.250:9100\"},\"annotations\":{\"summary\":\"测试邮件\"},\"startsAt\":\"${NOW}\"}]"
# 查投递计数(requests 增长、failed 为 0 即成功)
kubectl exec -n monitoring alertmanager-kube-prometheus-stack-alertmanager-0 -c alertmanager -- \
wget -qO- http://localhost:9093/metrics | grep notification_requests
六、验证结果(2026-09-03 实测)¶
| 验证项 | 结果 |
|---|---|
| ServiceMonitor/PrometheusRule/ConfigMap | 均创建成功 |
| Prometheus target | job=external-node-exporter instance=192.168.0.250:9100 health=up |
| IPMI 指标入库 | cpu1=69°C / cpu2=63°C / exhaust=41°C / inlet=26°C(温度与风扇序列正常) |
| 告警规则 | 8 条 HPR620* 规则全部加载,状态 inactive(未触发=正常) |
| Alertmanager | hp-r620-email 接收器、category=hardware 路由生效;slurm-email 路由保留 |
| 测试邮件 | HPR620TestEmail 路由到 hp-r620-email;notification_requests_total{integration="email"} 增长,notification_requests_failed_total{integration="email"}=0 |
| Grafana | v13.1.1 health ok;仪表盘「Dell R620 硬件温度监控」uid=hp-r620-temp,8 面板已由 sidecar 自动导入 |
Grafana 访问:Traefik IngressRoute 域名 grafana.rainchen.top(见 /home/rian/Documents/k8s_ins/monitoring_upgrade/grafana-ingress.yaml),或 kubectl port-forward -n monitoring svc/kube-prometheus-stack-grafana 13000:80,登录 admin / Grafana@2026。
七、回滚步骤¶
bash 3-回滚_dell-r620监控.sh
脚本执行(需输入 y 确认): 1. 删除 external-node-exporter(ServiceMonitor + Service + Endpoints) 2. 删除 hp-r620-hardware-alerts(PrometheusRule) 3. 删除 hp-r620-temp-dashboard(ConfigMap) 4. Alertmanager 配置:优先用最近一次 备份_<时间戳>/alertmanager-变更前配置.yaml 恢复 secret(operator 约 30 秒内自动 reload,不重启);无备份时自动 helm rollback 到上一 revision
说明:回滚仅影响 K8s 侧监控配置;192.168.0.250 主机侧采集端不受任何影响。
八、风险说明¶
| 风险点 | 影响 | 缓解措施 |
|---|---|---|
| helm upgrade 更新 release | 仅 alertmanager secret 变更触发 reload,无 Pod 重启 | chart 版本不变;values 基于当前 live 配置导出后 deep merge;已自动备份 |
| 自定义资源标签错误 | Prometheus 不选中则 target/规则不生效 | 统一使用 release=kube-prometheus-stack(与 Prometheus CR 选择器一致),已验证 |
| Alertmanager 路由冲突 | 硬件/slurm 告警错发 | 使用 category=hardware 与 slurm 的 category=slurm 互斥匹配,slurm 配置原样保留 |
| 163 邮箱授权码失效 | 邮件发不出 | SMTP 配置沿用原授权码;测试邮件 failed=0 |
| v1 Endpoints 弃用警告 | K8s v1.33+ 提示 deprecated,v1.34 仍完全兼容(EndpointSlice 镜像控制器自动同步) | 当前功能正常;后续平台再升级时可改用 discovery.k8s.io/v1 EndpointSlice |
| 历史监控数据 | 升级期间 TSDB 数据不连续(升级时已知并接受) | PVC 为 NFS Retain,新数据正常写入,保留 15 天 |
九、日常运维速查¶
# 查外部 target 抓取状态
kubectl port-forward -n monitoring svc/kube-prometheus-stack-prometheus 19090:9090 &
curl -s 'http://127.0.0.1:19090/api/v1/targets' | grep -o 'external-node-exporter[^,]*'
# 查温度当前值
curl -s -G 'http://127.0.0.1:19090/api/v1/query' --data-urlencode 'query=ipmi_temperature_celsius'
# 采集端自检(192.168.0.250)
ssh root@192.168.0.250 'systemctl status ipmi-collector; docker ps | grep node-exporter; curl -s localhost:9100/metrics | grep -c ipmi_'
来源:
/home/rain/Documents/k8s_ins/dell-r620_temperature_monitor/监控恢复部署_20260903/SOP_dell-r620监控恢复部署.md| 最后更新:2026-09-03 21:42(由build/sync.py同步,请勿在站点侧修改)