2017-05-30 17 views
0

I learned recently KubernetesにはInit Containersという機能があります。この機能を使用して私のpostgresサービスを待ち、Webアプリケーションサービスが実行される前にデータベースを作成/移行することができるので、素晴らしいです。Kubernetesデプロイメントと初期コンテナ

ただし、Init ContainersはPod yamlファイルでのみ設定できるようです。 Deployment yamlファイルでこれを行う方法はありますか?または私は選択する必要がありますか?

答えて

2

混乱を避けるため、具体的な質問にはうんざりです。私は、あなたが別の方法を検討したいかもしれないというoswinに同意します。

はい、デプロイメントでinitコンテナを使用できます。これは古いスタイル(1.6以前)を使用した例ですが、それはうまくいくはずです

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: 'nginx' 
spec: 
    replicas: 1 
    selector: 
    matchLabels: 
     app: 'nginx' 

    template: 
    metadata: 
     labels: 
     app: 'nginx' 
     annotations: 
     pod.beta.kubernetes.io/init-containers: '[ 
      { 
       "name": "install", 
       "image": "busybox", 
       "imagePullPolicy": "IfNotPresent", 
       "command": ["wget", "-O", "/application/index.html", "http://kubernetes.io/index.html"], 
       "volumeMounts": [ 
        { 
         "name": "application", 
         "mountPath": "/application" 
        } 
       ] 
      } 
     ]' 
    spec: 
     volumes: 
     - name: 'application' 
      emptyDir: {} 

     containers: 

     - name: webserver 
     image: 'nginx' 
     ports: 
     - name: http 
      containerPort: 80 
     volumeMounts: 
      - name: 'application' 
      mountPath: '/application' 
+0

限り、頭に釘を打つ。 GCEの私のクラスターはまだ1.5になっていることが分かります。あなたのコードはうまくいきましたが、代わりに1.6にアップグレードすることにしました。それで、デプロイメントに 'initContainers'を入れました – Mitkins

+0

うれしかったのでうれしかったです。 – JamStar

2

このユースケースでは、初期コンテナの代わりに準備完了プローブを使用することをお勧めします。このlinkblogを確認してください。また、配備は準備ができていないと報告されていないポッドにトラフィックを送信しないことにも注意してください。

関連する問題