Как правильно остановить Laravel Queueworker, работающий как изображение docker? - PullRequest
1 голос
/ 18 июня 2020

Мы развертываем приложение 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...