You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过Helm配置PostgreSQL:添加用户与数据库名环境变量

解决PostgreSQL初始化脚本的环境变量配置问题

步骤1:在Helm Values中定义变量

先在你的values.yaml里添加数据库名和用户名的配置项,方便后续自定义修改:

postgres:
  configmap: postgres-init-script  # 保留你原有的ConfigMap名称
  dbName: my-db                    # 自定义目标数据库名
  user: my-user                    # 自定义需要授权的用户
  # 保留你已有的其他PostgreSQL配置(镜像、密码Secret等)

步骤2:修改ConfigMap中的初始化脚本

把脚本里硬编码的数据库名和用户名替换成环境变量,同时增加默认值兜底,避免变量未注入时出错:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Values.postgres.configmap }}
  namespace: {{ .Release.Namespace }}
data:
  init_script.sh: |+
    #!/bin/bash
    # 从环境变量读取配置,未获取到则用默认值
    DB_NAME=${DB_NAME:-"default-db"}
    DB_USER=${DB_USER:-"default-user"}

    # 执行初始化SQL,用双引号包裹标识符避免特殊字符解析问题
    psql -v ON_ERROR_STOP=1 <<-EOSQL
    CREATE DATABASE "$DB_NAME";
    GRANT ALL PRIVILEGES ON DATABASE "$DB_NAME" TO "$DB_USER";
    # 这里可以继续添加其他模式、表的初始化语句
    EOSQL

步骤3:在PostgreSQL部署资源中注入环境变量

不管你用的是Deployment还是StatefulSet,需要在容器配置里添加环境变量,把Values里的配置传递给容器,同时确保初始化脚本的Volume挂载正确:

apiVersion: apps/v1
kind: StatefulSet  # 或者Deployment,根据你的实际部署类型调整
metadata:
  name: postgres
  namespace: {{ .Release.Namespace }}
spec:
  template:
    spec:
      containers:
      - name: postgres
        image: {{ .Values.postgres.image }}
        env:
          # 保留PostgreSQL默认的超级用户配置(如果已有)
          - name: POSTGRES_USER
            value: {{ .Values.postgres.superUser | default "postgres" }}
          - name: POSTGRES_PASSWORD
            valueFrom:
              secretKeyRef:
                name: {{ .Values.postgres.secret }}
                key: password
          # 注入自定义的数据库名和用户变量
          - name: DB_NAME
            value: {{ .Values.postgres.dbName }}
          - name: DB_USER
            value: {{ .Values.postgres.user }}
        volumeMounts:
          # 挂载初始化脚本到PostgreSQL的默认初始化目录
          - name: init-script
            mountPath: /docker-entrypoint-initdb.d/
            readOnly: true
      volumes:
      - name: init-script
        configMap:
          name: {{ .Values.postgres.configmap }}
          defaultMode: 0755  # 必须设置脚本可执行权限

环境变量的使用方式

  • 容器内连接psql:直接用环境变量指定参数,比如执行 psql -U $POSTGRES_USER -d $DB_NAME
  • 应用程序连接:在应用配置中读取DB_NAME和DB_USER这两个环境变量,作为数据库连接的目标库和用户名参数

内容的提问来源于stack exchange,提问作者user20220951

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 04:42:37