Мы развертываем приложение Laravel на Kubernetes. Просто приложение не проблема, а работники очереди. Мы читали из нескольких источников, что рекомендуется запускать очереди как отдельное развертывание. Итак, ниже часть kubeconfig, которая запускает обработчик очереди как команду. php artisan queue:work
Я понимаю, что он работает как PID1. Поэтому при сбое процесса Kubernetes автоматически перезагрузит модуль. Однако дело в том, что когда мы удаляем модуль, требуется некоторое время (около 20 секунд), прежде чем он остановится, и он завершится с кодом выхода 137
вместо 0
. Я вижу это, когда exec
вхожу в капсулу. Он возвращает terminated with exit code 137
при удалении.
в этой статье Я читал, что Laravel (мы используем 7.x) асинхронен и должен реагировать на сигналы SIGTERM. Итак, разве не должно быть логично, что когда мы останавливаем модуль, kubernetes отправляет сигнал SIGTERM и должен корректно останавливать модуль? И изящно должен быть код выхода 0
, верно?
Надеюсь, кто-нибудь сможет объяснить, что я здесь делаю неправильно.
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: hip-prod
name: worker
labels:
worker: worker
spec:
minReadySeconds: 5
replicas: 1
revisionHistoryLimit: 1
selector:
matchLabels:
worker: worker
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 50%
type: RollingUpdate
template:
metadata:
labels:
worker: worker
spec:
nodeSelector:
"beta.kubernetes.io/os": linux
containers:
- name: worker
image: my-laravel-image/app:latest
command: ["php", "artisan", "queue:work"]
imagePullPolicy: Always