Как лучше всего запустить Symfony Messenger Worker в Кубернетесе

Какой лучший способ запустить messenger:consume задание на Кубернетес?

Развертывание?

Если мы сделаем это с развертыванием с определенным количеством реплик, это может сработать, но что, если мы сделаем обновление по мере развертывания, которое затем приведет к замене модуля, хотя сейчас оно обрабатывает долго работающее сообщение?

Чтобы предотвратить это, мы могли бы установить terminationGracePeriodSeconds и использовать lifecycle.preStop в комбинации?

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    run: deploy
  name: deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      run: deploy
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: deploy
    spec:
      terminationGracePeriodSeconds: 6000
      containers:
      - command:
        - sh
        - -c
        - sleep 1d # bin/console messenger:consume
        image: bash
        name: deploy
        lifecycle:
          preStop:
            exec:
              command:
              - sh
              - -c
              - echo "Test if a message is consumed at the moment and prevent POD shutdown till then?"                    

Но во время моих испытаний, даже если lifecycle.preStop задачи прекращаются рано, полное время определяется terminationGracePeriodSeconds все еще ждет, пока стручок не будет завершен.

У кого-нибудь есть хорошая идея?

0 ответов

Это работает для меня:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: agent
spec:
  replicas: 8
  selector:
    matchLabels:
      id: agent-pod
  template:
    metadata:
      labels:
        id: agent-pod
    spec:
      terminationGracePeriodSeconds: 3600
      containers:
      - name: agent
        volumeMounts:
          - mountPath: /share
            name: share
        lifecycle:
          preStop:
            exec:
              command: ["sh", "-c", "touch /tmp/kill_me"]
        command:
        - /bin/sh
        - -c
        - >
          sleep 3 && rm -rf var/cache/* && bin/console cache:clear &&
          while ! [ -f /tmp/kill_me ];
            do
            bin/console messenger:consume queue --limit=1 --time-limit=60 -vv
          done;
        image: my-symfony-agent-image

Подробнее здесь.

Другие вопросы по тегам