21

更新: minikubevm に接続し、ホスト ディレクトリがマウントされているのを確認しましたが、そこにファイルがありません。また、そこにファイルを作成すると、ホスト マシンには作成されません。それらの間にリンクがあります

kubernetes でアプリを開発するために、ホスト ディレクトリをマウントしようとしています。

ドキュメントが推奨するように、私は PC で kubernetes クラスターを実行するために minikube を使用しています。目標は、アプリを開発するための docker と kubernetes を使用して開発環境を作成することです。Docker がそこからコード アプリを読み取るように、ローカル ディレクトリをマウントしたいと考えています。しかし、それは仕事ではありません。どんな助けでも本当に感謝します。

私のテストアプリ(server.js):

var http = require('http');
var handleRequest = function(request, response) {
response.writeHead(200);
response.end("Hello World!");
}
var www = http.createServer(handleRequest);
www.listen(8080);

私の Dockerfile:

FROM node:latest
WORKDIR /code
ADD code/ /code
EXPOSE 8080
CMD server.js

私のポッド kubernetes 構成: (pod-configuration.yaml)

apiVersion: v1
kind: Pod
metadata:
  name: apiserver
spec:
  containers:
  - name: node
    image: myusername/nodetest:v1
    ports:
    - containerPort: 8080
    volumeMounts:
    - name: api-server-code-files
      mountPath: /code
  volumes:
  - name: api-server-code-files
    hostPath:
      path: /home/<myuser>/Projects/nodetest/api-server/code

私のフォルダは次のとおりです。

/home/<myuser>/Projects/nodetest/
- pod-configuration.yaml
- api-server/
    - Dockerfile
    - code/
        - server.js

hostPath ボリュームなしで Docker イメージを実行すると、もちろん機能しますが、問題は、変更のたびに、開発には実際には強力ではないイメージを再作成する必要があることです。そのため、ボリューム hostPath が必要です。

何か案が ?ローカル ディレクトリのマウントに失敗するのはなぜですか?

助けてくれてありがとう。

4

3 に答える 3

13

編集: 解決策は、特権コンテナーを使用するか、ホームフォルダーを手動でマウントして、MiniKube VM がホストパスから読み取れるようにすることです -- https://github.com/boot2docker/boot2docker#virtualbox-guest-additions . (これを理解した Eliel の功績)。

minikube を使用して hostPath ボリュームを構成することは絶対に可能ですが、多くの癖があり、この特定の問題に対する適切なサポートはありません。

ADD code/ /codeDockerfile から削除してみてください。Docker の「ADD」命令は、コードをホスト マシンからコンテナーの/codeディレクトリにコピーします。これが、イメージを再構築するとコードが正常に更新される理由です。

Kubernetes がコンテナーの/codeディレクトリをホスト パスにマウントしようとすると、このディレクトリがイメージに焼き付けられたコードで既にいっぱいになっていることがわかります。これをビルド ステップから除外すると、Kubernetes は実行時にホスト パスを正常にマウントできるはずです。

code/また、ホスト マシンのディレクトリのアクセス許可を必ず確認してください。

私の他の唯一の考えは、ルートディレクトリへのマウントに関連しています。ルート ディレクトリ内のディレクトリとの間で Kubernetes hostPath ボリュームをマウントするときに問題が発生しました (これは権限に関連していると思います)。したがって、他に試してみるべきことは、のようなマウントパスです/var/www/html

機能する hostPath ボリュームの例を次に示します。

apiVersion: v1
kind: Pod
metadata:
  name: example
spec:
  volumes:
    - name: example-volume
      hostPath:
        path: '/Users/example-user/code'
  containers:
    - name: example-container
      image: example-image
      volumeMounts:
        - mountPath: '/var/www/html'
          name: example-volume
于 2016-08-02T19:08:58.847 に答える