在GKE中创建带持久化存储的Prometheus Pod失败求助
问题根源分析
你的Pod启动失败的核心原因有两个:
- 同一个PV被重复挂载到容器的两个目录:你将来自
pvc-demo-disk的同一个PersistentVolume同时挂载到/etc/prometheus/和/prometheus/,导致这两个目录共享同一份空存储(新创建的GCE PD默认是空的)。 - 镜像原有配置文件被覆盖: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
相关产品推荐
相关产品推荐

