minikube + nginx + volumeMount无法正常工作

时间:2017-07-15 05:37:06

标签: nginx docker kubernetes minikube

我正在按照示例找到here

我只是想了解卷如何与Kubernetes一起使用。我正在本地测试,所以我需要与minikube抗衡。我想尽可能简化这个。我正在使用nginx,并希望它显示从我的localhost上的文件夹安装的内容。

环境: macOS 10.12.5 minikube 0.20.0 + xhvve VM

我正在使用最新的ngninx image from GitHub而没有任何修改。

当我在minikube之外运行泊坞窗图像时,这非常有效。

docker run --name flow-4 \
 -v $(pwd)/website:/usr/share/nginx/html:ro \
 -P -d nginx

当我尝试在minikube中运行它时,当我访问托管页面时,我得到了404响应。为什么?

以下是我的kubernetes配置文件...
kubernets /部署/ 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 /部署/ 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 Not Found'消息(在nginx / 1.13.3页脚之上)

为什么我会收到404? nginx是否无法查看已挂载文件夹的内容?托管kubernetes的VM是否无法访问我的“网站”文件夹?

我怀疑这是问题所在。我进入了kubernetes pod

kubectl exec -it flow-4-1856897391-m0jh1 /bin/bash

当我查看/ usr / share / nginx / html文件夹时,它是空的。如果我手动添加index.html文件,那么我可以在浏览器中看到它。但为什么Kubernetes不会将我的本地驱动器挂载到此文件夹?

更新

从my / Users / **文件夹安装完整路径似乎有问题。相反,我使用'minikube mount'命令将本地文件夹容器index.html装入minikube VM。然后在一个单独的终端我开始部署,它可以看到index.html文件就好了。

这是我更新的deployment.yaml文件,它有更清晰的文件名,可以更好地解释不同的文件夹以及它们的安装位置......

以下是我的kubernetes配置文件...
kubernets /部署/ 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

它使用的是帖子前面的相同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/

一旦所有豆荚都在运行......
5. minikube service flow-4

您应该在浏览器中看到“来自本地存储的Hello”消息。您可以编辑本地index.html文件,然后刷新浏览器以查看内容更改。

你可以把它撕下来...... kubectl delete deployments,services flow-4

1 个答案:

答案 0 :(得分:0)

您创建的文件夹可能不在kubernetes节点中(它是minikube vm)。

尝试在vm中创建文件夹,然后重试

ssh -i ~/.minikube/machines/minikube/id_rsa docker@$(minikube ip)
mkdir /Users/myuser/website

另请参阅minikube host mount folder功能