Миграция с Container Registry на Cloud Registry
Миграцию можно запустить двумя способами:
- По каталогу — переносятся все реестры указанного каталога.
- По облаку — переносятся все реестры во всех каталогах указанного облака.
Миграция запускается одновременно для всех реестров в каталоге или облаке. Запустить ее только для части реестров нельзя. Если в каталоге или облаке есть ненужные реестры, предварительно удалите их.
Идентификаторы реестров и адреса Docker-образов сохраняются, поэтому менять ссылки на Docker-образы после миграции не нужно.
Во время миграции переносятся все метаданные и данные из Container Registry в Cloud Registry:
- метаданные реестра;
- настройки прав доступа (права доступа на реестр и репозитории в реестре);
- политики доступа для IP-адресов;
- политики жизненного цикла;
- настройки сканирования;
- алиасы для реестров.
Перед началом работы
-
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
-
В зависимости от выбранного способа миграции получите идентификатор каталога или облака и сохраните его в переменную:
-
Для миграции по каталогу — получите идентификатор каталога и сохраните его в переменную
FOLDER_ID:export FOLDER_ID="<идентификатор_каталога>" -
Для миграции по облаку — получите идентификатор облака и сохраните его в переменную
CLOUD_ID:export CLOUD_ID="<идентификатор_облака>"
-
-
Назначьте на каталог или облако (в зависимости от выбранного способа миграции) следующие роли:
-
cloud-registry.registries.migrationRunner— для субъекта (пользователя или сервисного аккаунта), который будет запускать миграцию. Роль включает разрешения на запуск миграции (cloud-registry.registries.startMigration) и просмотр ее статуса (cloud-registry.registries.getMigrationStatus).Роль должен назначить владелец или администратор ресурса.
-
cloud-registry.registries.migrationViewer— для субъектов, которым нужно только отслеживать статус миграции. -
container-registry.images.pullerиcontainer-registry.images.pusher— для субъектов, которые будут выполнять проверочные Docker pull и push. Роли миграции не дают доступ к Docker-образам.
Подробнее о назначении ролей читайте в разделе Назначение роли.
-
Запустите миграцию
Рекомендуем использовать параметр --async — команда вернет идентификатор операции и не будет ждать ее завершения.
yc cloud-registry v1 migration start-folder "$FOLDER_ID" \
--profile <имя_профиля> \
--async \
--format json
yc cloud-registry v1 migration start-cloud "$CLOUD_ID" \
--profile <имя_профиля> \
--async \
--format json
В ответе будет поле id — идентификатор операции.
Важно
Прежде чем запускать команду повторно, проверьте статус уже запущенной операции.
Чтобы получить статус операции, выполните команду:
yc cloud-registry v1 operation get <идентификатор_операции> --profile <имя_профиля>
Миграция завершилась, если завершилась операция. Перенос данных можно отслеживать на дашборде миграции.
Управление редиректами при запуске миграции
По умолчанию после запуска миграции для реестров включаются редиректы: все запросы к cr.yandex перенаправляются в Cloud Registry. Это позволяет продолжать использовать прежний адрес без изменений в инфраструктуре.
Если такое поведение не подходит и вы хотите сразу разделить трафик — запросы к cr.yandex направлять в Container Registry, а запросы к registry.yandexcloud.net — в Cloud Registry, запустите миграцию с параметром --disable-redirects:
yc cloud-registry v1 migration start-folder "$FOLDER_ID" \
--profile <имя_профиля> \
--disable-redirects \
--async \
--format json
yc cloud-registry v1 migration start-cloud "$CLOUD_ID" \
--profile <имя_профиля> \
--disable-redirects \
--async \
--format json
При отключенных редиректах Container Registry и Cloud Registry работают как две независимые копии данных. В такой конфигурации в своей инфраструктуре сразу обновите ссылки с cr.yandex на registry.yandexcloud.net.
Редиректы можно включить или выключить и позже. Подробнее в разделе Управляйте редиректами после миграции.
Посмотрите статус миграции
Дашборд миграции показывает общий статус, счетчики реестров, репозиториев и тегов, а также объекты с ошибками и объекты, которые еще переносятся.
Чтобы открыть дашборд, выполните команду:
yc cloud-registry v1 migration get-folder-migration-status-dashboard "$FOLDER_ID" \
--profile <имя_профиля>
yc cloud-registry v1 migration get-cloud-migration-status-dashboard "$CLOUD_ID" \
--profile <имя_профиля>
Значения статусов:
| Статус | Значение |
|---|---|
CREATED |
Объект добавлен в очередь миграции |
SCHEDULED |
Миграция объекта запланирована |
IN_PROGRESS |
Данные переносятся |
COMPLETED |
Миграция завершена |
FAILED |
Миграция завершилась ошибкой |
Миграция завершена успешно, если:
- общий статус —
COMPLETED; failedравен0для реестров, репозиториев и тегов;completedравенtotal.
Поведение запросов Docker pull и push зависит от статуса миграции:
CREATED— запросы Docker pull идут в Container Registry. Запросы Docker push могут временно завершаться ошибкой429 Too Many Requestsс заголовкомRetry-After— повторите запрос через указанное время.SCHEDULED— все запросы Docker pull и push перенаправляются в Cloud Registry.
Управляйте редиректами после миграции
Режим редиректов можно менять уже после запуска миграции: для отдельного реестра, для всех реестров каталога или для всех реестров облака. Используйте флаг --enabled:
true— редиректы включены, запросы кcr.yandexидут в Cloud Registry;false— редиректы отключены, запросы кcr.yandexпродолжают идти в Container Registry).
yc cloud-registry v1 migration toggle-registry-redirects <идентификатор_реестра> \
--profile <имя_профиля> \
--enabled=<true_или_false>
yc cloud-registry v1 migration toggle-folder-redirects "$FOLDER_ID" \
--profile <имя_профиля> \
--enabled=<true_или_false>
yc cloud-registry v1 migration toggle-cloud-redirects "$CLOUD_ID" \
--profile <имя_профиля> \
--enabled=<true_или_false>
Проверьте Docker pull и push
Если редиректы:
- включены, вы можете продолжать использовать прежний адрес Container Registry —
cr.yandex. - отключены, используйте адрес Cloud Registry —
registry.yandexcloud.net.
Сохраните идентификатор реестра в переменную REGISTRY_ID:
export REGISTRY_ID="<идентификатор_реестра>"
Сохраните имя репозитория в переменную REPOSITORY_NAME:
export REPOSITORY_NAME="<имя_репозитория>"
Сохраните имя локального Docker-образа в переменную LOCAL_IMAGE:
export LOCAL_IMAGE="<имя_Docker-образа>"
Сохраните тег Docker-образа в переменную TAG:
export TAG="<тег>"
Проверьте, что команды Docker pull и push выполняются:
yc iam create-token --profile <имя_профиля> \
| docker login --username iam --password-stdin cr.yandex
docker pull \
"cr.yandex/$REGISTRY_ID/$REPOSITORY_NAME:$TAG"
docker tag "$LOCAL_IMAGE" \
"cr.yandex/$REGISTRY_ID/migration-check:test"
docker push \
"cr.yandex/$REGISTRY_ID/migration-check:test"
Хеш скачанного образа должен совпадать с хешем до миграции. Новый тег после выполнения команды Docker push должен отображаться в Cloud Registry.
Если миграция завершилась ошибкой
Если миграция завершилась ошибкой, обратитесь в техническую поддержку
- идентификатор каталога или облака, для которого запускалась миграция;
- дашборд миграции в формате JSON;
- время ошибки и request ID, если он есть в выводе CLI.