首页 > 解决方案 > Postgres 数据库名称和用户名不适用于 kubernetes

问题描述

我正在使用 Kubernetes 并尝试将服务器容器连接到 postgres 容器。

为 POSTGRES_USER 和 POSTGRES_DB 放置“postgres”是有效的。但是,当插入“postgres”以外的值作为 postgres 用户名和数据库名称的环境值时,似乎这些值以某种方式被覆盖为“postgres”,或者这些值可能根本没有被应用。

有没有办法解决这个问题?

postgres-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      component: postgres
  template:
    metadata:
      labels:
        component: postgres
    spec:
      volumes:
        - name: postgres-storage
          persistentVolumeClaim:
            claimName: database-persistent-volume-claim
      containers:
        - name: postgres
          image: postgres
          ports:
            - containerPort: 5432
          volumeMounts:
            - name: postgres-storage
              mountPath: /var/lib/postgresql/data
              subPath: postgres
          env:
            - name: POSTGRES_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: dbpassword
                  key: DB_PASSWORD

服务器部署.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: server-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      component: server
  template:
    metadata:
      labels:
        component: server
    spec:
      containers:
        - name: server
          image: ellybundle_deployment_api
          imagePullPolicy: Never
          ports:
            - containerPort: 4000
          env:
            - name: DB_HOST
              value: postgres-cluster-ip-service
            - name: DB_USERNAME
              value: postgres
            - name: DB_PORT
              value: "5432"
            - name: DB_NAME
              value: postgres
            - name: DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: dbpassword
                  key: DB_PASSWORD

什么不起作用 - 更改了 dbname 和 db-user

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      component: postgres
  template:
    metadata:
      labels:
        component: postgres
    spec:
      volumes:
        - name: postgres-storage
          persistentVolumeClaim:
            claimName: database-persistent-volume-claim
      containers:
        - name: postgres
          image: postgres
          ports:
            - containerPort: 5432
          volumeMounts:
            - name: postgres-storage
              mountPath: /var/lib/postgresql/data
              subPath: postgres
          env:
            - name: POSTGRES_USER
              value: test-user
            - name: POSTGRES_DB
              value: test-db-name
            - name: POSTGRES_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: dbpassword
                  key: DB_PASSWORD
apiVersion: apps/v1
kind: Deployment
metadata:
  name: server-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      component: server
  template:
    metadata:
      labels:
        component: server
    spec:
      containers:
        - name: server
          image: ellybundle_deployment_api
          imagePullPolicy: Never
          ports:
            - containerPort: 4000
          env:
            - name: DB_HOST
              value: postgres-cluster-ip-service
            - name: DB_USERNAME
              value: test-user
            - name: DB_PORT
              value: "5432"
            - name: DB_NAME
              value: test-db-name
            - name: DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: dbpassword
                  key: DB_PASSWORD

标签: postgresqlkubernetesenvironment-variables

解决方案


看起来您的 PostgreSQL 设置已经初始化,并且 ENV VARIABLES 的值是从postgresql.conf文件中获取的。检查它的存在和/var/lib/postgresql/data路径下的内容。

同样值得知道的是,如果您的 PostgreSQL Docker 容器镜像无论如何基于 Bitnami 的镜像:

笔记!指定 POSTGRESQL_USERNAME 时,不会为 postgres 用户分配密码,因此您无法以 postgres 用户身份远程登录 PostgreSQL 服务器。如果您仍想使用用户 postgres 访问,请设置 POSTGRESQL_POSTGRES_PASSWORD 环境变量(或 POSTGRESQL_POSTGRES_PASSWORD_FILE 中指定的文件内容)。

链接到上面的资源。


推荐阅读