[Документация Yandex Cloud](../../../index.md) > [Yandex Managed Service for Kubernetes](../../index.md) > [Пошаговые инструкции](../index.md) > Управление группой узлов > Техническое обслуживание узлов без потери ресурсов

# Техническое обслуживание узлов кластера без потери ресурсов

При техническом обслуживании и обновлении может потребоваться перезапустить или пересоздать узлы кластера Managed Service for Kubernetes. При этом ресурсы узлов возвращаются в общий доступ и могут быть заняты другими пользователями.

Резервирование особенно актуально для ресурсов с ограниченной доступностью, например GPU. Если при перезапуске узла с GPU GPU-конфигурация окажется занята, запуск завершится ошибкой.

Сохранить ресурсы при обслуживании можно двумя способами:

* [С использованием пула резервов ВМ](#with-reserved-pool) — подходит для любых сценариев перезапуска или пересоздания узлов.
* [С заданием на техническое обслуживание](#with-maintenance-task) — подходит, если в сервисе Compute Cloud есть задание на техническое обслуживание узла.

## С использованием пула резервов ВМ {#with-reserved-pool}

{% note warning %}

Пулы резервов ВМ тарифицируются: взимается плата за весь свободный объем зарезервированных вычислительных ресурсов ВМ, кластеров GPU и программно ускоренных сетей согласно [правилам тарификации Yandex Compute Cloud](../../../compute/pricing.md). Подробнее в разделе [Использование пулов резервов ВМ](../../../compute/pricing.md#pool).

{% endnote %}

_Функциональность пулов резервов ВМ находится на [стадии Preview](../../../overview/concepts/launch-stages.md)._

Ресурсы узла можно зарезервировать с помощью [пула резервов ВМ](../../../compute/concepts/reserved-pools.md). Тогда при перезапуске или пересоздании узла ресурсы сохранятся в пуле, а не перейдут в общий доступ — узел запустится заново именно на них.

1. [Создайте пул резервов ВМ](../../../compute/operations/reserved-pools/create-reserved-pool.md) с размером `0` и конфигурацией существующих узлов. Например, с нужными параметрами GPU.

1. [Расширьте пул](../../../compute/operations/reserved-pools/update-reserved-pool.md) до нужного количества узлов, включив [опцию ожидания ресурсов](../../../compute/concepts/reserved-pools.md#pending-slots) `--allow-pending-slots`. Параметр позволяет добавить слоты, даже если в зоне доступности временно недостаточно свободных ресурсов.

   Слоты, на которые в момент расширения не хватило ресурсов, перейдут в статус ожидания `pending`.

1. [Привяжите узлы](../../../compute/operations/reserved-pools/manage-pool-vms.md#attach-existing-vm) существующего кластера Managed Service for Kubernetes к созданному пулу.

Узлы кластера Managed Service for Kubernetes займут свободные слоты в пуле. Далее узлы будут запущены или созданы заново на зарезервированных ресурсах пула.

## С заданием на техническое обслуживание {#with-maintenance-task}

{% note warning %}

Этот способ обслуживания без потери ресурсов подходит только для случаев, когда [задание на техническое обслуживание](../../../compute/operations/vm-control/gpus-maintenance.md#list-scheduled-maintenance) поставлено Compute Cloud.

Если вы хотите самостоятельно перезапустить или пересоздать узел без потери ресурсов, [используйте пул резервов ВМ](#with-reserved-pool).

{% endnote %}

Compute Cloud периодически выполняет [техническое обслуживание](../../../compute/concepts/gpus-maintenance.md) оборудования, необходимого для работы виртуальных машин. В некоторых случаях техническое обслуживание требует перезапуска ВМ с GPU.

Для выполнения задания на техническое обслуживание ресурсы ВМ с GPU резервируются автоматически и не возвращаются в общий доступ при перезапуске — для обслуживания достаточно снять нагрузку с узла и выполнить перезапуск через Compute Cloud.

1. Чтобы определить, какой узел требует обслуживания, [посмотрите задания на техническое обслуживание](../../../compute/operations/vm-control/gpus-maintenance.md#list-scheduled-maintenance).

1. Убедитесь, что `kubectl` подключен к нужному кластеру, и получите список узлов:

    ```bash
    kubectl config current-context
    kubectl get nodes
    ```

    Имя узла в выводе команды соответствует имени ВМ в Compute Cloud.

1. Расселите поды с узла командой `kubectl drain`.

    ```bash
    kubectl drain <имя_узла> \
      --ignore-daemonsets \
      --delete-emptydir-data
    ```

    Где `<имя_узла>` — имя узла Kubernetes.

    После выполнения команды узел перейдет в статус `SchedulingDisabled` — на нем не будут создаваться новые поды, а текущие рабочие поды будут расселены на другие узлы кластера.

    Подробнее о расселении подов — в [Расселение подов с узла](../../concepts/node-group/node-drain.md).

1. [Выполните задание на техническое обслуживание немедленно](../../../compute/operations/vm-control/gpus-maintenance.md#execute-now). ВМ перезапустится, при этом Compute Cloud сохранит GPU-ресурсы за ней.

1. Разрешите размещение подов на узле [в консоли управления](../kubernetes-console/nodes.md#uncordon) или командой:

    ```bash
    kubectl uncordon <имя_узла>
    ```

    Узел снова станет доступен для планирования новых подов.

#### Полезные ссылки {#see-also}

* [Расселение подов с узла](../../concepts/node-group/node-drain.md)
* [Техническое обслуживание виртуальных машин с GPU](../../../compute/concepts/gpus-maintenance.md)
* [Управлять техническим обслуживанием виртуальных машин с GPU](../../../compute/operations/vm-control/gpus-maintenance.md)
* [Создание группы с узлами из пула резервов ВМ Yandex Compute Cloud](node-group-create-in-instance-pool.md)