Кубернетес |Какие-нибудь крючки доступны для перезапуска Pod? - PullRequest
4 голосов
/ 31 мая 2019

Есть ли какие-либо хуки для событий жизненного цикла Pod? В частности, я хочу запустить команду для загрузки журналов при перезагрузке модуля.

1 Ответ

5 голосов
/ 31 мая 2019

Редактировать: ловушка PreStop не работает для перезапуска контейнера - см. Остальную часть ответа ниже

Как указано в документации есть PreStop и PostStart событий, и вы можете присоединиться к ним.

Пример из документов:

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: ["/bin/sh","-c","nginx -s quit; while killall -0 nginx; do sleep 1; done"]

Редактировать: Итак, я проверил с помощью следующего POC, выполняется ли этот ловушку preStop при аварийном завершении контейнера, и сделал вывод: НЕ

apiVersion: v1
kind: Pod
metadata:
  name: lifecycle-demo
spec:
  containers:
  - name: lifecycle-demo-container
    volumeMounts:
    - mountPath: /data
      name: test-volume
    image: nginx
    command: ["/bin/sh"]
    args: ["-c", "sleep 5; exit 1"]
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /data/postStart"]
      preStop:
        exec:
          command: ["/bin/sh","-c","echo preStop handler! > /data/preStop"]

  volumes:
  - name: test-volume
    hostPath:
      path: /data
      type: Directory

В качестве решения для вас я бы порекомендовал переопределить секцию команд для вашего контейнера следующим образом:

command: ["/bin/sh"]
args: ["-c", "your-application-executable; your-logs-upload"]

, так что исполняемый файл your-logs-upload будетвыполняться после сбоя исполняемого приложения / end

...