Percona-PostgreSQL Operator v2.6.0如何为用户设置默认密码
问题
在本地kind环境的Kubernetes集群中,使用Percona-PostgreSQL Operator部署PostgreSQL时,尝试为用户设置默认密码但未成功。自定义创建的postgres-user-secret Secret会被Operator覆盖,想确认是否可以设置默认密码,还是只能使用Operator生成的密码。
用户的配置YAML:
apiVersion: pgv2.percona.com/v2 kind: PerconaPGCluster metadata: name: postgres-cluster #namespace: postgres spec: image: perconalab/percona-postgresql-operator:main-ppg17-postgres postgresVersion: 17 users: - name: postgres databases: - quotesdb options: "SUPERUSER" password: type: ASCII secretName: postgres-user-secret proxy: pgBouncer: replicas: 1 image: percona/percona-postgresql-operator:2.6.0-ppg16.8-pgbouncer1.24.0 exposeSuperusers: true affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 podAffinityTerm: labelSelector: matchLabels: postgres-operator.crunchydata.com/role: pgbouncer topologyKey: kubernetes.io/hostname instances: - name: instance1 replicas: 1 dataVolumeClaimSpec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 podAffinityTerm: labelSelector: matchLabels: postgres-operator.crunchydata.com/data: postgres topologyKey: kubernetes.io/hostname backups: pgbackrest: image: perconalab/percona-postgresql-operator:main-pgbackrest17 repoHost: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 podAffinityTerm: labelSelector: matchLabels: postgres-operator.crunchydata.com/data: pgbackrest topologyKey: kubernetes.io/hostname manual: repoName: repo1 options: - --type=full repos: - name: repo1 volume: volumeClaimSpec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
解决方案
Percona-PostgreSQL Operator 支持自定义用户密码,你的问题出在配置方式错误导致Secret被覆盖,以下是正确操作方式:
1. 补全密码配置字段
在users块中,你需要在password下添加value字段指定自定义密码,而不是只设置type: ASCII。修改后的用户配置示例:
users: - name: postgres databases: - quotesdb options: "SUPERUSER" password: type: ASCII value: "YourSecurePassword123!" secretName: postgres-user-secret
2. 不要提前手动创建Secret
如果你提前创建了postgres-user-secret,Operator会判定这是未经过它管理的旧配置,在集群初始化或同步时直接覆盖。正确流程是:
- 先写好包含
password.value的PerconaPGCluster CR - 应用CR后,Operator会自动创建包含你指定密码的
postgres-user-secret
3. 验证密码配置结果
应用修改后的CR后,可通过以下命令检查Secret中的密码是否匹配:
kubectl get secret postgres-user-secret -o jsonpath='{.data.password}' | base64 -d
输出内容和你设置的密码一致,说明配置生效。
注意事项
- 密码需符合PostgreSQL的密码规则,避免使用可能导致解析错误的特殊字符
- 生产环境不建议在CR中明文写密码,可结合Kubernetes Secret的引用逻辑,但需确保Operator能正确读取;不过Percona Operator更推荐通过CR的
password.value字段设置,再由Operator统一管理Secret
内容的提问来源于stack exchange,提问作者Pratheesh Russell
相关产品推荐
相关产品推荐

