2017-05-22 10 views
0

メインコンテナが起動する前に、initコンテナを使用していくつかのファイルを準備しようとしています。 initコンテナでは、hostPathのボリュームをマウントして、メインコンテナ用にいくつかのファイルを共有できるようにしたいと思います。kubernetes:初期コンテナ内からのマウントボリューム

pod.beta.kubernetes.io/init-containers: '[ 
    { 
     "name": "init-myservice", 
     "image": "busybox", 
     "command": ["sh", "-c", "mkdir /tmp/jack/ && touch cd /tmp/jack && touch a b c"], 
     "volumeMounts": [{ 
      "mountPath": "/tmp/jack", 
      "name": "confdir" 
     }] 
    } 
]' 

しかし、動作するようには思えない。

私のクラスターはので、私はmeta.annotation構文を使用していkubernetesの前の1.6バージョンを使用しています。 volumeMountsを追加すると、コンテナinit-myserverがCrashLoopに入ります。それがなければポッドは正常に作成されますが、私が望むものは達成できません。

< 1.5でinit containerにボリュームをマウントできませんか? 1.6+についてはどうですか?

答えて

1

init-containerによって生成されたデータをPodのコンテナと共有するために、ボリュームをhostPathにする必要はありません。 emptyDirを使用すると、同じ結果が得られます。 emptyDirを使用する利点は、ホスト上で何もする必要がなく、そのクラスター上のノードにアクセスできない場合でも、あらゆる種類のクラスターで機能することです。

hostPathを使用する際のもう1つの問題は、SELinux対応のディストリビューションを使用している場合でも、そのディレクトリに適切なコンテキストを設定する必要がある場合でも、ホスト上のそのフォルダに対する適切なアクセス許可を設定することです。

apiVersion: v1 
kind: Pod 
metadata: 
    name: init 
    labels: 
    app: init 
    annotations: 
    pod.beta.kubernetes.io/init-containers: '[ 
     { 
      "name": "download", 
      "image": "axeclbr/git", 
      "command": [ 
       "git", 
       "clone", 
       "https://github.com/mdn/beginner-html-site-scripted", 
       "/var/lib/data" 
      ], 
      "volumeMounts": [ 
       { 
        "mountPath": "/var/lib/data", 
        "name": "git" 
       } 
      ] 
     } 
    ]' 
spec: 
    containers: 
    - name: run 
    image: docker.io/centos/httpd 
    ports: 
     - containerPort: 80 
    volumeMounts: 
    - mountPath: /var/www/html 
     name: git 
    volumes: 
    - emptyDir: {} 
    name: git 

アウトポッド内INIT-容器及び容器はgit名前同じボリュームを共有している上記の例。ボリュームの種類はemptyDirです。私は、このポッドが現れるたびにinit-containerがデータを取得するようにしてから、ポッドのhttpdコンテナから提供されます。

HTH。

関連する問題