Как запустить команду после инициализации

Я хочу запустить определенную команду после успешной инициализации развертывания.

Это мой файл 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

Тем не менее, я хотел бы запустить команду для переноса db после (не раньше) развертывания, успешно инициализированного и запущены pods.

Я могу сделать это вручную для каждого контейнера (с kubectl exec), но это не очень масштабируемо.

Ответ 1

Я решил это с помощью жизненных циклов:

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}}]

Ответ 2

Вы можете использовать Helm для развертывания набора ресурсов Kubernetes. А затем используйте крючок руля, например, post-install или post-upgrade, чтобы запустить задание в отдельном контейнере Docker. Установите вашу работу, чтобы вызвать миграцию БД. Задание выполнит> = 1 стручков до завершения, так что оно вполне уместно.