Редактировать: ловушка 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