卷“mongo”的MountVolume.SetUp失败:hostPath类型检查失败:/ mongo / data不是目录

时间:2018-02-22 12:21:56

标签: docker kubernetes rancher

我正在尝试配置hostPath以启动Mongodb pod。

我只有一个kubernetes v1.8.5节点与rancher最后一个稳定版本一起安装。

我创建了文件夹/mongo/data并允许所有用户拥有所有权限。 enter image description here

我可以使用没有sudo的docker完美地运行docker image:

docker run --name some-mongo -v /mongo/data:/data/db mongo:3.2.1

但是当我发布到kubernetes时:

sudo kubectl create -f mongodb.yml

我得到MountVolume.SetUp failed for volume "mongo" : hostPath type check failed: /mongo/data is not a directory

这是mongodb.yml:

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: mongo:3.2.1
    name: test-container
    volumeMounts:
    - mountPath: /data/db
      name: mongo
  volumes:
  - name: mongo
    hostPath:
      # directory location on host
      path: /mongo/data
      # this field is optional
      type: Directory

知道我应该在哪找吗?

5 个答案:

答案 0 :(得分:3)

从mongodb.yml中删除type: Directory按预期工作

答案 1 :(得分:2)

type: Directory更改为type: DirectoryOrCreate对我有用。

答案 2 :(得分:2)

如果您有机会使用minikube,请不要忘记minikube本身就是一个容器。因此,hostPath指向该容器中的路径,而不是主机上的路径。您必须将PC路径安装到minikube容器中,然后再安装到POD中。

示例: minikube start --mount --mount-string="/host/path:/minikubeContainer/path"

答案 3 :(得分:0)

您正在直接在主节点上创建docker容器。因此,您可以使用新创建的目录运行docker容器。但是,当您启动kubernetes yaml文件时,它打算在辅助节点上运行。由于您是在主节点上创建目录的,因此kubelet无法在辅助节点上找到目录并且失败。这就是为什么类型标记上的“ DirectoryorCreate”值是对此的一种解决方案。

答案 4 :(得分:0)

我遇到了与您显示的完全相同的错误。

就我而言,问题是未创建卷 hostPath 中定义的文件夹。创建文件夹后,问题就解决了。