将本地目录挂载到 minikube 中的 pod

Mount local directory into pod in minikube

我是 运行 minikube v0.24.1。在这个 minikube 中,我将为我的 nginx 应用程序创建一个 Pod。而且我还想从我的本地目录传递数据。

这意味着我想将我的本地 $HOME/go/src/github.com/nginx 挂载到我的 Pod

我该怎么做?

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - image: nginx:0.1
    name: nginx
    volumeMounts:
    - mountPath: /data
      name: volume
  volumes:
  - name: volume
    hostPath:
      path: /data

您不能将本地目录直接挂载到您的 Pod 中。

首先,您需要将目录 $HOME/go/src/github.com/nginx 挂载到您的 minikube 中。

$ minikube start --mount-string="$HOME/go/src/github.com/nginx:/data" --mount

然后,如果您使用 hostPath 将 /data 挂载到您的 Pod 中,您会将本地目录数据放入 Pod 中。

还有另一种方法

主机的 $HOME 目录被挂载到 minikube 的 /hosthome 目录中。在这里你会得到你的数据

$ ls -la /hosthome/go/src/github.com/nginx

因此,要挂载此目录,您可以更改 Pod 的主机路径

hostPath:
  path: /hosthome/go/src/github.com/nginx

我找到方法了。

这样就可以直接挂载目录到容器中了。您不必先将目录挂载到 minikube。

我们可以在volumes

中使用hostPath来指定要添加到容器中的目录
  volumeMounts:
    - name: crypto-config
      mountPath: <PATH IN CONTAINER>
    - name: channel-artifacts
      mountPath: /opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
    - name: chaincode
      mountPath: /opt/gopath/src/github.com/chaincode
  volumes:
    - name: crypto-config
      hostPath:
        path: <YOUR LOCAL DIR PATH>
    - name: channel-artifacts
      hostPath:
        path: /Users/akshaysood/Blockchain/Kubernetes/Fabric/network/channel-artifacts
    - name: chaincode
      hostPath:
        path: /Users/akshaysood/Blockchain/Kubernetes/Fabric/network/chaincode

我尝试了 aerokite 的解决方案,但发现我必须通过 --mount 以及 --mount-string "local-path:minikube-path" 才能在 minikube 中挂载目录。

minikube start --mount-string ${HOME}/go/src/github.com/nginx:/data --mount。 花了一些时间弄清楚这一点。

对于已经 运行 的 minikube,您可以执行以下操作:

nohup minikube mount <host-directory-path>:<desired-minikube-directory-path> &

默认安装目录

Minikube 已默认将主目录挂载到 VM:

  • 在 Mac 上它挂载所有用户的目录 - /Users
  • 在 Linux 和 Windows 上只是当前用户的家 - homedir.HomeDir()

如果您浏览 Minikube 资源,您可以看到它是如何做到这一点的。
这是目前的搜索结果,但结果可能会随着时间的推移而改变:
https://github.com/kubernetes/minikube/search?q=DefaultMountDir&unscoped_q=DefaultMountDir

HomeDir()的定义是: https://godoc.org/k8s.io/client-go/util/homedir

您可以随时 minikube ssh 进入 Minikube VM 并探索它:

$ df -hl
Filesystem      Size  Used Avail Use% Mounted on
...
/Users          466G  442G   25G  95% /Users

由于 Minikube 是单节点 Kubernetes 集群,因此您可以在 pods.

内挂载 /Users/...

推荐方式

minikube mount /path/to/dir/to/mount:/vm-mount-path is the recommended way to mount directories into minikube so that they can be used in your local Kubernetes cluster. The command works on all supported platforms.

参见文档和示例: https://minikube.sigs.k8s.io/docs/tasks/mount/

不确定我是否迟到了,但我通过执行以下命令进行了 root:root 映射:

minikube start --mount-string="/:/"

这只会将您的本地文件系统根目录挂载到 minikube,并在 systems.Hope 之间保持无缝连接。

在努力完成一个小时并查看这些答案后,我得到了与工作略有相似的东西:

首先,我 运行宁 minikube virtualbox 作为 driver。

minikube version
minikube version: v1.9.2

我的启动命令: minikube start --mount=true --mount-string=$(HOME)/somedir/on/host/:/somedir/on/vm/

如果您为此苦恼,我强烈建议 运行ning minikube 帮助查看标志是什么。我怀疑这些可能会因不同的 versions/builds.

而改变

如果您希望将此挂载目录放入 pods,则必须在清单文件中建立卷和卷挂载。 这是我的简化版本。

apiVersion: v1
kind: Service
...
---

apiVersion: apps/v1
kind: Deployment
...
spec:
  replicas: 1
  ...
  template:
    ...
    spec:
      containers:
      ...
      volumeMounts:
      - name: someName
        mountPath: /somedir/on/vm/
    ...
    volumes:
    - name: someName
      hostPath:
        path: /somedir/on/vm/

希望额外的修饰、细节和组织可以帮助其他人在这方面更快地前进。


重新审视这个,因为其他人似乎喜欢它: 如果你依赖于纯粹的 minikube,我建议使用上面的方法,但我发现使用 skaffold 和 docker for mac 在本地开发 minikube 集群的方法要好得多。 Docker 对于 mac 可以 运行 使用本地 machine 的 docker 守护进程(因此挂载文件等)在本地(在容器中)像 k8s 集群breeze)。它很可爱,将它与 skaffold 一起使用可以实现热重载和所有其他美妙的功能。如果您对 minikube 的重量不满意,请检查这些技术。

检查 minikube 中安装了哪些 pass 运行 minikube ssh 然后 ls -la