Database 在kubernetes中部署postgres时,不会通过环境变量初始化用户和数据库
当我试图在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文件内容: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:无法连接到服务器:致命:角色
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命令时,它表明它们不存在