我正在尝试将postgres作为StatefulSet
部署到k3d
上。
我设置了环境变量POSTGRES_USER
,但是当我尝试连接到db时,没有考虑到它,我看到身份验证失败了。我可以用密码pgpassword
和默认用户postgres
登录。
为什么不考虑POSTGRES_USER
?
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgresql-db
spec:
serviceName: postgresql-db-service
selector:
matchLabels:
app: postgresql-db
replicas: 2
template:
metadata:
labels:
app: postgresql-db
spec:
containers:
- name: postgresql-db
image: postgres:latest
volumeMounts:
- name: postgresql-db-disk
mountPath: /data
env:
- name: POSTGRES_USER
value: pguser
- name: POSTGRES_PASSWORD
value: pgpassword
- name: PGDATA
value: /data/pgdata
volumes:
- name: postgresql-db-disk
hostPath:
# directory location on host
path: /opt/x/projects/tilt_test/data/
# this field is optional
type: DirectoryOrCreate
但是当我尝试连接到db时,它没有被考虑在内,并且我看到身份验证失败了。
它完全按照它应该的那样工作。POSTGRES_USER
和POSTGRES_PASSWORD
系统变量用于创建数据库时的默认用户和密码。另一方面,如果您打算以后登录现有用户,则必须设置和使用系统变量:PGUSER
和PGPASSWORD
。下面是解释:
PGUSER
的行为与用户连接参数相同。
PGPASSWORD
的行为与password连接参数相同。出于安全考虑,不建议使用这个环境变量,因为一些操作系统允许非root用户通过ps查看进程环境变量;可以考虑使用密码文件(参见33.15节)。
你也可以找到一个完整的教程如何部署PostgreSQL statfulset在Kubernetes与高可用性。此外,您将找到POSTGRES_USER
和POSTGRES_PASSWORD
系统变量的解释:
POSTGRES_USER: Postgres进程启动时自动创建的用户。POSTGRES_PASSWORD:默认创建的用户密码
在这种情况下,登录到数据库发生在准备和活动探测期间。