全链路可观测落地记:kube-prometheus-stack 在 K3s 上的 8 个坑与一整套修复脚本

摘要:helm 一条命令装 kube-prometheus-stack 背后:镜像 404、PVC 卡死、Alertmanager 配置静默失败......8 个真实坑与修复脚本,国内环境 K3s 装监控的避坑指南。
监控是运维的眼睛,但装监控的过程常常先把人搞瞎。本文记录在 2 节点 K3s(华为云 ECS)上部署 kube-prometheus-stack + Grafana 的完整过程:helm 一条命令背后,是 8 个真实的坑------镜像被墙、PVC 卡死、StatefulSet 静默缺失......每一个都附修复方案与脚本。这是《4 台华为云 ECS 实战》系列第 2 篇。

目标架构

arduino 复制代码
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 内存要跑监控全家桶 + 业务,必须裁:

yaml 复制代码
# 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}
bash 复制代码
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 用本地路径。

bash 复制代码
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),四大源全覆盖:

yaml 复制代码
# /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:

bash 复制代码
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 集群通用:

bash 复制代码
pull_tag() { k3s ctr -n k8s.io images pull $1 && k3s ctr -n k8s.io images tag $1 $2; }
# 8 个镜像一条龙

最终状态

sql 复制代码
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。

相关推荐
deli00725 分钟前
27 寸 4K 开 125% 为什么发虚?PPI 和缩放一次算清
前端
广州华水科技34 分钟前
当大坝面临风险时,如何有效实施单北斗GNSS变形监测?
前端
AiMan2 小时前
Poe还是不可以导出左侧所有对话,只能单条内容导出,方法不对吗
前端
AiMan2 小时前
文心生成的内容能否下载吗?
前端
前端双越老师3 小时前
程序员 1v1 访谈系列第十四期:接受焦虑 拥抱不确定
前端·ai编程·全栈
deli0073 小时前
MCP 协议 6 条消息拆开看:AI 为什么能自己读文件调接口
前端
风骏时光牛马4 小时前
请告诉我标题对应的内容、想要的风格,我马上给你生成。
前端
deli0074 小时前
OAuth 2.0 授权码流程实测:4 次跳转,少个 state 就被劫持
前端