You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在GKE中创建带持久化存储的Prometheus Pod失败求助

问题根源分析

你的Pod启动失败的核心原因有两个:

  1. 同一个PV被重复挂载到容器的两个目录:你将来自pvc-demo-disk的同一个PersistentVolume同时挂载到/etc/prometheus/和/prometheus/,导致这两个目录共享同一份空存储(新创建的GCE PD默认是空的)。
  2. 镜像原有配置文件被覆盖:Prometheus官方镜像默认在/etc/prometheus/目录下自带prometheus.yml配置文件,但当你将空的PV挂载到这个目录时,容器启动时会用挂载的空目录替换掉镜像中原有的目录,直接导致配置文件丢失,触发no such file or directory错误。
解决方案

需要将配置文件存储和监控数据存储分离,用ConfigMap管理配置文件,PVC仅用于存储Prometheus的TSDB数据。

步骤1:创建存储Prometheus配置的ConfigMap

先编写一个基础的prometheus.yml配置文件(可根据需求调整),然后创建ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
data:
  prometheus.yml: |
    global:
      scrape_interval: 15s
    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
          - targets: ['localhost:9090']

执行命令创建:

kubectl apply -f prometheus-config.yaml

步骤2:修正Pod的挂载配置

修改Pod YAML,移除/etc/prometheus/的PVC挂载,替换为ConfigMap挂载,保留PVC挂载到/prometheus/用于数据存储:

apiVersion: v1
kind: Pod
metadata:
  name: promepod
spec:
  containers:
  - name: prome
    image: prom/prometheus
    args:
      - "--storage.tsdb.retention.time=12h"
      - "--config.file=/etc/prometheus/prometheus.yml"
      - "--storage.tsdb.path=/prometheus/"
    volumeMounts:
    - name: config-volume
      mountPath: /etc/prometheus/
    - name: data-volume
      mountPath: /prometheus/
  volumes:
    - name: config-volume
      configMap:
        name: prometheus-config
    - name: data-volume
      persistentVolumeClaim:
        claimName: pvc-demo-disk

步骤3:重新部署Pod

先删除原有故障Pod:

kubectl delete pod promepod

再应用新的Pod配置:

kubectl apply -f promepod.yaml
验证
  • 查看Pod状态,确认是否正常运行:
    kubectl get pods promepod
    
  • 查看Pod日志,确认Prometheus启动成功:
    kubectl logs promepod
    

内容的提问来源于stack exchange,提问作者mit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 13:25:14