Kubernetes:初始化后运行命令

Pet*_*ada 15 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
Run Code Online (Sandbox Code Playgroud)

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

我可以手动为每个pod(使用kubectl exec),但这不是很可扩展.

Pet*_*ada 41

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

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}}]
Run Code Online (Sandbox Code Playgroud)

  • 因为根据文档要小心,没有保证在调用容器入口点之前或之前调用postStart. (5认同)
  • 对于在命令行中和同一容器中工作的东西来说,这是一个很好的答案,但是我想在一个单独的容器中完成此任务,该容器可以运行完成并像init容器一样消失 (2认同)
  • 是的,但由于据称入口点和 postStart 是异步运行的,因此您可以添加睡眠命令作为最后的手段。 (2认同)

Ewa*_*Ewa 6

您可以使用Helm部署一组Kubernetes资源。然后,使用Helm hook(例如post-install或)在单独的Docker容器中post-upgrade运行Job。将您的Job设置为调用数据库迁移。作业将运行> = 1吊舱才能完成,因此非常适合此处。