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

Posted

技术标签:

【中文标题】卷“mongo”的 MountVolume.SetUp 失败:hostPath 类型检查失败:/mongo/data 不是目录【英文标题】:MountVolume.SetUp failed for volume "mongo" : hostPath type check failed: /mongo/data is not a directory 【发布时间】:2018-08-02 07:08:19 【问题描述】:

我正在尝试配置一个 hostPath 来启动 Mongodb pod。

我只安装了一个节点 kubernetes v1.8.5 和 rancher 最新稳定版本。

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

我可以在没有 sudo 的情况下使用 docker 完美运行 docker 映像:

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

知道我应该去哪里找吗?

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

老兄,非常感谢!请注意 - minikube 是 VM,而不是容器。 @Skyblade 很高兴能提供帮助,也很高兴学到新东西!你介意扩展“minikube 是 VM”吗?我认为如果你使用 Docker,那么 minikube 就是它的容器。例如。你可以做docker ps 并查看 minikube 容器正在运行。此外,当我试图通过清理docker system prune 来释放一些磁盘空间时,我遇到了很多问题,它删除了我停止的 minikube 容器。我完全糊涂了,我的 minikube 实例去哪儿了?!也许我错了,你怎么知道它是一个虚拟机? 我的错。过去是这样,但现在 minikube 使用 docker 驱动程序,所以这不是真的。很抱歉误导了你。【参考方案3】:

从 mongodb.yml 中删除 type: Directory 可以正常工作

更新:

在新版本中,将type: Directory 更改为type: DirectoryOrCreate 会创建目录。

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

我得到了和你显示的完全相同的错误。

就我而言,问题是未创建卷 hostPath 中定义的文件夹。 在工作节点服务器中创建文件夹后,问题已得到解决。

【讨论】:

以上是关于卷“mongo”的 MountVolume.SetUp 失败:hostPath 类型检查失败:/mongo/data 不是目录的主要内容,如果未能解决你的问题,请参考以下文章

docker stack部署与mongo卷

k8s部署mongo集群

从 WiredTiger 文件恢复损坏的 mongo db

如何在 Docker compose 中运行一次命令

mongo 查看仲裁点

JS写mongo命令