首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法理解将postgres数据路径安装到minikube部署时有权限错误

无法理解将postgres数据路径安装到minikube部署时有权限错误
EN

Stack Overflow用户
提问于 2020-05-12 18:05:54
回答 1查看 2K关注 0票数 3

我开始使用kubernetes,我想用一个app服务器& postgres数据库创建一个简单的应用程序。我遇到的问题是postgres的部署给了我权限错误。以下是围绕这一问题的讨论:

编辑

规格:

10.15.4

  • minikube - v1.9.2

  • kubernetes - v1.18.2

微型设置

代码语言:javascript
复制
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)并检查权限

代码语言:javascript
复制
# 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目录:

代码语言:javascript
复制
mkdir -p /data/pgdata
chmod 777 /data/pgdata

在部署之前,我获得了一组不同的权限。

代码语言:javascript
复制
# minikube: /
drwx------   1 docker docker   96 May 13 20:10 data
# minikube: /data
drwxrwxrwx 1 docker docker   64 May 13 20:25 pgdata

部署后

代码语言:javascript
复制
# 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

代码语言:javascript
复制
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以持久化数据。

代码语言:javascript
复制
---
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

如何挂载本地文件目录?

EN

回答 1

Stack Overflow用户

发布于 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/

当涉及到数据库部署时,它是一个状态集,通常是您应该使用的,而不是一个部署。

代码语言:javascript
复制
        - 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 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61758886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档