Изящное завершение работы приложения kubernetes camel spring

У меня есть приложение spring boot camel, которое обрабатывает сообщения на activeMq. однако время от времени готовый зонд дает сбой и перезапускает модуль. Теперь все в порядке, но затем я постоянно получаю сообщения о входе в систему из приложения Inflight, и он попадает в цикл перезапуска из-за того, что готовый зонд постоянно выходит из строя.

Возможно ли, чтобы кубернеты позволяли приложению spring / camel корректно завершать работу или потреблять любые сообщения в очереди?

Больше похоже на проблему с проверкой готовности, зачем ему сообщать о сбое, если Camel все еще обрабатывает. А также, возможно, вам нужно настроить свои зонды, чтобы они имели более высокие таймауты или лайки, чтобы они не были такими чувствительными.

Claus Ibsen 02.11.2018 12:24

Проверка готовности не перезапускает приложение, а проверка работоспособности. Зонд готовности выводит капсулу из строя.

dev_in_prog 15.08.2019 18:40
0
2
278
1

Ответы 1

Используя Крючки для контейнеров, вы можете настроить prestop, который может выглядеть следующим образом:

apiVersion: v1
kind: Pod
metadata:
  name: lifecycle-demo
spec:
  containers:
  - name: lifecycle-demo-container
    image: nginx
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
      preStop:
        exec:
          command: ["/usr/sbin/nginx","-s","quit"]

This hook is called immediately before a container is terminated. It is blocking, meaning it is synchronous, so it must complete before the call to delete the container can be sent. No parameters are passed to the handler.

Вы можете следить за потоком на Прекращение действия контейнеров

  1. User sends command to delete Pod, with default grace period (30s)
  2. The Pod in the API server is updated with the time beyond which the Pod is considered “dead” along with the grace period.
  3. Pod shows up as “Terminating” when listed in client commands
  4. (simultaneous with 3) When the Kubelet sees that a Pod has been marked as terminating because the time in 2 has been set, it begins the pod shutdown process.
    1. If the pod has defined a preStop hook, it is invoked inside of the pod. If the preStop hook is still running after the grace period expires, step 2 is then invoked with a small (2 second) extended grace period.
    2. The processes in the Pod are sent the TERM signal.
  5. (simultaneous with 3) Pod is removed from endpoints list for service, and are no longer considered part of the set of running pods for replication controllers. Pods that shutdown slowly cannot continue to serve traffic as load balancers (like the service proxy) remove them from their rotations.
  6. When the grace period expires, any processes still running in the Pod are killed with SIGKILL.
  7. The Kubelet will finish deleting the Pod on the API server by setting grace period 0 (immediate deletion). The Pod disappears from the API and is no longer visible from the client.

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