摘要:helm 一条命令装 kube-prometheus-stack 背后:镜像 404、PVC 卡死、Alertmanager 配置静默失败……8 个真实坑与修复脚本,国内环境 K3s 装监控的避坑指南。
监控是运维的眼睛,但装监控的过程常常先把人搞瞎。本文记录在 2 节点 K3s(华为云 ECS)上部署 kube-prometheus-stack + Grafana 的完整过程:helm 一条命令背后,是 8 个真实的坑——镜像被墙、PVC 卡死、StatefulSet 静默缺失……每一个都附修复方案与脚本。这是《4 台华为云 ECS 实战》系列第 2 篇。
目标架构
kube-prometheus-stack(helm, 资源裁剪版)
├── Prometheus Server(retention 3d/4GB)
├── Alertmanager(webhook → AI SRE → 钉钉)
├── Grafana(NodePort 30300, PVC 5Gi)
├── kube-state-metrics
└── node-exporter × 2(DaemonSet)
helm 安装与资源裁剪
16G 内存要跑监控全家桶 + 业务,必须裁:
# prom-values.yaml 关键项
prometheus:
prometheusSpec:
retention: 3d
retentionSize: 4GB
resources:
requests: {cpu: 200m, memory: 768Mi}
alertmanager:
config:
route:
receiver: 'webhook'
receivers:
- name: 'webhook'
webhook_configs:
- url: 'http://192.168.0.219:9091/webhook' # AI SRE
send_resolved: true
grafana:
service: {type: NodePort, nodePort: 30300}
persistence: {enabled: true, storageClassName: local-path, size: 5Gi}
helm upgrade --install mon kube-prometheus-stack-93.2.2.tgz \
-f prom-values.yaml -n monitoring --create-namespace
8 个坑与修复(本篇精华)
坑 1:chart 从 GitHub 拉不下来
helm pull 走 github.com release 下载,5Mbps 公网 + 国际链路抖动 = 重试 12 次全挂。
修复:本地下载 chart tgz(约 1MB)→ SFTP 上传 → helm install 用本地路径。
helm upgrade --install mon /root/campaign/charts/kube-prometheus-stack-93.2.2.tgz ...
坑 2:docker.io 直连超时
kubelet 拉镜像卡 ContainerCreating 十几分钟,kubectl describe 看到 registry-1.docker.io 超时。
修复:K3s 的 registries.yaml 配华为云 SWR 加速镜像(ddn-k8s),四大源全覆盖:
# /etc/rancher/k3s/registries.yaml
mirrors:
docker.io: {endpoint: ["https://swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io"]}
quay.io: {endpoint: ["https://swr.cn-north-4.myhuaweicloud.com/ddn-k8s/quay.io"]}
registry.k8s.io: {endpoint: ["https://swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io"]}
ghcr.io: {endpoint: ["https://swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io"]}
改完 systemctl restart k3s(agent 节点重启 k3s-agent)。
坑 3:mirror 对 pause 镜像 404
配置 mirror 后,sandbox 仍报 rancher/mirrored-pause:3.10.2: not found——SWR 的 ddn-k8s 仓库同步缺失个别 tag。
修复:k3s ctr 显式预拉 + retag:
M=swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io
k3s ctr -n k8s.io images pull $M/rancher/mirrored-pause:3.10.2
k3s ctr -n k8s.io images tag $M/rancher/mirrored-pause:3.10.2 docker.io/rancher/mirrored-pause:3.10.2
注意:crictl 没有 tag 子命令,必须用 k3s ctr;retag 后要删掉旧 Pod 让它重建(sandbox 缓存不会自动重试成功)。
坑 4:metrics-server 镜像版本对不上
manifests 里写的 v0.8.0,K3s 实际要 rancher/mirrored-metrics-server:v0.9.0。
修复:kubectl get pods -o jsonpath='{.spec.containers[0].image}' 拿到真实引用再预拉,别猜版本。
坑 5:local-path PVC 卡 Pending
Grafana 的 PVC 报 create process timeout after 120 seconds。根因链:local-path-provisioner 起一个 helper-pod(busybox)创建目录 → helper 拉镜像失败 → provision 超时 → PVC Pending → Grafana Pending。
修复:预拉 helper 用的精确镜像 rancher/mirrored-library-busybox:1.37.0(又是版本对齐问题!),重启 provisioner 与 Grafana Pod,PVC 秒绑。
坑 6:Alertmanager StatefulSet 静默缺失
helm 装完只有 Service 没有 Pod——operator 在等一个它创建的 Alertmanager CR,而 CR 创建又卡在镜像。监控组件的启动是链式依赖:operator → CR → STS → Pod,任何一环卡镜像,整条链停摆。
修复:预拉 quay.io/prometheus/alertmanager:v0.28.1。
坑 7:sidecar 镜像 quay.io 也被墙
Grafana init 容器用 quay.io/kiwigrid/k8s-sidecar,quay 直连同样不稳。
修复:同坑 3,SWR 的 quay.io mirror + retag,且两个节点都要做(Pod 可能调度到任何节点)。
坑 8:监控自己的告警没人管
装完监控不是终点——默认告警规则开了一堆(KubePodCrashLooping、NodeNotReady...),但通知渠道是空的。我们把 Alertmanager webhook 指到 AI SRE 接收器(0004),由 AI 做根因分析并推钉钉,形成"告警→分析→通知"闭环(详见系列第 3 篇)。
修复脚本化:一次写好,全网通用
把"预拉 + retag + 重启"固化成脚本(仓库 scripts/30_batchpull.py),对任何 K3s 集群通用:
pull_tag() { k3s ctr -n k8s.io images pull $1 && k3s ctr -n k8s.io images tag $1 $2; }
# 8 个镜像一条龙
最终状态
mon-grafana-xxx 3/3 Running ← NodePort 30300 可访问
mon-kube-state-metrics-xxx 1/1 Running
mon-operator-xxx 1/1 Running
node-exporter × 2 1/1 Running
prometheus-mon-...-prometheus-0 2/2 Running
alertmanager-mon-...-alertmanager-0 1/1 Running ← webhook 已指 AI SRE
小结
- helm 把部署简化成一条命令,但把镜像可用性的复杂性留给了你
- 国内环境三件套:SWR mirror + 显式预拉 + retag,缺一不可
- 监控组件是链式依赖,排障要顺着 operator → CR → STS → Pod 链路看
- 所有坑与脚本已开源:gitcode.com/cpyaxjq/huawei-cloud-4node-campaign
实测环境:华为云 ECS ×2 集群节点(8C16G),K3s v1.37.2,kube-prometheus-stack 93.2.2(Prometheus v3.x,Grafana 13.3.1)。2026-11。