Visión general
En el proceso de migración a la nube o migración a la nube, los servicios de usuario deben migrarse en lotes. Sobre la base de estos antecedentes, el equipo de expertos en contenedores de Tencent Cloud desarrolló una herramienta de migración por lotes de imágenes: transferencia de imágenes. Esta herramienta admite la migración por lotes entre almacenes espejo de varios proveedores en la nube, y también admite la migración completa con un clic de Tencent Cloud Mirror Warehouse TCR Personal Edition CCR a Tencent Cloud Mirror Warehouse Enterprise TCR.
Este artículo presenta primero los puntos débiles de la migración de imágenes en el proceso de migración / nube empresarial. Posteriormente, se introducen en detalle las ideas de diseño, los módulos funcionales y las mejores prácticas de la herramienta de transferencia de imágenes image-transfer.
La herramienta es oficialmente de código abierto, la dirección del proyecto: https://github.com/tkestack/image-transfer
Dirección de descarga del paquete binario: https://github.com/tkestack/image-transfer/releases
¿Cómo migrar negocios a la nube?
Hay varios escenarios para la migración de la nube empresarial, uno es el IDC a la nube autoconstruido, el segundo es la migración a la nube de terceros y el tercero es la recuperación remota de desastres, es decir, la nube híbrida. En estos escenarios, ya sea migración a la nube o migración a la nube, el proceso de migración incluye principalmente los siguientes pasos.
- Planificación de redes. configuración de vpc, división en subredes, etc.
- migración de datos. Almacenamiento de objetos, almacenamiento de archivos, etc.
- Migración de aplicaciones. Negocio, configuración, etc.
En el proceso de migración de datos, si un gran número de empresas utiliza la implementación en contenedores, se requiere la migración de imágenes por lotes. En la actualidad, los servicios de almacenamiento espejo de la mayoría de los proveedores de la nube no ofrecen la posibilidad de migrar los almacenes espejo en lotes. Si desea migrar una empresa, solo puede descargar la imagen original localmente, modificar la etiqueta y cargarla en el almacén de imágenes de destino. Este proceso tiene las siguientes desventajas:
- Requiere mucho tiempo y trabajo. Solo para la migración de una sola imagen, se requieren tres pasos y debe vigilarlos. Si ocurre una falla, se requiere un procesamiento adicional.
- Operación completamente humana, fácil de cometer errores. Al modificar la etiqueta de la imagen original, es muy fácil cometer errores debido a la modificación manual y la modificación de la etiqueta es incorrecta.
- Cuando la cantidad de duplicación es grande, el costo aumenta y el progreso de la migración a la nube es lento. Si hay cientos o miles de espejos, tal operación humana, el progreso de la migración será muy lento y el costo de la migración aumentará considerablemente.
El principio de transferencia de imágenes
Objetivos de diseño
Para los puntos débiles de la migración de espejos. Esperamos desarrollar una herramienta de migración de imágenes por lotes. Para los usuarios, solo necesita una configuración simple para realizar la migración por lotes de imágenes sin intervención manual, lo que mejora el progreso de la migración / nube empresarial y reduce los costos. Específicamente, la herramienta tiene los siguientes objetivos de diseño.
-
La configuración es simple, no se requieren entradas complicadas . Esperamos que esta herramienta sea simple y fácil de usar para los usuarios. Solo necesita configurar las direcciones espejo de origen y destino y la autenticación para completar la migración por lotes.
-
Migre imágenes masivas de manera rápida y eficiente, reduciendo los costos de migración . En respuesta a una gran cantidad de necesidades de migración espejo, esperamos que la herramienta se pueda completar de manera eficiente y con la ayuda de algunas tecnologías de alta concurrencia, para lograr una migración rápida.
-
Cierta tolerancia a fallos, reduciendo la intervención manual y el mantenimiento . Durante el proceso de migración, esperamos que la herramienta pueda identificar y reparar automáticamente algunos errores, minimizar el mantenimiento manual y mejorar la eficiencia de operación y mantenimiento.
-
No hay dependencia del entorno operativo y se mejora la universalidad de las herramientas . Esperamos que la herramienta pueda ejecutarse en cualquier sistema operativo Linux, Mac OS, Windows, sin depender de Docker y otros programas.
-
Admite el modo de migración completa con un solo clic de Tencent Cloud CCR . En la actualidad, se lanza oficialmente Tencent Cloud Container Image Service TCR Enterprise Edition, y Tencent Cloud TCR Personal Edition (CCR) reducirá gradualmente el mantenimiento en el futuro hasta que se desconecte. Por lo tanto, la herramienta debe admitir la migración completa con un solo clic del almacén CCR a TCR Enterprise Edition.
- Admite límite de velocidad qps personalizado. Al migrar imágenes en lotes, las llamadas frecuentes a la interfaz del almacén espejo pueden hacer que el almacén espejo se bloquee, por lo que es necesario restringir qps.
Arquitectura
La transferencia de imágenes se compone de varios módulos. La siguiente figura muestra la arquitectura de transferencia de imágenes.
-
Entrada de modo general (predeterminado) : se utiliza para aceptar la tarea de migración de duplicación emitida por el usuario. Incluyendo archivos de configuración de migración espejo y archivos de configuración de autenticación. Este modo se utiliza para implementar la migración de imágenes entre proveedores de la nube.
-
Entrada del modo de migración de CCR con un clic : debe agregar --ccrToTcr = true al parámetro de entrada de la herramienta. Este modo se utiliza para la migración completa con un clic del almacén de CCR a TCR Enterprise Edition. Además de agregar el parámetro --ccrToTcr = true, también se requieren archivos de configuración de autenticación y archivos de configuración secretos de Tencent Cloud.
-
canalización : este módulo es el núcleo de la herramienta para gestionar la migración de imágenes. Responsable de procesar las tareas de migración de réplicas emitidas por los usuarios, incluido el procesamiento de las reglas de sincronización del almacén de réplicas de acuerdo con el archivo de configuración de la migración y la realización de tareas jerárquicas de extracción y transferencia de réplicas. El módulo utiliza un modelo de canalización altamente concurrente para mejorar la velocidad de migración.
- Reintentar tarea: esta etapa reintentará la tarea de transferencia fallida en la canalización. El número de reintentos se puede determinar de acuerdo con los parámetros de entrada del usuario, y el valor predeterminado es 2 veces.
Tubería
Dado que la herramienta está escrita en lenguaje golang, el módulo de procesamiento central utiliza el modelo de alta concurrencia de canalización de go. Todo el módulo de canalización se divide en tres pequeños módulos.
Reglas de sincronización del almacén espejo de procesamiento de múltiples co-rutinas
Aquí está el procesamiento y análisis de la entrada del archivo de configuración de migración espejo por parte del usuario, para obtener cada dirección espejo de origen (incluyendo repositorio y etiqueta) que necesita ser transferida, y la dirección espejo de destino correspondiente. Luego, cree un trabajo para cada dirección de espejo de origen y dirección de espejo de destino. Si la etiqueta de réplica de origen no se especifica en el archivo de configuración de réplica, se extraerán todas las etiquetas del repositorio y, a continuación, se creará un trabajo para cada etiqueta. Este proceso utiliza el enfoque de múltiples corrutinas de golang para aumentar la velocidad de procesamiento. El usuario puede especificar el número de corrutinas en el parámetro de entrada --proc, el valor predeterminado es 5. Después de componer cada trabajo, se colocará en el canal de tareas, a la espera de ser consumido.
Canal de transmisión de tareas
El canal de tareas puede considerarse como un middleware simple, implementado por el canal golang. Después de que se produce cada trabajo, se colocará en el canal y esperará a ser consumido. Este diseño puede asegurar que el trabajo producido por el productor se coloque inmediatamente en la línea de consumo, y una vez que el consumidor final esté libre, se pueda realizar el procesamiento de consumo. Mejore la eficiencia del procesamiento de trabajos.
Tarea de procesamiento de múltiples rutinas
Estas corrutinas son la parte final del trabajo del consumidor. Después de obtener el trabajo, primero extraerá el manifiesto de la dirección de origen en el trabajo para determinar si es un espejo de manifiesto múltiple, luego extraerá cada blob, luego transferirá el blob a la dirección de destino y finalmente transferirá el manifiesto a la dirección de destino. El proceso consiste en usar la caché, los datos no se colocan en el disco y se mejora la eficiencia. Este proceso utiliza el enfoque de múltiples corrutinas de golang para aumentar la velocidad de procesamiento. El usuario puede especificar el número de corrutinas en el parámetro de entrada --rutinas, el valor predeterminado es 5.
Mejores prácticas para la migración de imágenes
Esta sección presentará cómo utilizar la herramienta de transferencia de imágenes para implementar la migración de imágenes por lotes en diferentes escenarios. Los escenarios son los siguientes:
-
Migración de imágenes entre diferentes proveedores de la nube. Por ejemplo, migrando de ACR, Alibaba Cloud Mirror Warehouse, a TCR, Tencent Cloud Mirror Warehouse.
-
El almacén espejo de código abierto / autoconstruido se migra a la nube. Por ejemplo, migrar desde el almacén espejo del puerto al almacén espejo de Tencent Cloud TCR.
- Tencent Cloud TCR Personal Edition (CCR) se migra a Tencent Cloud Mirror Warehouse Enterprise Edition TCR con un solo clic.
Instalación de herramientas:
Primero, descargue y compile la herramienta, hay dos formas, una es obtener directamente el archivo binario y la segunda es descargar el código fuente y compilar.
Dirección de descarga del paquete de lanzamiento binario:
https://github.com/tkestack/image-transfer/releases
El ejemplo utiliza el código fuente descargado para compilar para demostración:
El proceso de compilación también es muy simple, ingrese al directorio del código fuente y realice directamente.
git clone https://github.com/tkestack/image-transfer.git
cd ./image-transfer
make
Una vez completada la compilación, el archivo binario de transferencia de imágenes se generará en el directorio actual. Listo para usar. A continuación, realice una demostración de las mejores prácticas.
Escenario de mejores prácticas 1: migración de imágenes entre diferentes proveedores de nube
Tome el ejemplo de la migración de ACR Mirror Warehouse de Alibaba Cloud a TCR Mirror Warehouse de Tencent Cloud.
1. Prepare el archivo de información de credenciales de acceso para Tencent Cloud Mirror Warehouse TCR y 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
La configuración es muy sencilla: introduzca la dirección del almacén espejo de origen y la dirección del almacén espejo de destino. E ingrese el nombre de usuario y la contraseña correspondientes al almacén espejo.
Donde inseguro indica si el registro es un servicio http, si lo es, el campo seguro debe ser verdadero, el valor predeterminado es falso y es opcional.
El usuario del almacén espejo de destino debe tener permisos de envío y creación de almacén. Si no se proporcionan, el acceso anónimo se realizará de forma predeterminada.
Las credenciales de acceso para Tencent Cloud TCR se obtienen de la siguiente manera:
Las credenciales de acceso para ACR Mirror Warehouse ACR se obtienen de la siguiente manera:
2. Prepare el archivo de reglas de duplicación que se va a migrar: rule.yaml
registry.cn-hangzhou.aliyuncs.com/grantzhao/sichenzhao:xx": "grant-test.tencentcloudcr.com/grantzhao/sichenzhao
Este archivo es la imagen de origen y la imagen de destino que se transferirán. Las reglas del archivo son: dirección de espejo de origen: dirección de espejo de destino,
donde se puede especificar la dirección de espejo de origen, o sin etiqueta, o se pueden especificar múltiples etiquetas.
Al especificar una sola etiqueta: la dirección de destino puede contener o no la etiqueta. Si la etiqueta no está incluida, se utiliza la etiqueta de espejo de origen.
Cuando no se especifica la etiqueta: la dirección de destino debe contener una etiqueta.
Cuando se especifican varias etiquetas: separe varias etiquetas con comas en inglés, como grant-test.tencentcloudcr.com/grantzhao/sichenzhao:1.0,2.0,3.0. En este momento, la dirección de destino no puede contener la etiqueta y la etiqueta de la dirección de origen se utiliza de forma predeterminada.
3. Ejecute la herramienta
./image-transfer --routines=5 --securityFile=./security.yaml --ruleFile=./rule.yaml --ns=default \
--registry=grant-test.tencentcloudcr.com --retry=2 --qps=100
Explicación de parámetros:
--ns especifica un ns predeterminado, si el ns del almacén de destino está vacío, será reemplazado por el ns predeterminado.
--registry especifica un registro predeterminado. Si el registro del almacén de destino está vacío, será reemplazado por el registro predeterminado.
--routines = 5, lo que significa establecer el número de concurrentes en 5. El valor predeterminado es 5.
--retry = 2 significa que el número de reintentos después del error es 2 y el valor predeterminado es 2.
--securityFile, especifica el archivo de autenticación.
--ruleFile, especifica el archivo de configuración del almacén espejo.
--qps, limite los qps solicitados a no más de 100 / s.
4. Ejecutar resultados
la ultima linea
################# Finished, 0 transfer jobs failed, 0 jobs generate failed #################
Indica una operación exitosa.
Escenario de mejores prácticas 2: migración del almacén espejo de código abierto / autoconstruido a la nube
Tome como ejemplo la migración desde el centro acoplable del almacén espejo de código abierto al almacén espejo TCR de Tencent Cloud.
1. Prepare el concentrador de Docker y el archivo de información de credenciales de acceso de Tencent Cloud Image Warehouse TCR: security.yaml
grant-test2.tencentcloudcr.com:
username: xxx
password: xxx
registry.hub.docker.com:
username: xxx
password: xxx
2. Prepare el archivo de reglas de duplicación que se va a migrar: image.json
sichenzhao/private-test:xxx": "grant-test2.tencentcloudcr.com/grantzhao/sichenzhao
3. Ejecute la herramienta
./image-transfer --routines=5 --securityFile=./security.yaml --ruleFile=./rule.yaml --ns=default \
--registry=grant-test.tencentcloudcr.com --retry=2
4. Ejecutar resultados
la ultima linea
################# Finished, 0 transfer jobs failed, 0 jobs generate failed #################
Indica una operación exitosa.
Escenario de mejores prácticas 3: migración de un clic de Tencent Cloud TCR Personal Edition (CCR) a Tencent Cloud Mirror Warehouse Enterprise Edition TCR
El uso en este escenario es ligeramente diferente al de los dos escenarios anteriores. Se manifiesta principalmente como cambios en los parámetros de entrada.
1. Prepare el archivo de configuración de autenticación de imagen 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. Prepare el archivo de configuración secreto de Tencent Cloud secret.yaml
Para el modo de migración de un clic de TCR, el nombre de usuario y la contraseña del almacén no son necesarios como autenticación de acceso, pero se utiliza la información secreta de Tencent Cloud.
ccr:
secretId: xxx
secretKey: xxx
tcr:
secretId: xxx
secretKey: xxx
Nota: El
formato de archivo se muestra arriba, solo se permite modificar los elementos secretId y secretKey.
Si no hay información secreta de ccr, se utilizará tcr en su lugar. Por el contrario, si no hay información secreta de tcr, se utilizará ccr en su lugar.
La información secreta se obtiene de la siguiente manera:
contiene dos información, secretid y secretkey
3. Ejecute la herramienta
La entrada de parámetros aquí es ligeramente diferente de los dos escenarios anteriores.
./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
Explicación de parámetros:
--ccrToTcr = true, significa habilitar el modo de migración completa de una tecla de TCR.
--secretFile, proporciona el archivo de configuración secret.yaml.
--tcrName = tcr-test, especifique el nombre del almacén de tcr de destino.
--tcrRegion, especifica la región donde se encuentra el almacén de tcr de destino.
--ccrRegion, especifica la región donde se encuentra el almacén de ccr de origen.
4. Ejecutar resultados
La migración por lotes con un clic llevará mucho tiempo, porque todas las imágenes de ccr deben transferirse a tcr.
Finalmente, puede ver que 16 trabajos fallaron. La herramienta finalmente mostrará la dirección de espejo de origen y la dirección de espejo de destino del trabajo fallido. Para estos trabajos fallidos, fui al almacén para verificar y encontré que las etiquetas de estos trabajos no eran válidas. Por tanto, la transmisión falla.
para resumir
Este artículo presenta la herramienta de migración de imágenes por lotes: transferencia de imágenes desde los aspectos de análisis de problemas, objetivos de diseño, análisis de principios y mejores prácticas. Todos son bienvenidos a contribuir con el código fuente y también a plantear requisitos de problemas.