2017-07-15 7 views
1

私は次の例を見つけましたhereです。minikube + nginx + volumeMountが動作しない

クヴェルネットでのボリュームの仕組みを理解しようとしています。私はローカルでテストしているので、私はminikubeと争う必要があります。私はこれを可能な限りシンプルにしようとしています。私はnginxを使用していて、自分のlocalhost上のフォルダからマウントされたコンテンツを表示させたいと思っています。

環境: MacOSの10.12.5 minikube 0.20.0 + xhvve VM

私は変更なしで、最新のngninx image from GitHubを使用しています。

これは、ミニクーバーの外でドッカー画像を実行すると完全に機能します。

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

しかし、私はminikubeでそれを実行しようとすると、私はホストされたページ-alwaysを訪れたとき、私は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 

私の眉で開くとWebページのindex.htmlページを表示する代わりに、「404 Not Found」メッセージ(nginx/1.13.3フッターの上に)が表示されます。

なぜ私は404を取得していますか? nginxは私のマウントされたフォルダの内容を見ることができませんか? kubernetesをホストしているVMが私の 'website'フォルダにアクセスできないのですか?

これは問題があると思われます。私はを/ usr/share/nginxの/ htmlのフォルダに見ると、それが空であるkubernetesポッド

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

にsshを。 index.htmlファイルを手動で追加すると、ブラウザでそのファイルを見ることができます。しかし、なぜKubernetesは私のローカルドライブをこのフォルダにマウントしませんか?

更新

私の/ユーザ/ **フォルダから完全なパスを取り付けるに何か問題があるようです。代わりに、ローカルのフォルダコンテナindex.htmlをminikube VMにマウントするために、「minikube mount」コマンドを使用しました。その後、別の端末でデプロイメントを開始し、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/

ポッドが走っています...

「地獄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 VMに搭載されていると信じて minikube host mount folder機能

+0

を見てみましょう。テストするために、私はあなたが示唆するように、それにssh'ed。 minikube VMの中に入ったら、/ Users/myuser/websiteにディレクトリを変更できます。私はindex.htmlファイルを見ることができます。 'minikube mount'を使用しても何も変わりません。これはミニクーベブVMではまだ表示されていますが、ポッド内には表示されません。他のアイデア? – anschoewe

+0

もう少し掘り下げたところで、/ Users//<たくさんのサブパス>/local-websiteからの長いパスをマウントすると、何か変わったようです。私はもう少し単純化して、ちょうど 'minikube mount local-website:/ kub-website、ここでは' local-website 'が私の現在のディレクトリにありました。私は/ kub-websiteフォルダを単にマウントするために、kubernetesで使用されていた私のデプロイメント記述子を更新しました。素晴らしい仕事をした。私はそれを反映するために私の答えを更新します。私に「ミニクーブマウント」の方向を指摘してくれてありがとう。 – anschoewe