Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在kubernetes中部署postgres时,不会通过环境变量初始化用户和数据库_Database_Postgresql_Docker_Kubernetes_Database Connection - Fatal编程技术网

Database 在kubernetes中部署postgres时,不会通过环境变量初始化用户和数据库

Database 在kubernetes中部署postgres时,不会通过环境变量初始化用户和数据库,database,postgresql,docker,kubernetes,database-connection,Database,Postgresql,Docker,Kubernetes,Database Connection,当我试图在kubernetes上部署postgres时,我通过创建configmap和secret文件填充了所有必需的环境变量,如postgres_用户、postgres_密码、postgres_数据库等。容器已成功部署,我可以通过“kubectl exec”命令打开到其终端。当我运行'env'命令时,可以看到在部署期间提供的所有环境变量都成功地进行了相应的设置。但当我尝试跑步时: psql-U testuser-d testdb 它给出了两种类型的错误: psql:无法连接到服务器:致命:角色

当我试图在kubernetes上部署postgres时,我通过创建configmap和secret文件填充了所有必需的环境变量,如postgres_用户、postgres_密码、postgres_数据库等。容器已成功部署,我可以通过“kubectl exec”命令打开到其终端。当我运行'env'命令时,可以看到在部署期间提供的所有环境变量都成功地进行了相应的设置。但当我尝试跑步时:

psql-U testuser-d testdb

它给出了两种类型的错误:

psql:无法连接到服务器:致命:角色“testuser”不存在

psql:无法连接到服务器:致命:数据库“testdb”不存在

在做了大量研究之后,我发现即使设置了环境变量,用户和数据库也不会被初始化。因此,我创建了一个init.sql文件,并将其添加到docker entrypoint initdb.d中,以构建一个自定义映像,将其推送到docker hub,并通过kubernetes中的该映像部署postgres

init.sql文件内容:

CREATE USER testuser WITH SUPERUSER PASSWORD test;

CREATE DATABASE testdb;

GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser; 
FROM postgres:latest

ADD init.sql /docker-entrypoint-initdb.d/

EXPOSE 5432
Dockerfile内容:

CREATE USER testuser WITH SUPERUSER PASSWORD test;

CREATE DATABASE testdb;

GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser; 
FROM postgres:latest

ADD init.sql /docker-entrypoint-initdb.d/

EXPOSE 5432
不过,我还是犯了同样的错误。用户和数据库未初始化。。。请帮我解决这个问题

更新

日志:


这里已经提到了“跳过初始化”

您可以尝试使用这个shell脚本吗?文件名:init-user-db.sh

#!/bin/bash
set -e

psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
    CREATE USER docker;
    CREATE DATABASE docker;
    GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
编辑:1

apiVersion: apps/v1
    kind: StatefulSet
    metadata:
    spec:
      podManagementPolicy: OrderedReady
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: postgres
      serviceName: postgres
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: postgres
        spec:
          containers:
          - env:
            - name: POSTGRES_USER
              value: root
            - name: POSTGRES_PASSWORD
              value: <Password>
            - name: POSTGRES_DB
              value: <DB name>
            - name: PGDATA
              value: /var/lib/postgresql/data/pgdata
            image: postgres:9.5
            imagePullPolicy: IfNotPresent
            name: postgres
            ports:
            - containerPort: 5432
              protocol: TCP
            resources: {}
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
            volumeMounts:
            - mountPath: /var/lib/postgresql/data
              name: postgres-data
              subPath: pgdata
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 60
      updateStrategy:
        rollingUpdate:
          partition: 0
        type: RollingUpdate
      volumeClaimTemplates:
      - metadata:
          creationTimestamp: null
          name: postgres-data
        spec:
          accessModes:
          - ReadWriteOnce
          resources:
            requests:
              storage: 3Gi
          volumeMode: Filesystem
        status:
          phase: Pending
apiVersion:apps/v1 种类:StatefulSet 元数据: 规格: POD管理策略:OrderedReady 副本:1份 修订历史限制:10 选择器: 火柴标签: app:postgres 服务名称:博士后 模板: 元数据: creationTimestamp:空 标签: app:postgres 规格: 容器: -环境: -姓名:POSTGRES_用户 值:根 -姓名:POSTGRES_密码 价值: -姓名:POSTGRES_DB 价值: -姓名:PGDATA 值:/var/lib/postgresql/data/pgdata 图片:博士后:9.5 imagePullPolicy:如果不存在 姓名:博士后 端口: -集装箱港口:5432 协议:TCP 资源:{} terminationMessagePath:/dev/终止日志 terminationMessagePolicy:文件 体积数量: -mountPath:/var/lib/postgresql/data 名称:postgres数据 子路径:pgdata DNS政策:集群优先 restartPolicy:始终 schedulerName:默认计划程序 securityContext:{} 终止时间:60秒 更新策略: 滚动更新: 分区:0 类型:RollingUpdate VolumeClaim模板: -元数据: creationTimestamp:空 名称:postgres数据 规格: 访问模式: -读写 资源: 请求: 存储:3Gi volumeMode:文件系统 地位: 阶段:待定
我尝试过,但同样的问题再次出现。。未初始化提供给$POSTGRES\u用户和$POSTGRES\u数据库的值。。我已经用POD的日志更新了这个问题。如果不需要现有的备份,你必须尝试使用pvc。你可以尝试删除pvc。我已经完成了。。已删除pv和pvc,并尝试进行完全新的部署。。但是什么都没发生。。。2天以来,我一直在努力解决这个问题,但没有得到任何解决,我尝试了各种论坛上给出的与这个问题相关的各种可能性,但它只是没有得到解决。。我甚至尝试从容器的终端手动创建用户和数据库,但其要求的是postgres用户的密码,默认情况下不包含任何密码。您希望部署postgress数据库作为最终输出吗?我尝试了这个。。通过环境变量提供的用户和数据库是在容器中设置的,但是当我尝试运行psql命令时,它表明它们不存在