minikube + nginx + volumeMount 不工作
minikube + nginx + volumeMount not working
我正在按照找到的示例进行操作 here。
我只是想了解卷如何与 Kubernetes 一起工作。我在本地测试,所以我需要与 minikube 抗衡。我试图让这尽可能简单。我正在使用 nginx 并希望它显示从我的本地主机上的文件夹装载的内容。
环境:
macOS 10.12.5
minikube 0.20.0 + xhvve 虚拟机
我使用的是最新的 ngninx image from GitHub,没有任何修改。
当我 运行 minikube 外部的 docker 图像时,这非常有效。
docker run --name flow-4 \
-v $(pwd)/website:/usr/share/nginx/html:ro \
-P -d nginx
但是当我尝试在 minikube 中 运行 它时,当我访问托管页面时总是收到 404 响应。为什么?
这是我的 kubernetes 配置文件...
kubernets/deploy/deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
run: flow-4
name: flow-4
spec:
replicas: 1
selector:
matchLabels:
run: flow-4
template:
metadata:
labels:
run: flow-4
spec:
containers:
- image: nginx
name: flow-4
ports:
- containerPort: 80
volumeMounts:
- mountPath: /usr/share/nginx/html
name: flow-4-volume
volumes:
- name: flow-4-volume
hostPath:
path: /Users/myuser/website
kubernets/deploy/svc.yaml
apiVersion: v1
kind: Service
metadata:
labels:
run: flow-4
name: flow-4
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: flow-4
type: NodePort
最后,我运行是这样的:
kubectl create -f kubernetes/deploy/
minikube service flow-4
当它在我的浏览器中打开时,我没有在网站文件夹中看到我的 index.html 页面,而是收到一条“404 未找到”消息(在 nginx/1.13.3 页脚上方)
为什么我得到 404? nginx 是否无法看到我安装的文件夹的内容? 托管 kubernetes 的 VM 是否无法访问我的 'website' 文件夹?
我怀疑这是问题所在。我通过 ssh 进入 kubernetes pod
kubectl exec -it flow-4-1856897391-m0jh1 /bin/bash
当我查看 /usr/share/nginx/html 文件夹时,它是空的。如果我手动添加一个 index.html 文件,那么我可以在我的浏览器中看到它。但是为什么 Kubernetes 不会将我的本地驱动器挂载到这个文件夹?
更新
从我的 /Users/** 文件夹装载完整路径似乎有问题。相反,我使用 'minikube mount' 命令将本地文件夹容器 index.html 挂载到 minikube VM 中。然后在一个单独的终端中我开始了我的部署,它可以看到 index.html 文件就好了。
这是我更新的 deployment.yaml 文件,文件名更清晰,可以更好地解释不同的文件夹及其安装位置...
这是我的 kubernetes 配置文件...
kubernets/deploy/deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
run: flow-4
name: flow-4
spec:
replicas: 1
selector:
matchLabels:
run: flow-4
template:
metadata:
labels:
run: flow-4
spec:
containers:
- image: nginx
name: flow-4
ports:
- containerPort: 80
volumeMounts:
- mountPath: /usr/share/nginx/html
name: flow-4-volume
volumes:
- name: flow-4-volume
hostPath:
path: /kube-website
它使用 post 之前的相同 svc.yaml 文件。
然后我 运行 从我当前的目录中像这样整个事情。
1. mkdir local-website
2. echo 'Hello from local storage' > local-website/index.html
3. minikube mount local-website:/kube-website
让这个运行...
在新终端中,相同的文件夹...
4. kubectl create -f kubernetes/deploy/
一旦所有pods都运行宁...
5. minikube service flow-4
您应该会在浏览器中看到 'Hello from local storage' 消息。您可以编辑本地 index.html 文件,然后刷新浏览器以查看内容更改。
你可以用这个把它全部拆掉...
kubectl delete deployments,services flow-4
可能你创建的文件夹不在kubernetes节点中(它是minikube vm)。
尝试在 vm 中创建文件夹并重试
ssh -i ~/.minikube/machines/minikube/id_rsa docker@$(minikube ip)
mkdir /Users/myuser/website
另请查看 minikube host mount folder 功能
我正在按照找到的示例进行操作 here。
我只是想了解卷如何与 Kubernetes 一起工作。我在本地测试,所以我需要与 minikube 抗衡。我试图让这尽可能简单。我正在使用 nginx 并希望它显示从我的本地主机上的文件夹装载的内容。
环境: macOS 10.12.5 minikube 0.20.0 + xhvve 虚拟机
我使用的是最新的 ngninx image from GitHub,没有任何修改。
当我 运行 minikube 外部的 docker 图像时,这非常有效。
docker run --name flow-4 \
-v $(pwd)/website:/usr/share/nginx/html:ro \
-P -d nginx
但是当我尝试在 minikube 中 运行 它时,当我访问托管页面时总是收到 404 响应。为什么?
这是我的 kubernetes 配置文件...
kubernets/deploy/deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
run: flow-4
name: flow-4
spec:
replicas: 1
selector:
matchLabels:
run: flow-4
template:
metadata:
labels:
run: flow-4
spec:
containers:
- image: nginx
name: flow-4
ports:
- containerPort: 80
volumeMounts:
- mountPath: /usr/share/nginx/html
name: flow-4-volume
volumes:
- name: flow-4-volume
hostPath:
path: /Users/myuser/website
kubernets/deploy/svc.yaml
apiVersion: v1
kind: Service
metadata:
labels:
run: flow-4
name: flow-4
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: flow-4
type: NodePort
最后,我运行是这样的:
kubectl create -f kubernetes/deploy/
minikube service flow-4
当它在我的浏览器中打开时,我没有在网站文件夹中看到我的 index.html 页面,而是收到一条“404 未找到”消息(在 nginx/1.13.3 页脚上方)
为什么我得到 404? nginx 是否无法看到我安装的文件夹的内容? 托管 kubernetes 的 VM 是否无法访问我的 'website' 文件夹?
我怀疑这是问题所在。我通过 ssh 进入 kubernetes pod
kubectl exec -it flow-4-1856897391-m0jh1 /bin/bash
当我查看 /usr/share/nginx/html 文件夹时,它是空的。如果我手动添加一个 index.html 文件,那么我可以在我的浏览器中看到它。但是为什么 Kubernetes 不会将我的本地驱动器挂载到这个文件夹?
更新
从我的 /Users/** 文件夹装载完整路径似乎有问题。相反,我使用 'minikube mount' 命令将本地文件夹容器 index.html 挂载到 minikube VM 中。然后在一个单独的终端中我开始了我的部署,它可以看到 index.html 文件就好了。
这是我更新的 deployment.yaml 文件,文件名更清晰,可以更好地解释不同的文件夹及其安装位置...
这是我的 kubernetes 配置文件...
kubernets/deploy/deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
run: flow-4
name: flow-4
spec:
replicas: 1
selector:
matchLabels:
run: flow-4
template:
metadata:
labels:
run: flow-4
spec:
containers:
- image: nginx
name: flow-4
ports:
- containerPort: 80
volumeMounts:
- mountPath: /usr/share/nginx/html
name: flow-4-volume
volumes:
- name: flow-4-volume
hostPath:
path: /kube-website
它使用 post 之前的相同 svc.yaml 文件。
然后我 运行 从我当前的目录中像这样整个事情。
1. mkdir local-website
2. echo 'Hello from local storage' > local-website/index.html
3. minikube mount local-website:/kube-website
让这个运行...
在新终端中,相同的文件夹...
4. kubectl create -f kubernetes/deploy/
一旦所有pods都运行宁...
5. minikube service flow-4
您应该会在浏览器中看到 'Hello from local storage' 消息。您可以编辑本地 index.html 文件,然后刷新浏览器以查看内容更改。
你可以用这个把它全部拆掉...
kubectl delete deployments,services flow-4
可能你创建的文件夹不在kubernetes节点中(它是minikube vm)。
尝试在 vm 中创建文件夹并重试
ssh -i ~/.minikube/machines/minikube/id_rsa docker@$(minikube ip)
mkdir /Users/myuser/website
另请查看 minikube host mount folder 功能