gpt4 book ai didi

postgresql - Azure kubernetes 上的 Postgres 卷权限错误

转载 作者:行者123 更新时间:2023-12-02 23:15:56 26 4
gpt4 key购买 nike

我正在尝试在 Azure Kubernetes 上部署具有数据持久性的 Postgresql。所以我用的是PVC。我在这里搜索了很多帖子,其中大多数都提供了如下所示的 yaml 文件,但它给出了以下错误;

chmod: changing permissions of '/var/lib/postgresql/data/pgdata': Operation not permitted
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

initdb: error: could not change permissions of directory "/var/lib/postgresql/data/pgdata": Operation not permitted
fixing permissions on existing directory /var/lib/postgresql/data/pgdata ...

部署yaml文件如下;

apiVersion: apps/v1
kind: Deployment
metadata:
name: postgresql
spec:
replicas: 1
selector:
matchLabels:
app: postgresql
template:
metadata:
labels:
app: postgresql
spec:
containers:
- name: postgresql
image: postgres:13.2
securityContext:
runAsUser: 999
imagePullPolicy: "IfNotPresent"
ports:
- containerPort: 5432
envFrom:
- secretRef:
name: postgresql-secret
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgredb-kap
volumes:
- name: postgredb-kap
persistentVolumeClaim:
claimName: postgresql-pvc

secret yaml 如下;

apiVersion: v1
kind: Secret
metadata:
name: postgresql-secret
type: Opaque
data:
POSTGRES_DB: a2V5sd4=
POSTGRES_USER: cG9zdGdyZXNhZG1pbg==
POSTGRES_PASSWORD: c234Rw==
PGDATA: L3Za234dGF0YQ==

pvc 和 sc yaml 文件如下:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: postgresql-pvc
labels:
app: postgresql
spec:
storageClassName: postgresql-sc
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
---
allowVolumeExpansion: true
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: postgresql-sc
mountOptions:
- dir_mode=0777
- file_mode=0777
- uid=1000
- gid=1000
parameters:
skuName: Standard_LRS
provisioner: kubernetes.io/azure-file
reclaimPolicy: Retain

因此,当我使用“- mountPath:/var/lib/postgresql/”等挂载路径时,它就可以工作。我可以到达数据库,这很好。但是当我删除 pod 并重新创建时,没有数据库!因此没有数据持久性。

你能帮忙吗,我在这里缺少什么?

谢谢!

最佳答案

您可以尝试的一件事是将挂载选项中的uid=1000,gid=1000更改为999,因为这是postgres容器中postgres用户的uid(我没有测试这一点)。


另一个可以肯定解决此问题的解决方案涉及 init 容器。

Postgres 容器需要以 root 身份启动才能chown pgdata 目录,因为它是作为 root 目录安装的。执行此操作后,它会删除 root 权限并以 postgres 用户身份运行。

但是您可以使用 init 容器(以 root 身份运行)来 chmod 卷目录,以便您可以以非 root 身份运行主容器。

这是一个例子:

  initContainers:
- name: init
image: alpine
command: ["sh", "-c", "chown 999:999 /var/lib/postgresql/data"]
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgredb-kap

关于postgresql - Azure kubernetes 上的 Postgres 卷权限错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66860101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com