跳转至

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,全链路验证通过

二、目标

  1. Prometheus 重新抓取 192.168.0.250:9100(external-node-exporter)
  2. 8 条硬件告警规则(HPR620*)重新加载并触发邮件告警
  3. Grafana 重新出现「Dell R620 硬件温度监控」仪表盘(uid=hp-r620-temp,8 面板)
  4. Alertmanager 硬件告警路由到 163 邮箱(hp-r620-email),且不影响既有 slurm 告警路由

三、前置条件

  1. K8s v1.34.3 集群 6 节点全部 Ready,kubeconfig 可用(本机 192.168.0.11 为管理机)
  2. helm release kube-prometheus-stack(monitoring 命名空间)已部署且 Pod 全部 Running
  3. chart 包存在:/home/rian/Documents/k8s_ins/monitoring_upgrade/kube-prometheus-stack-87.21.0.tgz
  4. 192.168.0.250 上 node-exporter 容器与 ipmi-collector 服务正常(已确认)
  5. 集群内可访问 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 同步,请勿在站点侧修改)