我刚开始使用 kubernetes,我想用一个网络服务器和 postgres 数据库创建一个简单的应用程序。我遇到的问题是 postgres 的部署给我权限错误。以下是对此的讨论:
- https://github.com/docker-library/postgres/issues/116
- https://github.com/docker-library/postgres/issues/103
- https://github.com/docker-library/postgres/issues/696
- Can't get either Postgres permissions or PVC working in AKS
- Kubernetes - Pod which encapsulates DB is crashing
- Mount local directory into pod in minikube
- https://serverfault.com/questions/981459/minikube-using-a-storageclass-to-provision-data-outside-of-tmp
编辑
规范:
- 操作系统 - 10.15.4
- minikube - v1.9.2
- kubernetes - v1.18.2
minikube 设置
minikube start --driver=virtualbox --cpus=2 --memory=5120 --kubernetes-version=v1.18.2 --container-runtime=docker --mount=true --mount-string=/Users/holmes/kubernetes/pgdata:/data/pgdata
权限错误:chmod: changing permissions of '/var/lib/postgresql/data': Operation not permitted
我正在尝试将本地操作系统目录挂载到 minikube 中,以便与 postgres deployment/pod/container 卷挂载一起使用。
运行上述设置后,我通过 ssh 进入 minikube (minikube ssh
) 并检查权限
# minikube: /
drwxr-xr-x 3 root root 4096 May 13 19:31 data
# minikube: /data
drwx------ 1 docker docker 96 May 13 19:27 pgdata
通过运行 chmod
下面的脚本权限错误表面。如果我更改 --mount-string=/Users/holmes/kubernetes/pgdata:/data
(省略 /pgdata
)然后是 minikube ssh
创建pgdata
目录:
mkdir -p /data/pgdata
chmod 777 /data/pgdata
我在部署之前获得了一组不同的权限
# minikube: /
drwx------ 1 docker docker 96 May 13 20:10 data
# minikube: /data
drwxrwxrwx 1 docker docker 64 May 13 20:25 pgdata
和部署之后
# minikube: /
drwx------ 1 docker docker 128 May 13 20:25 data
# minikube: /data
drwx------ 1 docker docker 64 May 13 20:25 pgdata
不确定为什么会发生变化,并且 chmod
权限错误仍然存在。上面的引用链接似乎在不同虚拟机上的不同机器上围绕着不同的方法跳来跳去,我不明白,也无法让它工作。有人可以带我去上类吗?通过以上所有讨论, super 困惑。
postgres.yaml
apiVersion: v1
kind: Namespace
metadata:
name: data-block
---
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-config
namespace: data-block
labels:
type: starter
data:
POSTGRES_DB: postgres
POSTGRES_USER: postgres
POSTGRES_PASSWORD: docker
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: postgres-pv
namespace: data-block
labels:
app: postgres
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /data/pgdata
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-pv-claim
namespace: data-block
labels:
app: postgres
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: ""
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
namespace: data-block
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:12.2
ports:
- containerPort: 5432
envFrom:
- configMapRef:
name: postgres-config
volumeMounts:
- name: postgres-vol
mountPath: /var/lib/postgresql/data
volumes:
- name: postgres-vol
persistentVolumeClaim:
claimName: postgres-pv-claim
更新
我继续将部署脚本更新为一个简单的 pod。目标是映射 postgres /var/lib/postgresql/data
到我的本地文件目录/Users/<my-path>/database/data
持久化数据。
---
apiVersion: v1
kind: Pod
metadata:
name: postgres-pod
namespace: data-block
labels:
name: postgres-pod
spec:
containers:
- name: postgres
image: postgres:12.3
imagePullPolicy: IfNotPresent
ports:
- name: postgres-port
containerPort: 5432
envFrom:
- configMapRef:
name: postgres-env-config
- secretRef:
name: postgres-secret
volumeMounts:
- name: postgres-vol
mountPath: /var/lib/postgresql/data
volumes:
- name: postgres-vol
hostPath:
path: /Users/<my-path>/database/data
restartPolicy: Never
错误:initdb: error: could not access directory "/var/lib/postgresql/data": Permission denied
如何挂载本地文件目录?
最佳答案
您正在声明可能导致问题的 PGDATA 字段。我遇到了同样的错误,这是因为该目录中已经有 LOST+FOUND 文件夹,但是容器希望它是一个空目录。提供 subPath 字段可以解决此问题。请试试这个,它应该可以解决问题,您不需要任何 PGDATA 字段。尝试从您的 configmap 中省略它并将 subPath 添加到某个文件夹。请仔细阅读以下 list 。
https://github.com/mendix/kubernetes-howto/blob/master/postgres-deployment.yaml
https://www.bmc.com/blogs/kubernetes-postgresql/
在数据库部署方面,通常您应该使用有状态集,而不是部署。
- name: postgredb
mountPath: /var/lib/postgresql/data
#setting subPath will fix your issue it can be pgdata or
postgres or any other folder name according to your
choice.
subPath: postgres
关于postgresql - 无法理解将 postgres 数据路径安装到带有权限错误的 minikube kubernetes 部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61758886/