从 docker windows 在 kubernetes 上使用 helm 安装 mongodb 时出错 "invalid mode"
Error "invalid mode" installing mongodb with helm on kubernetes from docker windows
我正在试验 Kubernetes 和 helm。我已经通过 docker windows 安装了k8s并创建了一个集群。我已经成功安装了仪表板和头盔。在 运行 helm install stable/mongodb
之后,我在 k8s 仪表板 Error: Error response from daemon: invalid mode: /bitnami/mongodb
中看到以下错误。 /bitnami/mongodb 是由 mongodb 图表创建的持久卷的默认挂载点。
这是我的仪表板的屏幕截图。
我不太确定如何进一步调试它。我对此很陌生,所以我可能会遗漏一些明显的东西。任何指针?
k8s through docker windows
这几乎肯定是您遇到麻烦的原因,因为 Windows 及其文件系统与传统的 Linux-y docker 世界不同。因此,这些目录极不可能属于正确的 Linux user-id,更不可能是正确的 "permission bits" (rwx
) mongodb 期待。
有几种方法可以检验这一理论:
- 如果您的 docker-for-windows 实际上是 运行 在 Linux 虚拟机中(就像由 VirtualBox、VMware 等支持的 docker-machine 的情况),那么您可以将 Pod 的
volume:
更改为 emptyDir: {}
或 hostPath:
,因为这些目录实际上将驻留在 Linux 虚拟机上。我认为 可能 对于 Hyper-V 支持的 docker-machine 虚拟机也是如此,但我对它们没有太多经验
- 如果您正在使用作为 Win32/Win64 应用程序构建的实际
dockerd
(不太可能,但我想可能),那么您可以 尝试 切换到NFS(假设 mongodb 没有抱怨)因为 AFAIK 在安装 NFS 文件夹时对 UID 和 permission-bit 映射有更大的影响
如果您在 emptyDir:
或 hostPath:
应用程序启动时遇到这种情况,那么您现在面临的挑战是找到一些使用 Linux-friendly 文件系统的存储机制并将其用于Windows。同样,在您拥有虚拟机的情况下,您很有可能可以将虚拟磁盘附加到机器上,使用 Linux 文件系统对其进行格式化,然后重新开始工作。对于 network-backed 文件系统也是如此,模一会希望对 network-backed 文件系统和 database-y 之类的东西保持谨慎 mongodb -- 尤其是 mongodb.
如果我可以提供意见,除了我希望的是一些建设性的调试技巧:你只是在寻求一个痛苦的世界,试图在 Windows 上做那些事情。它几乎没有足够的时间来处理这些情况,也几乎没有用于寻找解决方案的生态系统。仅供您参考。
我通过切换到 Docker 工具箱和使用 Virtualbox 而不是 hyperv 的 minikube 解决了这个问题。通过 helm 安装 mongodb 完全符合预期。 Docker for Windows 安装程序在 hyperv 中安装的 kubernetes 似乎存在一些问题。
我正在试验 Kubernetes 和 helm。我已经通过 docker windows 安装了k8s并创建了一个集群。我已经成功安装了仪表板和头盔。在 运行 helm install stable/mongodb
之后,我在 k8s 仪表板 Error: Error response from daemon: invalid mode: /bitnami/mongodb
中看到以下错误。 /bitnami/mongodb 是由 mongodb 图表创建的持久卷的默认挂载点。
这是我的仪表板的屏幕截图。
我不太确定如何进一步调试它。我对此很陌生,所以我可能会遗漏一些明显的东西。任何指针?
k8s through docker windows
这几乎肯定是您遇到麻烦的原因,因为 Windows 及其文件系统与传统的 Linux-y docker 世界不同。因此,这些目录极不可能属于正确的 Linux user-id,更不可能是正确的 "permission bits" (rwx
) mongodb 期待。
有几种方法可以检验这一理论:
- 如果您的 docker-for-windows 实际上是 运行 在 Linux 虚拟机中(就像由 VirtualBox、VMware 等支持的 docker-machine 的情况),那么您可以将 Pod 的
volume:
更改为emptyDir: {}
或hostPath:
,因为这些目录实际上将驻留在 Linux 虚拟机上。我认为 可能 对于 Hyper-V 支持的 docker-machine 虚拟机也是如此,但我对它们没有太多经验 - 如果您正在使用作为 Win32/Win64 应用程序构建的实际
dockerd
(不太可能,但我想可能),那么您可以 尝试 切换到NFS(假设 mongodb 没有抱怨)因为 AFAIK 在安装 NFS 文件夹时对 UID 和 permission-bit 映射有更大的影响
如果您在 emptyDir:
或 hostPath:
应用程序启动时遇到这种情况,那么您现在面临的挑战是找到一些使用 Linux-friendly 文件系统的存储机制并将其用于Windows。同样,在您拥有虚拟机的情况下,您很有可能可以将虚拟磁盘附加到机器上,使用 Linux 文件系统对其进行格式化,然后重新开始工作。对于 network-backed 文件系统也是如此,模一会希望对 network-backed 文件系统和 database-y 之类的东西保持谨慎 mongodb -- 尤其是 mongodb.
如果我可以提供意见,除了我希望的是一些建设性的调试技巧:你只是在寻求一个痛苦的世界,试图在 Windows 上做那些事情。它几乎没有足够的时间来处理这些情况,也几乎没有用于寻找解决方案的生态系统。仅供您参考。
我通过切换到 Docker 工具箱和使用 Virtualbox 而不是 hyperv 的 minikube 解决了这个问题。通过 helm 安装 mongodb 完全符合预期。 Docker for Windows 安装程序在 hyperv 中安装的 kubernetes 似乎存在一些问题。