Как лучше всего запустить 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
Подробнее здесь.