Bitnami PGPool Pod启动失败:只读文件系统错误排查求助
我使用docker.io/bitnami/pgpool:4.2.3-debian-10-r38镜像部署PGPool时容器启动失败,报错如下:
pgpool 09:10:02.55 INFO ==> Initializing Pgpool-II... pgpool 09:10:02.59 INFO ==> Generating pg_hba.conf file... /opt/bitnami/scripts/libpgpool.sh: line 348: /opt/bitnami/pgpool/conf/pool_hba.conf: Read-only file system
已将卷挂载的只读参数设为false,且以root用户运行,但问题仍未解决。我的Deployment YAML配置如下:
apiVersion: apps/v1 kind: Deployment metadata: name: pgpool-deployment spec: replicas: 1 selector: matchLabels: app: pgpool template: metadata: labels: app: pgpool spec: securityContext: runAsUser: 0 fsGroup: 0 runAsGroup: 0 containers: - name: pgpool image: docker.io/bitnami/pgpool:4.2.3-debian-10-r38 securityContext: runAsUser: 0 runAsGroup: 0 ports: - containerPort: 5432 env: - name: PGPOOL_BACKEND_NODES value: "0:postgres-0.postgres:5432,1:postgres-1.postgres:5432,2:postgres-2.postgres:5432" - name: PGPOOL_ADMIN_USERNAME value: "admin" - name: PGPOOL_ADMIN_PASSWORD valueFrom: secretKeyRef: name: pgpool-secrets key: admin-password - name: PGPOOL_POSTGRES_USERNAME value: "postgres" - name: PGPOOL_POSTGRES_PASSWORD valueFrom: secretKeyRef: name: postgres-creds key: password - name: PGPOOL_HEALTH_CHECK_USER value: "postgres" - name: PGPOOL_HEALTH_CHECK_PASSWORD valueFrom: secretKeyRef: name: postgres-creds key: password - name: PGPOOL_SR_CHECK_USER value: "postgres" - name: PGPOOL_SR_CHECK_PASSWORD valueFrom: secretKeyRef: name: postgres-creds key: password volumeMounts: - name: pgpool-config mountPath: /opt/bitnami/pgpool/conf/ readOnly: false - name: pgpool-tls mountPath: /etc/pgpool2 readOnly: false volumes: - name: pgpool-config configMap: name: pgpool-config - name: pgpool-tls secret: secretName: pgpool-tls
可能的原因及解决方法
ConfigMap挂载机制限制:Kubernetes中,ConfigMap以目录方式挂载时,无论
readOnly设置为false,底层的ConfigMap存储本身是只读的。容器初始化脚本尝试在该目录下生成pool_hba.conf,但无法对ConfigMap挂载的目录执行写入操作。
解决:不要直接将ConfigMap挂载到/opt/bitnami/pgpool/conf/,而是挂载到临时目录(如/opt/bitnami/pgpool/conf-custom/),再通过初始化脚本将配置文件复制到目标目录;或者直接利用Bitnami镜像提供的环境变量配置PGPool,避免手动挂载整个配置目录。镜像目录权限锁定:即使以root用户运行,镜像内的
/opt/bitnami/pgpool/conf/目录可能在构建时被设置了只读属性。挂载ConfigMap覆盖该目录后,进一步限制了写入权限。
解决:仅挂载单个配置文件到/opt/bitnami/pgpool/conf/下(比如只挂载pgpool.conf),让初始化脚本可以自由生成pool_hba.conf等其他必要文件。Secret挂载的间接影响:虽然
pgpool-tls挂载的是/etc/pgpool2,但如果该目录与conf目录存在权限继承或存储共享问题,可能间接导致写入失败,不过此优先级低于前两个原因,可后续排查。
内容的提问来源于stack exchange,提问作者ls96

