普罗米修斯 + Grafana
普罗米修斯 + Grafana
构建 Prometheus + Grafana 监控栈离线 Helm 包
适用场景:无法直接访问互联网的 Kubernetes 集群,通过 Helm 离线部署 kube-prometheus-stack(Prometheus Operator、Alertmanager、Grafana 等)以及 Loki 日志系统。
第一步:安装 Helm 客户端
在用于制作离线包的中转机器(Linux)上安装 Helm。
安装 Helm 3
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash验证安装
helm version # 预期输出:version.BuildInfo{Version:"v3.x.x", ...}
第二步:配置 Helm 仓库
添加 Prometheus 社区仓库与 Grafana 官方仓库。
添加仓库
# Prometheus 社区仓库 helm repo add prometheus-community https://prometheus-community.github.io/helm-charts # Grafana 官方仓库 helm repo add grafana https://grafana.github.io/helm-charts更新索引
helm repo update
第三步:下载并补齐 Chart 依赖(核心)
建议在专门目录下操作。
创建工作目录
mkdir -p helm-offline && cd helm-offline下载 kube-prometheus-stack 并更新依赖
# 拉取并解压主包 helm pull prometheus-community/kube-prometheus-stack --untar # 进入目录下载 dependencies 中声明的子 Chart(如 node-exporter、kube-state-metrics 等) cd kube-prometheus-stack helm dependency update cd ..下载 loki 并更新依赖
helm pull grafana/loki --untar cd loki helm dependency update cd ..下载 promtail
helm pull grafana/promtail --untar
第四步:打包离线文件
完成后,helm-offline 目录下应包含以下三个目录:
kube-prometheus-stack/loki/promtail/
打包命令(示例):
cd ..
zip -r helm-charts-all.zip \
helm-offline/kube-prometheus-stack \
helm-offline/loki \
helm-offline/promtail目标设备执行
helm install prometheus ./kube-prometheus-stack --namespace monitoring --timeout 15m --disable-openapi-validation --no-hooks -f values-low-resource.yaml常见报错 1:Admission Webhook 证书缺失
现象:
Warning FailedMount ... kubelet MountVolume.SetUp failed for volume "tls-secret" : secret "prometheus-kube-prometheus-admission" not foundPrometheus 证书缺失修复指南
当部署 Prometheus Operator 时出现上述报错,通常表示集群中缺少用于 Webhook 通信的 TLS Secret。
方案一:手动生成自签名证书(推荐)
生成证书
mkdir -p /tmp/certs cd /tmp/certs openssl genrsa -out key 2048 # CN 必须与 Service 域名一致,通常为:prometheus-kube-prometheus-admission.monitoring.svc openssl req -new -x509 -key key -out cert -days 365 \ -subj "/CN=prometheus-kube-prometheus-admission.monitoring.svc"重建 Secret
kubectl delete secret prometheus-kube-prometheus-admission -n monitoring 2>/dev/null || true kubectl create secret generic prometheus-kube-prometheus-admission \ --from-file=cert=./cert \ --from-file=key=./key \ -n monitoring重启 Operator 相关 Pod 生效
kubectl delete pod -l app.kubernetes.io/name=kube-prometheus-operator -n monitoring
方案二:复用 etcd 默认证书(备选)
前提:Master 节点 /etc/kubernetes/pki/etcd/ 下存在对应证书。
kubectl create secret generic -n monitoring etcd-ssl \
--from-file=ca.crt=/etc/kubernetes/pki/etcd/ca.crt \
--from-file=client.crt=/etc/kubernetes/pki/etcd/healthcheck-client.crt \
--from-file=client.key=/etc/kubernetes/pki/etcd/healthcheck-client.key常见报错 2:镜像拉取失败(ImagePullBackOff)
现象(示例):
prometheus-kube-state-metrics-... 0/1 ImagePullBackOff ...原因(示例):
Failed to pull image "registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.18.0" ... i/o timeout解决思路:通过国内镜像源提前拉取并打 Tag,使运行时仍按原镜像名找到本地镜像。
参考页面:
registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.18.0 - 镜像下载 | registry.k8s.io
示例命令:
ctr images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.18.0
ctr images tag \
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.18.0 \
registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.18.0