代码之家  ›  专栏  ›  技术社区  ›  anschoewe

minikube+nginx+volumeMount不工作

  •  2
  • anschoewe  · 技术社区  · 8 年前

    我遵循发现的示例 here

    我只是想了解卷是如何与Kubernetes一起工作的。我正在本地测试,所以我需要与minikube抗争。我正努力使这件事尽可能简单。我正在使用nginx,希望它能够显示从本地主机上的文件夹装载的内容。

    环境: macOS 10.12.5 minikube 0.20.0+xhvve虚拟机

    我用的是最新的 ngninx image from GitHub 没有任何修改。

    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
    

    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
    

    当它在我的浏览器中打开时,而不是看到我的索引。在网站文件夹中的html页面,我刚刚收到一条“404未找到”消息(在nginx/1.13.3页脚上方)

    为什么我得到404?nginx是否无法查看我装载的文件夹的内容? 托管kubernetes的虚拟机是否无法访问我的“网站”文件夹?

    我怀疑这就是问题所在。我飞进库伯内特吊舱

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

    使现代化

    从my/Users/**文件夹装载完整路径似乎有问题。相反,我使用“minikube mount”命令装载本地文件夹容器索引。html输入minikube虚拟机。然后在一个单独的终端中,我开始部署,它可以看到索引。html文件很好。

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

    这是我的kubernetes配置文件。。。

    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
    

    然后我从我当前的目录中运行了整个过程。
    1. mkdir local-website
    echo 'Hello from local storage' > local-website/index.html
    3. minikube mount local-website:/kube-website
    让它运行。。。。


    4. kubectl create -f kubernetes/deploy/


    minikube service flow-4

    您应该会在浏览器中看到“Hello from local storage”(你好,来自本地存储)的消息。您可以编辑本地索引。html文件,然后刷新浏览器以查看内容的更改。

    你可以用这个把它全部拆掉。。。 kubectl delete deployments,services flow-4

    1 回复  |  直到 8 年前
        1
  •  1
  •   Larry Cai    8 年前

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

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

    minikube host mount folder

    推荐文章