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

Abu*_*ifa 24 kubernetes 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
Run Code Online (Sandbox Code Playgroud)

aer*_*ite 24

您无法直接将本地目录挂载到Pod中.

首先,您需要将目录安装$HOME/go/src/github.com/nginx到minikube中.

$ minikube start --mount-string="$HOME/go/src/github.com/nginx:/data"
Run Code Online (Sandbox Code Playgroud)

然后,如果/data使用hostPath 挂载到Pod中,您将获得Pod中的本地目录数据.

还有另一种方式

主机的$HOME目录被挂载到minikube的/hosthome目录中.在这里,您将获得您的数据

$ ls -la /hosthome/go/src/github.com/nginx
Run Code Online (Sandbox Code Playgroud)

因此,要安装此目录,您可以更改Pod的hostPath

hostPath:
  path: /hosthome/go/src/github.com/nginx
Run Code Online (Sandbox Code Playgroud)

  • 我在 pod 中没有 /hosthome (10认同)
  • @aclokay Mountpoint根据VM驱动程序而有所不同,如[this](https://kubernetes.io/docs/setup/minikube/#mounted-host-folders)表所示.请注意,它通常不适用于KVM驱动程序.在版本0.28中使用VirtualBox时似乎还有一个当前未解决的错误,请参见此处. (3认同)
  • 似乎挂载功能不稳定:https://github.com/kubernetes/minikube/issues/3048 (3认同)
  • 我发现我在 OSX 上只有空目录,直到我从 --vm-driver=docker 切换到 virtualbox,最后很高兴 (3认同)

Aks*_*ood 12

我找到了一个方法。

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

我们可以使用hostPathin指定我们要添加到容器中的目录volumes

  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
Run Code Online (Sandbox Code Playgroud)

  • 你能分享你指定卷的完整 yaml 吗?或者详细说明您在哪里进行了更改。我不清楚你可以在哪里这样做。我尝试过并被告知在我尝试的上下文中,卷是未知的。 (8认同)
  • 这是有效的,因为默认情况下 minikube 会将主机的 /Users 挂载到 macos 中的 VM 内的 /Users 中。对于 linux,它将是 /home -&gt; /hosthome。对于 Windows C://Users -&gt; /c/Users。对于参考 - https://kubernetes.io/docs/setup/minikube/#mounted-host-folders (3认同)

K.S*_*.S. 10

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

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

  • @SanghyunLee 大量谷歌搜索,最后只是查看 `minikube start --help` 并从那里找到了 `--mount` 参数的描述:“这将启动挂载守护进程并自动将文件挂载到 minikube” (2认同)

Iva*_*van 9

默认安装目录

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
Run Code Online (Sandbox Code Playgroud)

由于 Minikube 是一个单节点 Kubernetes 集群,因此您可以安装/Users/...在您的 pod 中。

推荐方式

minikube mount /path/to/dir/to/mount:/vm-mount-path是将目录挂载到 minikube 中的推荐方法,以便它们可以在本地 Kubernetes 集群中使用。该命令适用于所有支持的平台。

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


Cha*_*Hey 8

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

首先,我正在minikubevirtualbox的驱动程序。

minikube version
minikube version: v1.9.2
Run Code Online (Sandbox Code Playgroud)

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

如果您为此而苦苦挣扎,我强烈建议您运行 minikube help 来查看标志是什么。我怀疑这些可能会因不同的版本/构建而改变。


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

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/
Run Code Online (Sandbox Code Playgroud)

希望额外的润色、细节和组织可以帮助其他人在这方面更快地行动。


重新审视这个,因为其他人似乎喜欢它:如果你被绑定到 pure minikube,我建议使用上面的,但我找到了更好的方法来使用 skaffold 和 docker for mac 在本地开发 minikube 集群。Docker for mac 可以使用本地机器的 docker 守护进程在本地(在容器中)运行像 k8s 集群这样的 minikube(所以挂载文件等等是轻而易举的)。它很可爱,与 skaffold 一起使用可以使热重载和所有其他天堂般的功能成为可能。如果您对 minikube 的重量不满意,请检查这些技术。


小智 7

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

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