2017-07-15 65 views
1

我以下發現的例子hereminikube + nginx + volumeMount不工作

我只是想了解卷如何與Kubernetes配合使用。我在本地測試,所以我需要與minikube抗衡。我試圖儘可能簡化。我正在使用nginx,並希望它顯示從本地主機上的文件夾掛載的內容。

環境: MACOS 10.12.5 minikube 0.20.0 + xhvve VM

我使用的是最新的ngninx image from GitHub不作任何修改。

當我在minikube之外運行docker鏡像時,這個功能完美無缺。

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

當我嘗試在minikube運行它,我得到一個404響應,當我訪問託管的網頁-always。爲什麼?

這裏是我的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的虛擬機是否無法訪問我的「網站」文件夾?

我懷疑這是問題所在。我ssh到kubernetes莢

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

當我看着在/ usr /共享/ nginx的/ HTML文件夾,它是空的。如果我手動添加一個index.html文件,那麼我可以在瀏覽器中看到它。但爲什麼Kubernetes不會將我的本地驅動器安裝到此文件夾?

更新

好像有什麼問題從我/用戶/ **文件夾安裝完整路徑。相反,我使用'minikube mount'命令將本地文件夾容器index.html安裝到minikube虛擬機中。然後在一個單獨的終端中,我開始部署,它可以看到index.html文件。

這裏是具有清晰的文件名,以便更好地解釋不同的文件夾,並在那裏安裝更新我的文件deployment.yaml ...

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

讓這個運行....

在一個新的終端,同一個文件夾...
4. kubectl create -f kubernetes/deploy/

一旦所有的豆莢正在運行...
5. minikube service flow-4

你應該看到'地獄o從本地存儲'的消息很棒你在你的瀏覽器。您可以編輯本地index.html文件,然後刷新瀏覽器以查看內容更改。

你可以撕了這一切與此... kubectl delete deployments,services flow-4

回答

0

也許你創建的文件夾不kubernetes節點(這是minikube VM)。

嘗試內部VM創建文件夾,然後再試一次

ssh -i ~/.minikube/machines/minikube/id_rsa [email protected]$(minikube ip) 
mkdir /Users/myuser/website 

而且看看minikube host mount folder功能

+0

我相信一切在/用戶被自動安裝到minikube VM。爲了測試,我按照你的建議把它甩進去了。一旦進入minikube VM,我可以將目錄切換到/ Users/myuser/website。我可以看到index.html文件。使用'minikube安裝'不會改變任何東西。它在minikube VM中仍然可見,但在我的吊艙內不可見。任何其他想法? – anschoewe

+0

經過多次挖掘,從/ Users//<很多子路徑>/local-website安裝了一條很長的路徑似乎有些奇怪。我簡化了一些東西,只是用'minikube mount local-website:/ kub-website,'local-website'在我的當前目錄中。然後,我更新了kubernetes使用的部署描述符,以簡單地安裝/ kub-website文件夾。工作很好。我會更新我的答案以反映它。感謝您指點我'minikube mount'的方向。 – anschoewe