[Документация Yandex Cloud](../../../index.md) > [Yandex Managed Service for Kubernetes](../../index.md) > [Концепции](../index.md) > Группа узлов > Расселение подов с узла

# Расселение подов с узла

При обновлении группы узлов со старого узла поды расселяются — переносятся на новый узел. Для того чтобы расселение не сказывалось на доступности сервисов, обслуживаемых приложениями в кластере Kubernetes, сконфигурируйте объект API Kubernetes [PodDisruptionBudget](https://kubernetes.io/docs/reference/kubernetes-api/policy-resources/pod-disruption-budget-v1/) для подов приложения.

Объект `PodDisruptionBudget` описывается тремя полями:
* `.spec.selector` — Kubernetes-метка селектора для указания набора подов, к которому он применяется. Обязательное поле.
* `.spec.minAvailable` — минимальное количество подов из набора, которые должны быть доступны после расселения. Можно указать в процентах.
* `.spec.maxUnavailable` — максимальное количество подов из набора, которые могут быть недоступны после расселения. Можно указать в процентах.

Если не описать [политику PodDisruptionBudget](https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/), поды будут расселяться единовременно, что может привести к проблемам приложения.

{% note warning %}

* Расселение подов происходит только в том случае, если они были созданы под управлением одного из контроллеров репликаций приложений: [ReplicaSet](https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/), [Deployment](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) или [StatefulSet](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/). Если под был создан без контроллера, он будет потерян в процессе обновления.
* [Постоянные тома](../volume.md) (объекты `PersistentVolumes`), которые используются подами под управлением контроллера `StatefulSet`, могут быть перенесены между узлами только в пределах одной зоны доступности.

{% endnote %}

Особенности расселения подов с узла:
* Необходимо настроить политику `PodDisruptionBudgets` так, чтобы нельзя было расселить слишком много подов одновременно, но можно было расселить хотя бы один.
* При расселении есть таймаут до остановки узла (7 минут). Если расселение подов не будет завершено за это время, то узел будет остановлен, несмотря на оставшиеся поды.
* При уменьшении размера группы узлов для расселения подов и последующего удаления узла в первую очередь расселяются и удаляются узлы без подов. Если для группы задано фиксированное число узлов, то удалится случайный узел.
* Вы можете расселить необходимые узлы автомасштабируемой группы узлов вручную. Для этого перед уменьшением ее размера:
  1. Запретите создание новых подов на нужном узле командой `kubectl cordon`.
  1. Расселите поды с узла командой `kubectl drain`.

  При уменьшении размера группы в первую очередь удалится расселенный узел.
* Узлы, которые будут расселены и остановлены, помечаются как `Unschedulable`. Это позволяет не создавать на них новые поды.
* Расселение узлов в группе происходит по одному.
* Узлы не расселяются при удалении группы узлов. Если к подам удаляемых узлов поступают запросы, они не будут обрабатываться, пока Kubernetes не диагностирует неработоспособность узлов и не создаст поды на работающих узлах. Чтобы этого избежать, измените размер группы узлов до нуля, дождитесь завершения операции и удалите группу узлов.