Minikube& Kubernetes:在Postgres容器中使用Windows Mounted驱动器作为持久卷

时间:2017-12-27 23:47:23

标签: windows postgresql kubernetes minikube persistent-volumes

注意:经过进一步的排查后我相信这是minikube mount的一个问题。以下大部分描述可能与确切问题无关。有关其他信息,请参阅我的评论保持质疑。

我尝试使用本地SDCard作为minikube中的挂载点,在挂载点内创建持久卷,创建相应的持久卷声明,然后将其用作托管a的容器中的卷挂载postgres实例。我将首先描述我是如何创建PVC的,然后深入了解pod定义。

1。我使用minikube命令使用挂载点启动minikube VM(Hyper-V):

  

minikube start --vm-driver =" hyperv" --hyperv虚拟交换机="我的   虚拟交换机" --mount --mount-string =" D:\ data:/ data"

运行此操作后,我使用minikube ssh来确定目录是否已正确安装且拥有root用户/组。

2。创建PersistentVolume:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: postgres-data-pv
  labels:
    type: local
    application: postgres
spec:
  capacity:
    storage: 500Mi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: "/data/gather-client/postgres/data"

第3。创建PersistentVolumeClaim:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: postgres-data-pvc
  annotations:
    volume.beta.kubernetes.io/storage-class: ""
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500Mi

4。创建Pod和容器 我创建pod的第一次尝试是一种直接的,记录良好的方法:

kind: Pod
apiVersion: v1
metadata:
  name: gather-client
spec:
  volumes:
  - name: postgres-data
    persistentVolumeClaim:
      claimName: postgres-data-pvc
  containers:
    - name: metadata-db
      image: postgres:9.6.5
      env:
      - name: PGDATA
        value: /var/lib/postgresql/data/pgdata
      volumeMounts:
      - name: postgres-data
        mountPath: /var/lib/postgresql/data

此时我收到CrashLoopBackoff,并在检查容器日志时发现错误:

  

chown:更改'/ var / lib / postgresql / data / pgdata'的所有权:   输入/输出错误

我相信这里发生的事情是容器有一个用户postgres运行initdb命令,而目录由root拥有?然后,在这种情况下,我感觉好像没有收到输入/输出错误。

无论如何,我尝试了另外两种方法:

1。使用securityContext和fsGroup匹配postgres用户的UID / GID(999)

在这里,我只是在规范的顶部添加了这个片段,希望能够使用postgres用户的上下文创建卷(我不太确定这是如何工作的......):

  securityContext:
    fsGroup: 999

我收到同样的错误并很快转到下一个方法......

2。使用initContainer执行chown命令。这是我花费大部分时间的地方。我添加了一些调试命令,以便更好地了解这里发生了什么。

  initContainers:
  - name: metadata-db-init
    image: postgres:9.6.5
    command: ["sh"]
    args: ["-c", "whoami; ls -l /var/lib/postgresql; ls -l /var/lib/postgresql/data; chown postgres /var/lib/postgresql/data; chown postgres /var/lib/postgresql/data/pgdata"]
    volumeMounts:
    - name: postgres-data
      mountPath: /var/lib/postgresql/data

有了这个,我获得了Init:CrashLoopBackOff的pod状态。这是我在initContainer中的日志中获得的内容:

  

root

     总共0   drwxrwxrwx 1 root root 0 Jan 1 1970数据

     总共1   drwxrwxrwx 1 root root 0 Jan 1 1970 pgdata   -rw-rw-rw- 1 root root 5 Jan 1 1970 test

     

chown:更改'/ var / lib / postgresql / data'的所有权:输入/输出错误

     

chown:更改'/ var / lib / postgresql / data / pgdata'的所有权:输入/输出   错误

我还在shell脚本中写了一个简单的测试文件到pgdata目录,发现它存在于我的SDCard上。据我所知,输入/输出错误与权限无关。此外,能够以root身份写入目录意味着文件系统处于正常工作状态。我不能说(以root身份)。怎么会这样?

0 个答案:

没有答案