Перенос рабочей нагрузки до миграции ресурсов
Это руководство поможет вам заранее подготовиться к миграции ресурсов кластера первого поколения между зонами доступности, которую проведут сотрудники VK Cloud. Вы выполните следующие шаги:
- Определите, зависит ли ваша рабочая нагрузка (workload) от текущей зоны доступности.
- Создадите новую группу worker-узлов в зоне доступности, куда будет происходить миграция, и перенесете туда свою рабочую нагрузку.
- Перенесете stateful-нагрузку на новые PVC.
- Дождетесь окончания работ по миграции ресурсов со стороны VK Cloud.
- Если привязка к зоне доступности была установлена в helm-чартах или при настройке аддонов, обновите эти значения на новую зону доступности.
-
Определите, какой кластер первого поколения необходимо перенести на новую зону доступности.
-
Установите и настройте
kubectl, если это еще не сделано. -
Подключитесь к кластеру при помощи
kubectl. -
(Опционально) Установите утилиту для переименования PVC
rename-pvc.
Определите, повлияет ли миграция на рабочую нагрузку (workload) ваших кластеров. Для этого узнайте, указана ли зона доступности:
-
в правилах планирования пода:
- в параметрах
nodeAffinity,topologySpreadConstraintsилиnodeSelector; - в метках
topology.kubernetes.io/zone,failure-domain.beta.kubernetes.io/zoneиtopology.cinder.csi.openstack.org/zone.
- в параметрах
-
в классе хранения (
StorageClass) для подов StatefulSet.
Если зона доступности не указана, миграция на другую зону доступности никак не повлияет на вашу рабочую нагрузку и дополнительных действий по переносу от вас не потребуется.
- Добавьте группу worker-узлов и укажите для нее зону доступности, куда выполняется миграция.
- Последовательно перенесите свою рабочую нагрузку на эту группу узлов. Подробнее в официальной документации Kubernetes.
- Удалите группу узлов со старой зоной доступности или уменьшите количество узлов в ней до нуля, чтобы воспользоваться ей позже.
Так как ресурсы кластера еще не перенесены, физически и по своим метаданным тот PVC, который используется stateful-нагрузкой, находится в старой зоне доступности.
Чтобы перенести stateful-нагрузку на PVC в новой зоне доступности:
Чтобы предотвратить случайное удаление данных с PVC при переносе нагрузки:
-
Поменяйте политику освобождения (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 расположен.
-
Клонируйте диск, связанный с PVC.
-
(Опционально) Сохраните старый PVC до окончания работ по миграции, переименовав его в
<ИМЯ_PVC>-old, чтобы иметь возможность вернуться к нему при необходимости.Когда будете создавать новый PVC, используйте
<ИМЯ_PVC>— так он получит имя оригинального смигрированного.Вы можете переименовать PVC вручную или с помощью утилиты
rename-pvc. Пример команды дляrename-pvc:rename-pvc -n <ПРОСТРАНСТВО_ИМЕН_PVC> <СТАРОЕ_ИМЯ_PVC> <НОВОЕ_ИМЯ_PVC>
Доступны несколько способов переноса PVC:
- с помощью снимка диска (через личный кабинет VK Cloud или через плагин Cinder CSI);
- с помощью утилиты
pv-migrate.
-
Перейдите в личный кабинет VK Cloud.
-
Создайте снимок диска, связанного с PVC.
-
Создайте новый диск на основе этого снимка, указав следующие параметры:
- Источник: снимок диска, созданный на предыдущем шаге;
- Зона доступности: зона доступности, куда выполняется миграция.
- Остальные параметры укажите по своему усмотрению.
-
Дождитесь создания диска и запомните его ID.
-
Создайте PV, ссылающийся на ID созданного из снимка диска, и PVC на его основе:
-
Дождитесь, пока созданный PV будет в статусе
Bound. -
Переведите соответствующую рабочую нагрузку на новый PVC.
-
Запустите рабочую нагрузку и убедитесь, что после миграции она работает корректно.
- Дождитесь окончания работ по миграции ресурсов со стороны VK Cloud.
- Запустите рабочую нагрузку и убедитесь, что после миграции она работает корректно.
-
Проверьте, была ли привязка к зонам доступности дополнительно установлена через Helm-чарты или при редактировании кода аддона в личном кабинете VK Cloud.
-
Если да, вручную укажите для них зону доступности, куда была выполнена миграция. Это нужно, чтобы при следующем обновлении манифестов результаты миграции не были перезаписаны.
Helm-чартыАддоны-
Укажите зону доступности, куда была выполнена миграция, в
values.yaml:topology:zone: <ЗОНА_ДОСТУПНОСТИ> -
Примените обновление. Подробнее в официальной документации Helm.
-
Работающие ресурсы в кластере тарифицируются и потребляют вычислительные ресурсы. Если вы не планируете использовать PVC и снимки диска, оставшиеся после миграции, а также саму зону доступности, удалите их и связанные с ними ресурсы:
-
Удалите старый PVC и снимки диска.
-
Удалите класс хранения (StorageClass) старой зоны доступности:
kubectl get sc -o name | grep <СТАРАЯ_ЗОНА_ДОСТУПНОСТИ> | xargs -I {} kubectl delete {}Здесь
<СТАРАЯ_ЗОНА_ДОСТУПНОСТИ>— имя зоны доступности, из которой была проведена миграция, указанная в нижнем регистре.