AWS EKS中Bitnami PostgreSQL Helm Chart重启Pod后数据丢失求助
问题描述
我在AWS EKS集群中通过以下Helm命令安装了PostgreSQL Pod:
helm install postgresql-default -f helm-values/values_postgresql.yaml bitnami/postgresql
我创建了如下持久化卷(PersistentVolume):
apiVersion: v1 kind: PersistentVolume metadata: name: postgresql-pv spec: storageClassName: efs-sc capacity: storage: 10Gi volumeMode: Filesystem persistentVolumeReclaimPolicy: Retain accessModes: - ReadWriteOnce csi: driver: efs.csi.aws.com volumeHandle: fs-xxxxxxxx
以及集群中的持久化卷声明(PersistentVolumeClaim):
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: postgresql-pv-claim spec: storageClassName: efs-sc accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
values_postgresql.yaml配置了相关参数,一切运行正常,但当我执行kubectl delete pod postgresql-default-0删除Pod后,所有数据都被清空。查看Pod发现它包含两个容器,我怀疑是init容器导致了数据丢失,想了解如何让PostgreSQL Pod重启时不执行初始化脚本。
解决办法
Bitnami官方的PostgreSQL Helm Chart有专门的参数控制初始化行为,要避免Pod重建时清空数据,按以下步骤调整:
- 控制初始化脚本的执行逻辑
打开你的values_postgresql.yaml,添加或修改以下配置:
postgresql: initdb: # 完全禁用初始化脚本——适合已经完成数据库初始化的场景 enabled: false # 或者只在首次启动、数据目录为空时执行初始化(默认通常是false,但建议显式设置) # force: false
解释:Bitnami的init容器默认会检查数据目录里有没有已有的数据库文件,如果force设为true才会强制重新初始化。如果你的配置里不小心开了force: true,就会导致每次Pod重建都清空数据。
- 确认持久化卷挂载正确
确保Chart用的是你自己创建的PVC,在values_postgresql.yaml里检查这部分:
primary: persistence: existingClaim: postgresql-pv-claim mountPath: /bitnami/postgresql
这里existingClaim必须指定你创建的postgresql-pv-claim,这样Pod重建时才会挂载同一个EFS卷,保留原有数据。
- 检查EFS卷的权限
EFS卷的权限如果不对,PostgreSQL容器可能读不到已有的数据,误以为是新环境而重新初始化。确保Chart的安全上下文配置正确:
primary: securityContext: enabled: true runAsUser: 1001 fsGroup: 1001
Bitnami的PostgreSQL镜像默认用1001用户运行,EFS卷需要允许这个用户读写,不然容器访问不了数据,就会触发重新初始化。
- 验证PV/PVC的绑定状态
执行以下命令确认PVC和PV一直处于绑定状态:
kubectl get pvc postgresql-pv-claim kubectl get pv postgresql-pv
如果绑定正常,Pod重建时会自动挂载同一个卷,不会丢失数据。
最后修改完配置后,执行Helm升级生效:
helm upgrade postgresql-default -f helm-values/values_postgresql.yaml bitnami/postgresql
内容的提问来源于stack exchange,提问作者Azimuth
相关产品推荐
相关产品推荐

