Короткий ответ
Pod попадает в endpoints Service, когда его метки совпадают с selector сервиса и его readiness probe (если она задана) проходит успешно; если readiness не настроена, под считается готовым сразу после того, как все контейнеры перешли в состояние Running.
Как это работает подробнее
контроллер Endpoints (или EndpointSlice-контроллер в новых версиях) постоянно следит за подами, подходящими под selector Service, и добавляет в список только те, у которых статус Ready в условиях (Conditions) Pod равен True. kube-proxy на каждом узле обновляет правила маршрутизации на основе этого списка.
Пример кода
Команды и вывод
kubectl get endpointslice -l kubernetes.io/service-name=webЧто использовать на практике
- Практика. это механизм, который позволяет безопасно выкатывать обновления — новый под не получает трафик, пока не пройдёт readiness, а под, который перестал отвечать на readiness во время работы (например, временная перегрузка), автоматически и временно исключается из балансировки без перезапуска.
Подводные камни
- Риски. не задавать readiness probe вовсе, из-за чего трафик может прийти на под до того, как приложение реально готово (например, не успело подключиться к базе данных); считать, что исключение из endpoints равносильно падению пода — это лишь временное исключение из балансировки, сам под продолжает работать и может вернуться в список при восстановлении готовности.