Обробники подій життєвого циклу контейнера
Ця сторінка показує, як прикріплювати обробники до подій життєвого циклу контейнера. Kubernetes підтримує події postStart та preStop. Kubernetes надсилає подію postStart безпосередньо після того, як контейнер стартує, і він надсилає подію preStop безпосередньо перед завершенням роботи контейнера. Контейнер може вказати один обробник для кожної події.
Перш ніж ви розпочнете
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Для перевірки версії введітьkubectl version
.Визначте обробники postStart та preStop
У цьому завдані ви створите Pod, який має один контейнер. У контейнері встановлені обробники для подій postStart та preStop.
Ось файл конфігурації для Podʼа:
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"]
У файлі конфігурації ви бачите, що команда postStart записує файл message
в теку /usr/share
контейнера. Команда preStop відповідним чином вимикає nginx. Це корисно, якщо контейнер перериває роботу через помилку.
Створіть Pod:
kubectl apply -f https://k8s.io/examples/pods/lifecycle-events.yaml
Перевірте, що контейнер у Podʼі працює:
kubectl get pod lifecycle-demo
Отримайте доступ до оболонки контейнера, який працює в Podʼі:
kubectl exec -it lifecycle-demo -- /bin/bash
У своїй оболонці перевірте, що обробник postStart створив файл message
:
root@lifecycle-demo:/# cat /usr/share/message
Вивід показує текст, записаний обробником postStart:
Hello from the postStart handler
Обговорення
Kubernetes надсилає подію postStart безпосередньо після створення контейнера. Проте, немає гарантії, що обробник postStart буде викликаний перед тим, як буде викликано точку входу контейнера. Обробник postStart працює асинхронно відносно коду контейнера, але керування Kubernetes блокується до завершення обробника postStart. Статус контейнера не встановлюється як RUNNING до завершення обробника postStart.
Kubernetes надсилає подію preStop безпосередньо перед завершенням роботи контейнера. Керування Kubernetes контейнером блокується до завершення обробника preStop, якщо тайм-аут оновлення Podʼа не закінчився. Докладніше див. Життєвий цикл Podʼа.
Примітка:
Kubernetes надсилає подію preStop лише тоді, коли Pod або контейнер у Podʼі завершується. Це означає, що обробник preStop не викликається, коли Pod завершує роботу. Про це обмеження дізнайтеся більше в розділі Контейнерні обробники.Що далі
- Дізнайтеся більше про обробників життєвого циклу контейнера.
- Дізнайтеся більше про життєвий цикл Podʼа.
Довідка
- Життєвий цикл
- Контейнер
- Дивіться
terminationGracePeriodSeconds
в Spec Podʼа