普罗米修斯 + Grafana

构建 Prometheus + Grafana 监控栈离线 Helm 包

适用场景:无法直接访问互联网的 Kubernetes 集群,通过 Helm 离线部署 kube-prometheus-stack(Prometheus Operator、Alertmanager、Grafana 等)以及 Loki 日志系统。

第一步:安装 Helm 客户端

在用于制作离线包的中转机器(Linux)上安装 Helm。

  1. 安装 Helm 3

    curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
  2. 验证安装

    helm version
    # 预期输出:version.BuildInfo{Version:"v3.x.x", ...}

第二步:配置 Helm 仓库

添加 Prometheus 社区仓库与 Grafana 官方仓库。

  1. 添加仓库

    # Prometheus 社区仓库
    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    
    # Grafana 官方仓库
    helm repo add grafana https://grafana.github.io/helm-charts
  2. 更新索引

    helm repo update

第三步:下载并补齐 Chart 依赖(核心)

建议在专门目录下操作。

  1. 创建工作目录

    mkdir -p helm-offline && cd helm-offline
  2. 下载 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 ..
  3. 下载 loki 并更新依赖

    helm pull grafana/loki --untar
    
    cd loki
    helm dependency update
    cd ..
  4. 下载 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 found

Prometheus 证书缺失修复指南

当部署 Prometheus Operator 时出现上述报错,通常表示集群中缺少用于 Webhook 通信的 TLS Secret。

方案一:手动生成自签名证书(推荐)

  1. 生成证书

    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"
  2. 重建 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
  3. 重启 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

标签: none

添加新评论