与minikube主机path – Kubernetes

更新:我连接到minikubevm,我看到我的主机目录安装,但没有文件那里。 另外,当我创build一个文件,它不会在我的主机。 任何链接都在他们之间

我尝试挂载一个主机目录来开发我的应用程序kubernetes。

正如文档build议,我使用minikube在我的电脑上运行我的kubernetes集群。 我们的目标是创build一个开发环境,使用docker和kubernetes开发我的应用程序。 我想装载一个本地目录,所以我的docker将从那里读取代码的应用程序。 但这不行。 任何帮助将非常感激。

我的testing应用程序(server.js):

var http = require('http'); var handleRequest = function(request, response) { response.writeHead(200); response.end("Hello World!"); } var www = http.createServer(handleRequest); www.listen(8080); 

我的Dockerfile:

 FROM node:latest WORKDIR /code ADD code/ /code EXPOSE 8080 CMD server.js 

我的pod kubernetesconfiguration:(pod-configuration.yaml)

 apiVersion: v1 kind: Pod metadata: name: apiserver spec: containers: - name: node image: myusername/nodetest:v1 ports: - containerPort: 8080 volumeMounts: - name: api-server-code-files mountPath: /code volumes: - name: api-server-code-files hostPath: path: /home/<myuser>/Projects/nodetest/api-server/code 

我的文件夹是:

 /home/<myuser>/Projects/nodetest/ - pod-configuration.yaml - api-server/ - Dockerfile - code/ - server.js 

当我运行没有hostPath卷的docker镜像时,这当然是可行的,但是问题在于,每次更改时,我都必须重新创build对于开发没有任何影响的镜像,这就是为什么我需要卷hostPath。

任何想法 ? 为什么我不能成功挂载我的本地目录?

谢谢您的帮助。

编辑:看起来像解决scheme是要么使用privilaged容器 ,要么手动安装您的主文件夹,以允许MiniKube虚拟机从您的hostPath读取 – https://github.com/boot2docker/boot2docker#virtualbox-guest-additions 。 (感谢Eliel找出答案)。

使用minikubeconfigurationhostPath卷是绝对有可能的 – 但是有很多怪癖,对于这个特殊的问题没有很好的支持。

尝试从您的Dockerfile中删除ADD code/ /code 。 Docker的“ADD”指令将代码从主机复制到容器的/code目录中。 这就是为什么重build映像成功更新您的代码。

当Kubernetes尝试将容器的/code目录安装到主机path时,它发现这个目录已经充满了映射到映像中的代码。 如果您从构build步骤中解脱出来,Kubernetes应该能够在运行时成功安装主机path。

另外一定要检查主机上code/目录的权限。

我唯一的想法就是挂载在根目录下。 将Kubernetes hostPath卷挂载到根目录中的目录时,我遇到了问题(我认为这是与权限有关的)。 所以,另外一个尝试是像/var/www/html这样的mountPath。

以下是一个function性的hostPath卷的例子:

 apiVersion: v1 kind: Pod metadata: name: example spec: volumes: - name: example-volume hostPath: path: '/Users/example-user/code' containers: - name: example-container image: example-image volumeMounts: - mountPath: '/var/www/html' name: example-volume 

最佳做法是将代码构build到图像中,而不应该使用刚刚从磁盘传来的代码来运行图像。 你的Dockerfile应该看起来更像这样:

FROM node:latest COPY /code/server.js /code/server.js EXPOSE 8080 CMD /code/server.js

然后在没有任何卷的情况下运行Kubernetes上的图像。 每次更新代码时,都需要重新生成映像并更新窗格。

另外,我目前还不知道minikube允许在创build的虚拟机和运行虚拟机的主机之间进行装载。

如果你真的想在容器运行的时候改变代码的极快的反馈周期,你也许可以在没有Kubernetes的情况下使用Docker自己的-v /path/to/host/code:/code然后一旦你准备好了构build映像并在minikube上进行部署和testing。 但是,如果您要更改节点应用程序的主要.js文件,我不确定这会起作用。