2017-05-30 99 views
0

I learned recently Kubernetes有一個名爲Init Containers的功能。太棒了,因爲我可以使用此功能來等待我的postgres服務並在我的Web應用程序服務運行之前創建/遷移數據庫。Kubernetes部署和初始容器

但是,看起來Init Container只能在Pod yaml文件中配置。有沒有辦法通過部署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'放入部署yaml – Mitkins

+0

中,對它很有幫助。 – JamStar

2

您可能希望使用準備探測,而不是此容器的init容器。看看這個linkblog。另請注意,部署不會將流量發送到未準備好報告的Pod - 如果這是您的擔心。