Инструмент пакетной миграции изображений: передача изображений

Обзор

В процессе миграции в облако или миграции в облако пользовательские сервисы необходимо переносить партиями. Исходя из этого, группа экспертов по контейнерам Tencent Cloud разработала инструмент пакетной миграции изображений: передача изображений. Этот инструмент поддерживает пакетную миграцию между зеркальными хранилищами нескольких облачных поставщиков, а также поддерживает полную миграцию Tencent Cloud Mirror Warehouse TCR Personal Edition CCR одним щелчком мыши на Tencent Cloud Mirror Warehouse Enterprise TCR.
Эта статья сначала знакомит с болевыми точками миграции образов в процессе бизнес-облачной миграции. Затем подробно представлены идеи дизайна, функциональные модули и передовой опыт инструмента передачи изображений.
Инструмент официально с открытым исходным кодом, адрес проекта: https://github.com/tkestack/image-transfer

Адрес загрузки двоичного пакета: https://github.com/tkestack/image-transfer/releases

Как перенести бизнес в облако?

Существует несколько сценариев миграции бизнес-облака в облако: один - это самостоятельный IDC в ​​облако, второй - перенос в облако сторонних производителей, а третий - удаленное аварийное восстановление, то есть гибридное облако. В этих сценариях, будь то миграция в облако или миграция в облако, процесс миграции в основном включает следующие шаги.

  1. Сетевое планирование. конфигурация vpc, разделение на подсети и т. д.
  2. перенос данных. Хранилище объектов, хранилище файлов и т. Д.
  3. Перенос приложений. Бизнес, комплектация и др.

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

  • Времени и трудоемко. Только для миграции одного образа требуются три шага, и вам нужно следить за этим. В случае сбоя требуется дополнительная обработка.
  • Полностью человеческая операция, легко ошибаться. При изменении тега исходного изображения очень легко сделать ошибку из-за ручного изменения, и изменение тега является неправильным.
  • Когда количество зеркальных копий велико, стоимость увеличивается, а процесс миграции в облако замедляется. Если есть сотни или тысячи зеркал, такая операция выполняется человеком, процесс миграции будет очень медленным, а стоимость миграции значительно возрастет.

Принцип переноса изображения

Цели дизайна

Для болевых точек миграции зеркала. Мы надеемся разработать инструмент для пакетной миграции изображений. Пользователям требуется только простая конфигурация, чтобы реализовать пакетную миграцию образов без ручного вмешательства, что улучшает процесс бизнес-миграции / миграции в облако и снижает затраты. В частности, инструмент преследует следующие цели проектирования.

  1. Конфигурация проста, никаких сложных вводов не требуется . Мы надеемся, что этот инструмент прост и удобен для пользователей. Для завершения пакетной миграции вам нужно только настроить исходный и целевой зеркальные адреса и аутентификацию.

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

  3. Определенная отказоустойчивость, сокращение ручного вмешательства и обслуживания . Мы надеемся, что в процессе миграции инструмент сможет выявлять и автоматически исправлять некоторые ошибки, сводить к минимуму ручное обслуживание и повышать эффективность эксплуатации и обслуживания.

  4. Нет зависимости от операционной среды, а универсальность инструментов улучшена . Мы надеемся, что этот инструмент может работать в любой операционной системе Linux, Mac OS, Windows, не полагаясь на докеры и другие программы.

  5. Поддержка режима полной миграции Tencent Cloud CCR одним щелчком мыши . В настоящее время официально запущена Tencent Cloud Container Image Service TCR Enterprise Edition, и Tencent Cloud TCR Personal Edition (CCR) будет постепенно сокращать объем обслуживания в будущем, пока не перейдет в автономный режим. Следовательно, инструмент должен поддерживать полную миграцию хранилища CCR в TCR Enterprise Edition одним щелчком мыши.

  6. Поддержка настраиваемого ограничения скорости qps. При пакетном переносе изображений частые вызовы интерфейса зеркального хранилища могут вызвать сбой зеркального хранилища, поэтому необходимо ограничить qps.

Архитектура

Передача изображений состоит из нескольких модулей.На следующем рисунке показана архитектура передачи изображений.

Инструмент пакетной миграции изображений: передача изображений

  • Ввод в общем режиме (по умолчанию) : используется для принятия задачи миграции с зеркальным отображением, выданной пользователем. Включая файлы конфигурации зеркальной миграции и файлы конфигурации аутентификации. Этот режим используется для реализации миграции изображений между поставщиками облачных услуг.

  • Ввод режима миграции CCR одним щелчком : вам нужно добавить --ccrToTcr = true к параметру ввода инструмента.Этот режим используется для полной миграции хранилища CCR в TCR Enterprise Edition одним щелчком мыши. Помимо добавления параметра --ccrToTcr = true, также необходимы файлы конфигурации аутентификации и секретные файлы конфигурации Tencent Cloud.

  • pipeline : этот модуль является ядром инструмента для переноса образов. Отвечает за обработку задач миграции зеркала, выдаваемых пользователями, включая обработку правил синхронизации зеркального хранилища в соответствии с файлом конфигурации миграции и выполнение иерархических задач извлечения и передачи зеркал. В модуле используется модель конвейера с высокой степенью параллелизма для повышения скорости миграции.

  • Задача повтора: на этом этапе выполняется повторная попытка выполнения задачи передачи, завершившейся сбоем, в конвейере. Количество повторных попыток может быть определено в соответствии с параметрами ввода пользователя, по умолчанию - 2 раза.

Трубопровод

Поскольку инструмент написан на языке golang, основной модуль обработки использует конвейерную модель высокого параллелизма go. Весь модуль конвейера разделен на три небольших модуля.

Правила синхронизации зеркального склада с несколькими сопрограммами

Вот обработка и анализ файла конфигурации миграции зеркала, введенного пользователем, для получения каждого исходного зеркального адреса (включая репо и тег), который необходимо передать, и соответствующего целевого зеркального адреса. Затем сформируйте задание для каждого адреса зеркала источника и адреса зеркала назначения. Если исходный тег зеркала не указан в файле конфигурации зеркала, будут вытянуты все теги из репозитория, а затем для каждого тега будет сформировано задание. В этом процессе используется мульти-сопрограммный подход golang для увеличения скорости обработки. Количество сопрограмм может быть указано пользователем во входном параметре --proc, по умолчанию 5. После того, как каждое задание составлено, оно будет помещено в канал задач, ожидая использования.

Канал передачи задачи

Канал задач можно рассматривать как простое промежуточное программное обеспечение, реализованное каналом golang. После того, как каждое задание создано, оно будет помещено в канал и будет ожидать его использования. Такой дизайн может гарантировать, что работа, выполненная производителем, будет немедленно помещена в линию потребления, и, как только потребитель станет свободным, можно будет выполнить обработку потребления. Повышение эффективности обработки заданий.

Задача обработки нескольких сопрограмм

Эти сопрограммы являются конечной точкой работы потребителя. После получения задания он сначала извлекает манифест исходного адреса в задании, чтобы определить, является ли это зеркалом с несколькими манифестами, затем извлекает каждый большой двоичный объект, затем передает этот большой двоичный объект на адрес назначения и, наконец, передает манифест на адрес назначения. Процесс заключается в использовании кеша, данные не помещаются на диск, и эффективность повышается. В этом процессе используется мульти-сопрограммный подход golang для увеличения скорости обработки. Количество сопрограмм может быть указано пользователем во входном параметре --routines, по умолчанию - 5.

Рекомендации по миграции изображений

В этом разделе рассказывается, как использовать инструмент передачи изображений для реализации пакетной миграции изображений в различных сценариях. Сценарии следующие:

  1. Миграция изображений между разными поставщиками облачных услуг. Например, переход с ACR, Alibaba Cloud Mirror Warehouse, на TCR, Tencent Cloud Mirror Warehouse.

  2. Зеркальное хранилище с открытым исходным кодом / самостоятельно созданное зеркало переносится в облако. Например, миграция с портового зеркального склада на зеркальный склад Tencent Cloud TCR.

  3. Tencent Cloud TCR Personal Edition (CCR) переносится на Tencent Cloud Mirror Warehouse Enterprise Edition TCR одним щелчком мыши.

Установка инструмента:

Во-первых, загрузите и скомпилируйте инструмент, есть два способа: один - напрямую получить двоичный файл, а второй - загрузить исходный код и скомпилировать.

Адрес загрузки бинарного релизного пакета:

https://github.com/tkestack/image-transfer/releases

В примере используется загруженный исходный код для компиляции для демонстрации:

Процесс компиляции также очень прост, войдите в каталог с исходным кодом и напрямую make.

git clone https://github.com/tkestack/image-transfer.git
cd ./image-transfer
make

После завершения компиляции в текущем каталоге будет сгенерирован двоичный файл передачи изображений. Готов к использованию. Затем проведите демонстрацию передового опыта.

Сценарий передовой практики 1. Миграция изображений между разными поставщиками облачных услуг

Возьмем пример миграции с зеркального хранилища ACR в Alibaba Cloud на зеркальное хранилище TCR в Tencent Cloud.

1. Подготовьте файл информации об учетных данных для Tencent Cloud Mirror Warehouse TCR и Aliyun Mirror Warehouse ACR: auth.json
   grant-test.tencentcloudcr.com:
   username: xxx
   password: xxx
   grant-test2.tencentcloudcr.com:
   username: xxx
   password: xxx
   registry.cn-hangzhou.aliyuncs.com:
   username: xxx
   password: xxx
   ccr.ccs.tencentyun.com:
   username: xxx
   password: xxx
   registry.hub.docker.com:
   username: xxx
   password: xxx

Конфигурация очень проста: введите адрес исходного зеркального хранилища и адрес целевого зеркального хранилища. И введите имя пользователя и пароль, соответствующие зеркальному хранилищу.

Где insecure указывает, является ли реестр службой http, если это так, безопасное поле должно иметь значение true, значение по умолчанию - false и не обязательно.

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

Среди них учетные данные для доступа Tencent Cloud TCR получаются следующим образом: Учетные данные для доступа Alibaba Cloud
image.png
Mirror Warehouse ACR получаются следующим образом:
image.png

2. Подготовьте файл правил зеркалирования для переноса: rule.yaml
registry.cn-hangzhou.aliyuncs.com/grantzhao/sichenzhao:xx": "grant-test.tencentcloudcr.com/grantzhao/sichenzhao

Этот файл является исходным и целевым изображениями для передачи. Правила для файлов следующие: адрес зеркала источника: адрес зеркала назначения,
где можно указать адрес зеркала источника, или можно не указать тег, или можно указать несколько тегов.
При указании одного тега: адрес назначения может содержать или не содержать тег. Если тег не включен, используется тег исходного зеркала.
Если тег не указан: адрес назначения должен содержать тег.
Если указано несколько тегов: разделите несколько тегов английскими запятыми, например grant-test.tencentcloudcr.com/grantzhao/sichenzhao:1.0,2.0,3.0. В настоящее время адрес назначения не может содержать тег, и тег исходного адреса используется по умолчанию.

3. Запустите инструмент.
   ./image-transfer --routines=5 --securityFile=./security.yaml --ruleFile=./rule.yaml --ns=default \
   --registry=grant-test.tencentcloudcr.com --retry=2 --qps=100

Объяснение параметра:

--ns задает значение по умолчанию ns, если ns целевого склада пусто, оно будет заменено значением по умолчанию ns.

--registry указывает реестр по умолчанию.Если реестр целевого хранилища пуст, он будет заменен реестром по умолчанию.

--routines = 5, что означает установить количество одновременных на 5. По умолчанию - 5.

--retry = 2, что означает, что количество повторных попыток после сбоя равно 2, а значение по умолчанию равно 2.

--securityFile, укажите файл аутентификации.

--ruleFile, укажите файл конфигурации зеркального хранилища.

--qps, ограничить запрашиваемое количество запросов в секунду не более 100 / с.

4. Результаты запуска

Инструмент пакетной миграции изображений: передача изображений
последняя строка

################# Finished, 0 transfer jobs failed, 0 jobs generate failed #################

Указывает на успешную операцию.

Сценарий передовой практики 2: миграция зеркального хранилища с открытым исходным кодом / самостоятельно созданного хранилища в облако

В качестве примера возьмем миграцию из док-хаба зеркального хранилища с открытым исходным кодом на зеркальный склад TCR Tencent Cloud.

1. Подготовьте docker-концентратор и файл информации об учетных данных доступа Tencent Cloud Image Warehouse TCR: security.yaml
   grant-test2.tencentcloudcr.com:
   username: xxx
   password: xxx
   registry.hub.docker.com:
   username: xxx
   password: xxx
2. Подготовьте файл правил зеркалирования для переноса: image.json
   sichenzhao/private-test:xxx": "grant-test2.tencentcloudcr.com/grantzhao/sichenzhao
3. Запустите инструмент.
   ./image-transfer --routines=5 --securityFile=./security.yaml --ruleFile=./rule.yaml --ns=default \
   --registry=grant-test.tencentcloudcr.com --retry=2
4. Результаты запуска

Инструмент пакетной миграции изображений: передача изображений
последняя строка

################# Finished, 0 transfer jobs failed, 0 jobs generate failed #################

Указывает на успешную операцию.

Передовой сценарий 3: миграция Tencent Cloud TCR Personal Edition (CCR) одним щелчком мыши на Tencent Cloud Mirror Warehouse Enterprise Edition TCR

Использование в этом сценарии немного отличается от двух вышеупомянутых сценариев. В основном проявляется в изменении входных параметров.

1. Подготовьте файл конфигурации аутентификации образа security.yaml.
   grant-test.tencentcloudcr.com:
   username: xxx
   password: xxx
   grant-test2.tencentcloudcr.com:
   username: xxx
   password: xxx
   ccr.ccs.tencentyun.com:
   username: xxx
   password: xxx
2. Подготовьте секретный файл конфигурации Tencent Cloud secret.yaml.

Для режима миграции TCR одним щелчком мыши имя пользователя и пароль хранилища не требуются в качестве аутентификации доступа, но используется секретная информация Tencent Cloud.

   ccr:
   secretId: xxx
   secretKey: xxx
   tcr:
   secretId: xxx
   secretKey: xxx

Примечание. Формат
файла показан выше, только элементы secretId и secretKey могут быть изменены.

Если секретная информация ccr отсутствует, вместо нее будет использоваться tcr. Напротив, если секретная информация tcr отсутствует, вместо нее будет использоваться ccr.

Секретная информация получается следующим образом:
image.png
содержит две информации: secretid и secretkey.

3. Запустите инструмент.

Ввод параметров здесь немного отличается от двух вышеупомянутых сценариев.

   ./image-transfer --ccrToTcr=true --routines=5 --securityFile=./security.yaml --secretFile=./secret.yaml --tcrName=tcr-test \
   --retry=3 --tcrRegion=ap-guangzhou --ccrRegion=ap-guangzhou --qps=3000

Объяснение параметра:

--ccrToTcr = true, означает включить одноключевой режим полной миграции TCR.

--secretFile, предоставляет файл конфигурации secret.yaml.

--tcrName = tcr-test, укажите имя целевого склада tcr.

--tcrRegion, укажите регион, где находится целевой склад tcr.

--ccrRegion, укажите регион, в котором находится исходный склад ccr.

4. Результаты запуска

Инструмент пакетной миграции изображений: передача изображений

Пакетная миграция в один клик займет много времени, потому что все образы ccr необходимо перенести в tcr.

Наконец, вы можете видеть, что 16 заданий завершились неудачно. Наконец, инструмент перечислит исходный зеркальный адрес и целевой зеркальный адрес неудачного задания. Для этих неудачных заданий я пошел на склад, чтобы проверить и обнаружил, что теги этих заданий недействительны. Следовательно, передача не работает.

подводить итоги

В этой статье представлен инструмент пакетной миграции изображений: перенос изображений с точки зрения анализа проблем, целей проектирования, анализа принципов и передовых практик. Каждый может внести свой исходный код, а также поднять вопрос о требованиях.

рекомендация

отblog.51cto.com/14120339/2589997
рекомендация