将本地目录挂载到 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.
不确定我是否迟到了,但我通过执行以下命令进行了 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
我是 运行 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.
不确定我是否迟到了,但我通过执行以下命令进行了 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