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

时间:2018-01-31 05:22:26

标签: 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

8 个答案:

答案 0 :(得分:17)

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

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

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

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

另一种方式

主机的$HOME目录被装入minikube的/hosthome目录。在这里,您将获得数据

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

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

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

答案 1 :(得分:8)

我尝试了aerokite的解决方案,但是发现我必须同时通过--mount--mount-string "local-path:minikube-path"才能在minikube中安装目录。

minikube start --mount-string ${HOME}/go/src/github.com/nginx:/data --mount。 花了一些时间解决这个问题。

答案 2 :(得分:6)

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

首先,我以minikube作为驱动程序运行virtualbox

minikube version
minikube version: v1.9.2

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

如果您为此而苦苦挣扎,我强烈建议您运行minikube帮助来查看标志。我怀疑这些可能会针对不同的版本/内部版本进行更改。


如果要将此挂载目录放入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/

希望额外的修饰,细节和组织可以帮助其他人更快地完成此任务。


仿佛其他人喜欢它: 如果您受制于纯minikube,我建议使用上面的方法,但是我发现了使用skaffold和docker for mac在本地开发minikube集群的更好方法。 Docker for mac可以使用本地计算机的docker守护程序在本地(容器中)运行像k8s集群这样的微型库(因此,挂载文件非常容易)。它很可爱,可以与skaffold一起使用,从而可以进行热装和所有其他天堂般的功能。如果您对minikube的笨重感不满意,请检查一下这些技术。

答案 3 :(得分:4)

我找到了方法。

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

我们可以使用hostPath中的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

答案 4 :(得分:2)

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

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

答案 5 :(得分:0)

DefaultMountDir

默认情况下,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 VM进行minikube ssh并进行探索:

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

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

推荐方式

  推荐使用

minikube mount /path/to/dir/to/mount:/vm-mount-path将目录挂载到minikube中,以便可以在本地Kubernetes集群中使用它们。该命令在所有受支持的平台上均有效。

请参阅文档和示例: https://github.com/kubernetes/minikube/blob/master/docs/host_folder_mount.md

答案 6 :(得分:0)

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

答案 7 :(得分:-1)

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

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

这只会将本地文件系统根目录挂载到minikube并保持系统之间的无缝连接。希望有帮助。