MountVolume.SetUp 卷 "mongo" 失败:主机路径类型检查失败:/mongo/data 不是目录
MountVolume.SetUp failed for volume "mongo" : hostPath type check failed: /mongo/data is not a directory
我正在尝试配置 hostPath 以启动 Mongodb pod。
我只有一个 kubernetes v1.8.5 节点安装了 rancher 最后一个稳定版本。
我已创建文件夹 /mongo/data
并允许所有用户使用所有权限。
我可以 运行 docker 使用 docker 完美地成像而无需 sudo:
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
知道我应该去哪里找吗?
从 mongodb.yml 中删除 type: Directory
按预期工作
更新:
在新版本中,将 type: Directory
更改为 type: DirectoryOrCreate
,创建目录。
将 type: Directory
更改为 type: DirectoryOrCreate
对我有用。
如果您有机会使用 minikube,请不要忘记 minikube 本身就是一个容器。因此 hostPath
指向该容器中的路径,而不是主机上的路径。您必须将您的 PC 路径挂载到 minikube 容器中,然后再挂载到 POD 中。
示例:
minikube start --mount --mount-string="/host/path:/minikubeContainer/path"
您正在直接在主节点上创建 docker 容器。因此,您可以 运行 docker 容器与新创建的目录。但是当您启动 kubernetes yaml 文件时,它打算 运行 在工作节点上。由于您在主节点上创建目录,因此 kubelet 无法在工作节点上找到目录并失败。这就是为什么类型标志上的“DirectoryorCreate”值是一种解决方案。
我得到的错误与您显示的完全相同。
就我而言,问题是未创建卷 hostPath 中定义的文件夹。 在工作节点服务器中创建文件夹后,问题得到解决。
作为 Windows 主持人,将路径格式从 Windows-style C:\Users\...
更改为 Unix-style /C/Users/...
对我有用。
我正在尝试配置 hostPath 以启动 Mongodb pod。
我只有一个 kubernetes v1.8.5 节点安装了 rancher 最后一个稳定版本。
我已创建文件夹 /mongo/data
并允许所有用户使用所有权限。
我可以 运行 docker 使用 docker 完美地成像而无需 sudo:
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
知道我应该去哪里找吗?
从 mongodb.yml 中删除 type: Directory
按预期工作
更新:
在新版本中,将 type: Directory
更改为 type: DirectoryOrCreate
,创建目录。
将 type: Directory
更改为 type: DirectoryOrCreate
对我有用。
如果您有机会使用 minikube,请不要忘记 minikube 本身就是一个容器。因此 hostPath
指向该容器中的路径,而不是主机上的路径。您必须将您的 PC 路径挂载到 minikube 容器中,然后再挂载到 POD 中。
示例:
minikube start --mount --mount-string="/host/path:/minikubeContainer/path"
您正在直接在主节点上创建 docker 容器。因此,您可以 运行 docker 容器与新创建的目录。但是当您启动 kubernetes yaml 文件时,它打算 运行 在工作节点上。由于您在主节点上创建目录,因此 kubelet 无法在工作节点上找到目录并失败。这就是为什么类型标志上的“DirectoryorCreate”值是一种解决方案。
我得到的错误与您显示的完全相同。
就我而言,问题是未创建卷 hostPath 中定义的文件夹。 在工作节点服务器中创建文件夹后,问题得到解决。
作为 Windows 主持人,将路径格式从 Windows-style C:\Users\...
更改为 Unix-style /C/Users/...
对我有用。