Kubernetes Deployments和Init Containers

时间:2017-05-30 07:33:02

标签: kubernetes

learned recently Kubernetes有一个名为Init Containers的功能。太棒了,因为我可以使用此功能等待我的postgres服务,并在我的Web应用程序服务运行之前创建/迁移数据库。

但是,似乎只能在Pod yaml文件中配置Init Containers。有没有办法通过部署yaml文件来做到这一点?或者我必须选择吗?

2 个答案:

答案 0 :(得分:4)

为避免混淆,请回答您的具体问题。我同意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'

答案 1 :(得分:3)

您可能希望在此用例中使用就绪探针而不是init容器。查看此linkblog。另请注意,部署不会将流量发送到未准备好报告的窗格 - 如果这是您的担心。