CrunchyData Postgres Operator Pod持续Pending故障排查
CrunchyData Postgres Operator 集群backrest-repo Pod Pending故障排查
故障现象
部署Postgres集群时,backrest-shared-repo及主库Pod持续处于Pending状态,Pod运行状态如下:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE postgres-ha-1 Pending 12m postgres-ha-1-pgbr-repo Pending 12m
排查发现关联的postgres-ha-1-pgbr-repo PersistentVolumeClaim同样处于Pending状态,事件报错如下:
no persistent volumes available for this claim and no storage class is set
生成的PVC配置中未指定storageClassName字段,申请3G容量、ReadWriteMany访问模式的文件系统存储,与Operator配置中hostpathstorage存储项参数匹配。
故障根因
Operator配置中hostpathstorage存储项的类型设为create,该模式下Operator不会自动为PVC关联集群默认StorageClass触发动态供给,也不会自动创建HostPath类型的PV;同时集群内不存在满足PVC要求(≥3G容量、支持ReadWriteMany访问模式、无绑定StorageClass)的可用静态PV,导致PVC无法完成绑定,关联Pod无法调度。
排查步骤
- 检查异常PVC配置,确认
spec.storageClassName字段为空,申请的容量、访问模式与Operator存储配置一致 - 核对
postgres-operator.yml存储配置,确认backrest_storage绑定的hostpathstorage使用create类型,未配置关联的StorageClass参数 - 执行
kubectl get pv查看集群现有PV,确认无匹配PVC要求的可用静态卷 - 执行
kubectl get sc查看集群现有StorageClass,确认是否存在支持ReadWriteMany访问模式的存储类可用于pgBackRest共享存储
解决方案
方案1:动态存储供给(生产环境推荐)
- 修改
postgres-operator.yml中hostpathstorage存储项配置,将存储类型改为dynamic,补充集群中支持ReadWriteMany的StorageClass名称(如NFS、CephFS存储类):
storage2_name: "hostpathstorage" storage2_access_mode: "ReadWriteMany" storage2_size: "3G" storage2_type: "dynamic" storage2_class: "替换为集群中支持RWX的StorageClass名称"
- 重启CrunchyData Postgres Operator加载新配置
- 删除当前Pending状态的PVC和异常Pod,Operator会自动重建带正确StorageClass配置的PVC,由存储类自动完成PV供给和绑定,Pod随后会正常拉起。
方案2:静态PV绑定(测试/单节点环境适用)
- 手动创建符合PVC要求的静态PV,注意PV必须不指定StorageClass、容量≥3G、支持
ReadWriteMany访问模式,示例配置:
apiVersion: v1 kind: PersistentVolume metadata: name: postgres-ha-pgbr-pv labels: pg-cluster: postgres-ha-1 vendor: crunchydata spec: capacity: storage: 3G accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: "" # 多节点集群必须使用NFS、CephFS等网络存储,单节点测试可使用hostPath nfs: server: NFS服务地址 path: /exports/pgbr-repo # 单节点hostPath示例(多节点禁用,不支持跨节点RWX) # hostPath: # path: /data/pgbr-repo
- 若使用hostPath,需要提前在对应节点创建目录,配置目录权限为02750、属主为postgres用户(UID 26)
- 创建PV后等待PVC自动完成绑定,绑定完成后Pod会自动调度启动。
内容的提问来源于stack exchange,提问作者Prog_G
相关产品推荐
相关产品推荐

