核心是用PVC将Prometheus数据从emptyDir迁移到外部持久卷,通过StorageClass→PV→PVC三步联动实现;非K8s环境则用Docker命名卷挂载宿主机路径;Pushgateway需启用--persistence.file参数并挂载持久化volume。

要让 Prometheus 指标在 Pod 重启后不丢失,核心是把数据从临时文件系统(emptyDir)迁移到外部持久化存储。默认情况下,Prometheus 把时序数据写在容器内的 /prometheus 目录,一旦 Pod 被销毁重建,这部分数据就彻底消失。
用 PVC 绑定持久卷(生产首选)
Kubernetes 环境下最稳妥的方式是通过 PersistentVolumeClaim(PVC)挂载持久卷。这需要三步联动:StorageClass → PV → PVC。
- 确认集群已有支持动态供应的 StorageClass(如
ssd、gp2或自建 NFS 类型),可通过kubectl get sc查看 - 在 Helm values.yaml 中启用并指定 PVC 参数,例如:
prometheus.prometheusspec.storagespec.volumeclaimtemplate.spec.storageClassName: ssdprometheus.prometheusspec.storagespec.volumeclaimtemplate.spec.resources.requests.storage: 50Gi - 确保
prometheus.prometheusspec.storagespec.volumeclaimtemplate.spec.accessModes匹配后端存储能力,多数场景用ReadWriteOnce
Docker 部署也要挂载宿主机卷
非 Kubernetes 场景下,靠 Docker volume 保数据。关键在于把容器内 /prometheus 目录映射到宿主机稳定路径。
- 推荐使用命名卷(named volume),比 bind mount 更可靠:
docker run -v prometheus_data:/prometheus -p 9090:9090 prom/prometheus - 若用 docker-compose,明确声明 volume 并挂载:
volumes:- prometheus_data:/prometheus - 避免直接绑定绝对路径(如
/opt/prometheus),除非你严格管控宿主机权限和磁盘空间
Pushgateway 数据不能只靠内存
Pushgateway 默认把指标存在内存里,重启即清空。必须显式启用文件持久化。
- 启动时加参数:
--persistence.file=/data/pushgateway.db --persistence.interval=5m - 配合 volume 挂载(Helm 或 Docker),确保
/data路径指向持久位置 - Helm chart 中通常有
pushgateway.persistence.enabled和persistence.size字段,设为true并分配合理容量
远程存储作为长期归档方案
PVC 解决的是“实例级”数据存活问题,但长期海量指标建议走远程存储(Remote Write)。
- 配置 Prometheus 的
remote_write指向兼容 Prometheus 远程读写协议的后端,比如 Thanos、VictoriaMetrics 或 Cortex - 远程存储不替代本地 PVC —— 它是补充:本地保留近期高频查询数据(如 15 天),远端存全量历史
- MicroK8s 或 KubeSphere 等平台通常提供一键开启远程存储的选项,本质仍是配置
prometheus.yml中的remote_write块

















