← До фільтрів та технологій

← До списку лабораторних по Kubernetes

Kubernetes Лабораторна 40: Коректне завершення pod

Технологія: Kubernetes

Номер лабораторної: 40 · Рівень: middle

Тема: Graceful shutdown і preStop hook

Повний опис / сценарій лабораторної:

Мета: навчитися організовувати коректне завершення роботи додатка при видаленні pod.



Крок 1. Створити deployment з простим http сервісом.

Команда: kubectl create deployment shutdown-demo --image=nginx --replicas=2 -o yaml --dry-run=client > shutdown-demo.yaml

Пояснення: додамо до нього preStop hook.



Крок 2. Додати preStop hook у yaml.

Опис: у spec containers lifecycle preStop виконай команду яка спочатку логує повідомлення потім спить декілька секунд.

Пояснення: це імітує час на завершення активних запитів.



Крок 3. Змінити terminationGracePeriodSeconds.

Пояснення: збільш час наприклад до 60 секунд щоб у додатка був запас на завершення.



Крок 4. Застосувати deployment.

Команда: kubectl apply -f shutdown-demo.yaml

Пояснення: нові pod запускатимуться з заданими lifecycle налаштуваннями.



Крок 5. Створити pod клієнт для навантаження.

Команда: kubectl run shutdown-client --rm -it --image=radial/busyboxplus:curl --restart=Never -- sh

Пояснення: внутрішній клієнт буде надсилати запити до сервісу.



Крок 6. Створити service для shutdown-demo.

Команда: kubectl expose deployment shutdown-demo --name=shutdown-svc --port=80

Пояснення: клієнт буде ходити на цей service.



Крок 7. Запустити безперервні запити.

Команда всередині клієнта: while true; do curl -s -o /dev/null -w "." shutdown-svc; sleep 1; done

Пояснення: крапки у виводі показують успішні відповіді.



Крок 8. У іншому вікні видалити один з pod.

Команда: kubectl delete pod <імя-pod> --grace-period=60

Пояснення: preStop hook має спрацювати а додаток коректно завершити зєднання.



Крок 9. Спостерігати поведінку клієнта.

Пояснення: під час завершення pod не повинно бути великої кількості помилок якщо service встигає переключити трафік.



Крок 10. Міні звіт.

Завдання: опиши як би ти налаштовував graceful shutdown для stateful сервісу наприклад черги або бази даних.