Миграция кластера в Evolution Managed Kubernetes
В этой инструкции описано как мигрировать кластер Managed Kubernetes с платформы Облако VMware на платформу Evolution.
Подготовьте инфраструктуру в облаке Evolution
-
Проверьте, что сервисы Managed Kubernetes, Object Storage и VPC подключены в облаке Evolution и вы можете создавать ресурсы.
-
Создайте необходимые подсети, в которых развернете кластер и рабочие узлы.
-
В Magic Router добавьте маршруты до созданных подсетей, выбрав VPC и AZ, в которой они созданы.
-
Создайте сервисный аккаунт с ролью k8s.admin. Для работы с объектным хранилищем на сервисный аккаунт необходимо назначить роли s3e.editor и s3e.viewer.
-
Для сервисного аккаунта создайте ключ доступа и получите Key ID и Key Secret.
-
Создайте целевой кластер в облаке Evolution такой же размерности, как кластер на платформе Облако VMware.
Выберите сервисный аккаунт, созданный ранее. Обратите внимание, из кластера должен быть доступ в интернет для запуска подов Velero.
-
Сохраните kubeconfig целевого кластера и переименуйте его в kubeconfig_evo.
Подготовьте инфраструктуру на платформе Облако VMware
-
Сохраните kubeconfig кластера, который необходимо перенести, и переименуйте его в kubeconfig_ent.
-
Определите список подсетей, с которыми необходимо настроить доступ в целевой кластер и из целевого кластера на платформе Evolution. Подсети должны быть доступны через edge клиентского ВЦОД.
-
Проверьте, что из исходного кластера есть доступ в интернет для запуска подов Velero. Иногда доступ у клиентов платформы Облако VMware в интернет из кластеров отключен.
-
Создайте МПС в Evolution через сейл-менеджера с указанием идентификатора проекта в Evolution и подсетей платформы Облако VMware.
-
На Edge клиентского ВЦОД настройте разрешающие правила Firewall для доступа между подсетями Evolution и платформы Облако VMware.
-
Настройте no-snat правило для подсети Evolution c приоритетом ноль.
-
На виртуальной машине, расположенной в клиентском ВЦОД, подготовьте в одном каталоге файлы:
-
s3_creds
[default]aws_access_key_id=<tenant_id>:<key_id>aws_secret_access_key=<key_secret>Где:
-
<tenant_id> — идентификатор тенанта. Его можно посмотреть в сервисе Object Storage в меню бакета на вкладке :guilabel:Object Storage API.
-
<key_id> — значение Key ID сервисного аккаунта, полученное на шаге 6 предыдущего раздела.
-
<key_secret> — значение Key Secret сервисного аккаунта, полученное на шаге 6 предыдущего раздела.
-
-
evo_velero_change_storage_class_cm.yaml
apiVersion: v1kind: ConfigMapmetadata:name: change-storage-class-confignamespace: velerolabels:velero.io/plugin-config: ""velero.io/change-storage-class: RestoreItemActiondata:csi-sbercloud-nd: cloudru-nvme -
ent_add_annotations_for_LBs.sh
#/bin/bashevo_subnet_id="<evo_network_id>"for svc in $(kubectl get svc --all-namespaces -o jsonpath='{range .items[?(@.spec.type=="LoadBalancer")]}{.metadata.namespace}/{.metadata.name}{"\n"}{end}'); donamespace=$(echo "$svc" | cut -d '/' -f 1)name=$(echo "$svc" | cut -d '/' -f 2)kubectl patch svc "$name" -n "$namespace" --patch "{\"metadata\":{\"annotations\":{\"loadbalancer.mk8s.cloud.ru/internal-subnet-id\":\"${evo_subnet_id}\",\"loadbalancer.mk8s.cloud.ru/type\": \"internal\"}}}"doneГде <evo_network_id> — идентификатор подсети, созданной в облаке Evolution.
-
evo_rm_loadbalancerIP_in_svc_spec.sh
#/bin/bashfor svc in $(kubectl get svc --all-namespaces -o jsonpath='{range .items[?(@.spec.loadBalancerIP)]}{.metadata.namespace}/{.metadata.name}{"\n"}{end}')donamespace=$(echo "$svc" | cut -d '/' -f 1)name=$(echo "$svc" | cut -d '/' -f 2)kubectl patch svc "$name" -n "$namespace" --type json -p='[{"op": "remove", "path": "/spec/loadBalancerIP"}]'done -
kubeconfig_ent
-
kubeconfig_evo
-
-
С виртуальной машины:
-
Подключитесь к кластеру, который нужно перенести.
-
-
Проверьте доступ к исходному и целевому кластеру с виртуальной машины.
Перенесите рабочие нагрузки
Далее команды выполняются с использованием различных конфигурационных файлов. Контекст передается через команду export KUBECONFIG=<filename>.
-
Установите Velero в кластер для переноса:
export KUBECONFIG=kubeconfig_ent && \velero install --provider aws --plugins velero/velero-plugin-for-aws:v1.5.2 --bucket ent-to-evo-migration-bucket --secret-file ./s3_creds --backup-location-config region=ru-central-1,s3ForcePathStyle="true",s3Url=https://s3.cloud.ru --use-node-agent --use-volume-snapshots=false --default-volumes-to-fs-backup -
Установите Velero в целевой кластер:
export KUBECONFIG=kubeconfig_evo && \velero install --provider aws --plugins velero/velero-plugin-for-aws:v1.5.2 --bucket ent-to-evo-migration-bucket --secret-file ./s3_creds --backup-location-config region=ru-central-1,s3ForcePathStyle="true",s3Url=https://s3.cloud.ru --use-node-agent --use-volume-snapshots=false --default-volumes-to-fs-backup -
Примените манифест ConfigMap для изменения StorageClass при восстановлении в целевой кластер:
kubectl apply -f evo_velero_change_storage_class_cm.yaml --kubeconfig kubeconfig_evo -
Для успешной миграции сервисов типа LoadBalancer необходимо добавить нужные аннотации перед резервным копированием и удалить прописанные в спецификации loadBalancerIP после восстановления в целевом кластере:
export KUBECONFIG=kubeconfig_ent && \bash ent_add_annotations_for_LBs.shСервисы типа LoadBalancer в Managed Kubernetes на Evolution создаются немного иначе, чем в Managed Kubernetes в облаке Облако VMware. В Evolution сервису нельзя назначить определенный IP. Адрес назначается автоматически из указанной сети.
-
Запустите резервное копирование необходимых пространств имен:
export KUBECONFIG=kubeconfig_ent && \velero backup create < backup_name > --include-namespaces <namespace_1>,<namespace_2>,...Где <namespace_1>,<namespace_2> — список пространств имен для миграции.
Статус создания копии можно отслеживать командой:
watch --color velero backup describe <backup_name> -
Проверьте наличие резервной копии:
export KUBECONFIG=kubeconfig_evo && \velero backup getРезервная копия может появиться не сразу. Время зависит от объема бэкапов.
-
Восстановите данные из резервной копии в целевом кластере:
export KUBECONFIG=kubeconfig_evo && \velero restore create --from-backup <backup_name>Статус восстановления из копии можно отслеживать командой:
watch --color velero restore describe <restore_name>Где <restore_name> — уникальное имя восстановления вида <backup_name>-xxxxxxxxxxxxxx, выдается после запуска восстановления.
-
Удалите loadBalancerIP в спецификациях восстановленных сервисов:
export KUBECONFIG=kubeconfig_evo && \bash evo_rm_loadbalancerIP_in_svc_spec.shСервисам назначатся IP-адреса из выбранной подсети Evolution.
-
Настройте NAT-правила на Edge клиентского VDC для доступа к новому сервису, развернутого в Evolution. Дополнительно необходимо создать Firewall-правила для доступа снаружи к опубликованным сервисам.
-
После запуска подов в целевом кластере проверьте корректность мигрированных данных и работы сервисов.
Сервисы, развернутые в старом кластере с помощью операторов (CloudNativePG, Strimzi и других), нельзя перенести подобным образом. Используйте штатные механизмы миграции базы данных.
При указании в списке сети узлов старого кластера между кластерными сетями настроится связность. Далее, используя сервисные адреса, можно настроить репликацию и зеркалирование.
- Подготовьте инфраструктуру в облаке Evolution
- Подготовьте инфраструктуру на платформе Облако VMware
- Перенесите рабочие нагрузки