Postgres 数据库名称和用户名未应用于 kubernetes

Postgres db name and username are not applied on 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

服务器-deployment.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

POSTGRES_PASSWORD 环境变量设置 PostgreSQL 的超级用户密码。

我看到您在 postgres-deployment.yaml 中使用了持久卷声明。在使用新密码重新创建部署之前要删除卷吗?

检查现有的持久卷声明 (PVC)

$ kubectl get pvc

删除 PVC

$ kubectl delete pvc <postgres-pvc-name>

现在通过 POSTGRES_PASSWORD 设置新密码后重新创建部署。

Note: you will lose all data in Postgres once you delete the volume claim.

看起来您的 PostgreSQL 设置已经初始化,环境变量的值取自 postgresql.conf 文件。在 /var/lib/postgresql/data 路径下检查它的存在和内容。

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

Note! When POSTGRESQL_USERNAME is specified, the postgres user is not assigned a password and as a result you cannot login remotely to the PostgreSQL server as the postgres user. If you still want to have access with the user postgres, please set the POSTGRESQL_POSTGRES_PASSWORD environment variable (or the content of the file specified in POSTGRESQL_POSTGRES_PASSWORD_FILE).

Link 到上面的资源。

我遇到了同样的问题,删除 pvc 还不够。

我在 Docker 桌面上使用 Kubernetes 集群进行本地开发,更改 Postgres 凭据不适用于我的 Postgres 节点。我不得不将 Docker 重置为出厂默认设置。这对我有用。

Docker Desktop Factory Reset