私は次の例を見つけました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
を見てみましょう。テストするために、私はあなたが示唆するように、それにssh'ed。 minikube VMの中に入ったら、/ Users/myuser/websiteにディレクトリを変更できます。私はindex.htmlファイルを見ることができます。 'minikube mount'を使用しても何も変わりません。これはミニクーベブVMではまだ表示されていますが、ポッド内には表示されません。他のアイデア? – anschoewe
もう少し掘り下げたところで、/ Users//<たくさんのサブパス>/local-websiteからの長いパスをマウントすると、何か変わったようです。私はもう少し単純化して、ちょうど 'minikube mount local-website:/ kub-website、ここでは' local-website 'が私の現在のディレクトリにありました。私は/ kub-websiteフォルダを単にマウントするために、kubernetesで使用されていた私のデプロイメント記述子を更新しました。素晴らしい仕事をした。私はそれを反映するために私の答えを更新します。私に「ミニクーブマウント」の方向を指摘してくれてありがとう。 –
anschoewe