Расселение подов с узла
При обновлении группы узлов со старого узла поды расселяются — переносятся на новый узел. Для того чтобы расселение не сказывалось на доступности сервисов, обслуживаемых приложениями в кластере Kubernetes, сконфигурируйте объект API Kubernetes PodDisruptionBudget
Объект PodDisruptionBudget описывается тремя полями:
.spec.selector— Kubernetes-метка селектора для указания набора подов, к которому он применяется. Обязательное поле..spec.minAvailable— минимальное количество подов из набора, которые должны быть доступны после расселения. Можно указать в процентах..spec.maxUnavailable— максимальное количество подов из набора, которые могут быть недоступны после расселения. Можно указать в процентах.
Если не описать политику PodDisruptionBudget
Важно
- Расселение подов происходит только в том случае, если они были созданы под управлением одного из контроллеров репликаций приложений: ReplicaSet
, Deployment или StatefulSet . Если под был создан без контроллера, он будет потерян в процессе обновления. - Постоянные тома (объекты
PersistentVolumes), которые используются подами под управлением контроллераStatefulSet, могут быть перенесены между узлами только в пределах одной зоны доступности.
Особенности расселения подов с узла:
-
Необходимо настроить политику
PodDisruptionBudgetsтак, чтобы нельзя было расселить слишком много подов одновременно, но можно было расселить хотя бы один. -
При расселении есть таймаут до остановки узла (7 минут). Если расселение подов не будет завершено за это время, то узел будет остановлен, несмотря на оставшиеся поды.
-
При уменьшении размера группы узлов для расселения подов и последующего удаления узла в первую очередь расселяются и удаляются узлы без подов. Если для группы задано фиксированное число узлов, то удалится случайный узел.
-
Вы можете расселить необходимые узлы автомасштабируемой группы узлов вручную. Для этого перед уменьшением ее размера:
- Запретите создание новых подов на нужном узле командой
kubectl cordon. - Расселите поды с узла командой
kubectl drain.
При уменьшении размера группы в первую очередь удалится расселенный узел.
- Запретите создание новых подов на нужном узле командой
-
Узлы, которые будут расселены и остановлены, помечаются как
Unschedulable. Это позволяет не создавать на них новые поды. -
Расселение узлов в группе происходит по одному.
-
Узлы не расселяются при удалении группы узлов. Если к подам удаляемых узлов поступают запросы, они не будут обрабатываться, пока Kubernetes не диагностирует неработоспособность узлов и не создаст поды на работающих узлах. Чтобы этого избежать, измените размер группы узлов до нуля, дождитесь завершения операции и удалите группу узлов.