Перенос рабочей нагрузки до миграции ресурсов

Это руководство поможет вам заранее подготовиться к миграции ресурсов кластера первого поколения между зонами доступности, которую проведут сотрудники VK Cloud. Вы выполните следующие шаги:

  1. Определите, зависит ли ваша рабочая нагрузка (workload) от текущей зоны доступности.
  2. Создадите новую группу worker-узлов в зоне доступности, куда будет происходить миграция, и перенесете туда свою рабочую нагрузку.
  3. Перенесете stateful-нагрузку на новые PVC.
  4. Дождетесь окончания работ по миграции ресурсов со стороны VK Cloud.
  5. Если привязка к зоне доступности была установлена в helm-чартах или при настройке аддонов, обновите эти значения на новую зону доступности.

Подготовительные шаги

  1. Определите, какой кластер первого поколения необходимо перенести на новую зону доступности.

  2. Установите и настройте kubectl, если это еще не сделано.

  3. Подключитесь к кластеру при помощи kubectl.

  4. (Опционально) Установите утилиту для переименования PVC rename-pvc.

1. Определите зависимость рабочей нагрузки от зоны доступности

Определите, повлияет ли миграция на рабочую нагрузку (workload) ваших кластеров. Для этого узнайте, указана ли зона доступности:

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

2. Перенесите рабочую нагрузку на новые группы узлов

  1. Добавьте группу worker-узлов и укажите для нее зону доступности, куда выполняется миграция.
  2. Последовательно перенесите свою рабочую нагрузку на эту группу узлов. Подробнее в официальной документации Kubernetes.
  3. Удалите группу узлов со старой зоной доступности или уменьшите количество узлов в ней до нуля, чтобы воспользоваться ей позже.

3. Перенесите stateful-нагрузку на новый PVC

Так как ресурсы кластера еще не перенесены, физически и по своим метаданным тот PVC, который используется stateful-нагрузкой, находится в старой зоне доступности.

Чтобы перенести stateful-нагрузку на PVC в новой зоне доступности:

  1. Подготовьте PVC.
  2. Перенесите нагрузку одним из предложенных способов.

3.1. Подготовьте PVC к переносу

Чтобы предотвратить случайное удаление данных с PVC при переносе нагрузки:

  1. Поменяйте политику освобождения (reclaim policy) PV на Retain:

    pv_name=$(kubectl get pvc <ИМЯ_PVC> -n <ПРОСТРАНСТВО_ИМЕН_PVC> -o jsonpath='{.spec.volumeName}') kubectl patch pv "$pv_name" -n <ПРОСТРАНСТВО_ИМЕН_PVC> -p '{"spec": {"persistentVolumeReclaimPolicy": "Retain"}}'

    Здесь:

    • <ИМЯ_PVC> — имя PVC, который вы хотите перенести.
    • <ПРОСТРАНСТВО_ИМЕН_PVC> — пространство имен, в котором PVC расположен.
  2. Клонируйте диск, связанный с PVC.

  3. (Опционально) Сохраните старый PVC до окончания работ по миграции, переименовав его в <ИМЯ_PVC>-old, чтобы иметь возможность вернуться к нему при необходимости.

    Когда будете создавать новый PVC, используйте <ИМЯ_PVC> — так он получит имя оригинального смигрированного.

    Вы можете переименовать PVC вручную или с помощью утилиты rename-pvc. Пример команды для rename-pvc:

    rename-pvc -n <ПРОСТРАНСТВО_ИМЕН_PVC> <СТАРОЕ_ИМЯ_PVC> <НОВОЕ_ИМЯ_PVC>

3.2. Выберите способ переноса

Доступны несколько способов переноса PVC:

  • с помощью снимка диска (через личный кабинет VK Cloud или через плагин Cinder CSI);
  • с помощью утилиты pv-migrate.
  1. Перейдите в личный кабинет VK Cloud.

  2. Создайте снимок диска, связанного с PVC.

  3. Создайте новый диск на основе этого снимка, указав следующие параметры:

    • Источник: снимок диска, созданный на предыдущем шаге;
    • Зона доступности: зона доступности, куда выполняется миграция.
    • Остальные параметры укажите по своему усмотрению.
  4. Дождитесь создания диска и запомните его ID.

  5. Создайте PV, ссылающийся на ID созданного из снимка диска, и PVC на его основе:

  6. Дождитесь, пока созданный PV будет в статусе Bound.

  7. Переведите соответствующую рабочую нагрузку на новый PVC.

  8. Запустите рабочую нагрузку и убедитесь, что после миграции она работает корректно.

4. Завершите миграцию ресурсов

  1. Дождитесь окончания работ по миграции ресурсов со стороны VK Cloud.
  2. Запустите рабочую нагрузку и убедитесь, что после миграции она работает корректно.

5. Обновите Helm-чарты и настройки аддонов

  1. Проверьте, была ли привязка к зонам доступности дополнительно установлена через Helm-чарты или при редактировании кода аддона в личном кабинете VK Cloud.

  2. Если да, вручную укажите для них зону доступности, куда была выполнена миграция. Это нужно, чтобы при следующем обновлении манифестов результаты миграции не были перезаписаны.

    1. Укажите зону доступности, куда была выполнена миграция, в values.yaml:

      topology:  zone: <ЗОНА_ДОСТУПНОСТИ>
    2. Примените обновление. Подробнее в официальной документации Helm.

Удалите неиспользуемые ресурсы

Работающие ресурсы в кластере тарифицируются и потребляют вычислительные ресурсы. Если вы не планируете использовать PVC и снимки диска, оставшиеся после миграции, а также саму зону доступности, удалите их и связанные с ними ресурсы:

  1. Удалите старый PVC и снимки диска.

  2. Удалите класс хранения (StorageClass) старой зоны доступности:

    kubectl get sc -o name | grep <СТАРАЯ_ЗОНА_ДОСТУПНОСТИ> | xargs -I {} kubectl delete {}

    Здесь <СТАРАЯ_ЗОНА_ДОСТУПНОСТИ> — имя зоны доступности, из которой была проведена миграция, указанная в нижнем регистре.