通过Helm在自建K8S部署SonarQube后PostgreSQL密码不生效问题
问题
通过Helm在自建K8S集群部署SonarQube,使用官方SonarSource的Helm Chart。values.yaml配置如下:
service: type: NodePort port: 9000 nodePort: 30000 ingress: enabled: false persistence: enabled: true storageClass: "local-path" size: 10Gi postgresql: postgresqlPassword: "randompass" persistence: storageClass: "local-path" account: currentAdminPasswordSecretName: sonarqube-admin-secret # The secret containing the current admin password adminPasswordSecretName: sonarqube-admin-secret # The secret containing the new admin password
执行部署命令:
helm upgrade --install sonarqube sonarqube/sonarqube -n sonarqube -f values.yaml
部署后创建sonarqube-postgresql-0和sonarqube-sonarqube-0两个Pod。进入PostgreSQL Pod执行psql -U sonarUser -d sonarDB时,自定义密码randompass登录失败,使用默认密码sonarPass可成功连接,请问问题出在哪里?
原因分析与解决办法
- 持久化存储保留旧数据:你开启了PostgreSQL的持久化存储
persistence.enabled: true,且使用local-path存储类。如果之前部署过该Chart,对应的PersistentVolumeClaim(PVC)会保留旧的数据库数据,其中包含初始的默认密码。即使修改postgresql.postgresqlPassword配置,PostgreSQL启动时会优先读取已有数据里的密码,不会重新初始化。 - Helm升级不重置持久化数据:Helm的
upgrade操作不会清除已存在的持久化数据卷,只有当PVC不存在时,才会创建新卷并使用配置的密码初始化数据库。
解决步骤:
- 删除PostgreSQL对应的PVC:
kubectl delete pvc data-sonarqube-postgresql-0 -n sonarqube
- 删除PostgreSQL Pod,让StatefulSet重新创建Pod并绑定新PVC,此时会用配置的
randompass初始化密码:
kubectl delete pod sonarqube-postgresql-0 -n sonarqube
- 等待Pod重启完成后,使用
randompass即可正常登录。
注意:此操作会清空原有数据库数据,生产环境执行前请务必备份数据。
内容的提问来源于stack exchange,提问作者Frendom
相关产品推荐
相关产品推荐

