Minikube环境下PostgreSQL作为Helm依赖部署后无法连接排查
正常可运行配置
我可以正常执行以下操作,无任何报错:
- 安装PostgreSQL:
helm install postgresql bitnami/postgresql - 获取对应密码:
export POSTGRES_PASSWORD=$(kubectl get secret --namespace default postgresql -o jsonpath="{.data.postgresql-password}" | base64 --decode) - 使用测试命令连接:
kubectl run postgresql-client --rm --tty -i --restart='Never' --namespace default --image docker.io/bitnami/postgresql:11.13.0-debian-10-r25 --env="PGPASSWORD=$POSTGRES_PASSWORD" --command -- psql --host postgresql -U postgres -d postgres -p 5432 - 在提示符下使用
\l列出所有库表 - 退出并删除部署:
helm delete postgresql
异常场景说明
我新建了自定义Helm Chart,Chart.yaml文件内容如下,values.yaml初始为空:
apiVersion: v2 name: test description: testing type: application version: 0.0.1 appVersion: 0.0.1 dependencies: - name: postgresql version: 10.9.5 repository: https://charts.bitnami.com/bitnami
使用helm install test .部署正常,随后可通过类似方式获取密码:
export POSTGRES_PASSWORD=$(kubectl get secret test-postgresql -o jsonpath="{.data.postgresql-password}" | base64 --decode) echo ${POSTGRES_PASSWORD}
运行客户端连接命令时报错:
kubectl run test-postgresql-client --rm --tty -i --restart='Never' \ --image docker.io/bitnami/postgresql:11.13.0-debian-10-r25 \ --env="PGPASSWORD=$POSTGRES_PASSWORD" \ --command \ -- psql --host test-postgresql -U postgres -d postgres -p 5432
报错信息如下:
sql: FATAL: password authentication failed for user "postgres"
pod "test-postgresql-client" deleted
pod default/test-postgresql-client terminated (Error)
后续我在values.yaml中添加了如下配置:
global: # Dependency: PostgreSQL postgresql: postgresqlDatabase: my-test postgresqlUsername: my-test postgresqlPassword: my-test
进入启动的Pod检查Secret,确认配置已正确生效,但使用对应凭证连接仍出现同类报错。请问我在Chart配置中遗漏了什么项,才能将PostgreSQL作为依赖部署并正常连接?
问题解答
你碰到的问题有三个核心原因:
- 你在配置中指定的用户名是
my-test、数据库名是my-test,但连接命令里仍然用-U postgres指定默认超级用户、用-d postgres指定默认库,账号和库名不匹配自然报错。 - 你使用的10.x版本Bitnami PostgreSQL Chart默认不会创建
postgres超级用户,除非你显式开启对应配置。 - 如果你是先部署过一次空values的Chart,后续再修改配置升级,旧的PVC会保留第一次初始化的账号信息,不会随配置更新自动修改。
解决方法
方案1:直接用自定义配置的账号连接
调整连接命令的用户名和库名即可:
kubectl run test-postgresql-client --rm --tty -i --restart='Never' \ --image docker.io/bitnami/postgresql:11.13.0-debian-10-r25 \ --env="PGPASSWORD=my-test" \ --command \ -- psql --host test-postgresql -U my-test -d my-test -p 5432
方案2:需要保留postgres超级用户的场景
修改values.yaml添加超级用户开启配置:
global: postgresql: postgresqlDatabase: my-test postgresqlUsername: my-test postgresqlPassword: my-test auth: # 开启postgres超级用户创建 enablePostgresUser: true # 配置postgres用户的密码 postgresPassword: 自定义postgres用户密码
修改配置后需要先删除部署和对应的PostgreSQL PVC,再重新部署,否则旧数据卷里的初始化账号信息不会更新。
内容的提问来源于stack exchange,提问作者el n00b
相关产品推荐
相关产品推荐

