我开始使用kubernetes,我想用一个app服务器& postgres数据库创建一个简单的应用程序。我遇到的问题是postgres的部署给了我权限错误。以下是围绕这一问题的讨论:
编辑
规格:
10.15.4
微型设置
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
我正在尝试将一个本地OS目录挂载到minikube中,以便与postgres部署/pod/容器卷挂载一起使用。
在运行上述设置后,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权限错误仍然存在。上面的参考链接似乎是在不同的机器上,在不同的vms上反弹不同的方法,我不明白,也不能让它工作。有人能陪我走一圈吗?超级困惑地经历了上述所有的讨论。
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更新
我继续并将部署脚本更新为一个简单的吊舱。目标是将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
如何挂载本地文件目录?
发布于 2020-05-12 20:12:44
您正在声明PGDATA字段,这可能是问题的原因。我也遇到了同样的错误,这是因为LOST+FOUND文件夹已经在那个目录中了,但是容器希望它是一个空的dir。给出subPath字段解决了这个问题。请尝试这一点,它应该解决问题,你不需要任何PGDATA字段。尝试从configmap中省略它,并将subPath添加到某个文件夹中。请通过以下清单。
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 https://stackoverflow.com/questions/61758886
复制相似问题