初始化后如何运行命令

时间:2017-05-23 16:42:00

标签: kubernetes

我希望在部署初始化成功后运行特定命令。

这是我的yaml文件:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: auth
spec:
  replicas: 1
  template:
    metadata:
        labels:
          app: auth
    spec:
      containers:
        - name: auth
          image: {{my-service-image}}
          env:
          - name: NODE_ENV
            value: "docker-dev"
          resources:
            requests:
              cpu: 100m
              memory: 100Mi
          ports:
            - containerPort: 3000

但是,我想在成功初始化部署并且正在运行pod之后(之前)运行db迁移命令。

我可以为每个pod手动执行(使用kubectl exec),但这不是很容易扩展。

3 个答案:

答案 0 :(得分:30)

我使用生命周期来解决它:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: auth
spec:
  replicas: 1
  template:
    metadata:
        labels:
          app: auth
    spec:
      containers:
        - name: auth
          image: {{my-service-image}}
          env:
          - name: NODE_ENV
            value: "docker-dev"
          resources:
            requests:
              cpu: 100m
              memory: 100Mi
          ports:
            - containerPort: 3000
          lifecycle:
            postStart:
              exec:
                command: ["/bin/sh", "-c", {{cmd}}]

答案 1 :(得分:6)

您可以使用Helm部署一组Kubernetes资源。然后,使用Helm hook,例如post-installpost-upgrade,在单独的泊坞窗容器中运行Job。设置Job以调用db migration。一个Job将运行> = 1个Pods来完成,所以它非常适合这里。

答案 2 :(得分:0)

我选择使用 readinessProbe
我的应用程序需要在进程完全启动后进行配置。 postStart 命令在应用准备就绪之前正在运行。

readinessProbe:
  exec:
    command: [healthcheck]
  initialDelaySeconds: 30
  periodSeconds: 2
  timeoutSeconds: 1
  successThreshold: 3
  failureThreshold: 10