11.4. Enlaces de migración
Puede añadir hasta cuatro enlaces de migración a un único plan de migración y cada enlace se ejecutará en una fase diferente de la migración. Los enlaces de migración realizan tareas tales como la personalización de la inactividad de la aplicación, la migración manual de tipos de datos no compatibles y la actualización de las aplicaciones después de la migración.
Un enlace de migración se ejecuta en un clúster de origen o de destino en uno de los siguientes pasos de migración:
-
Antes de la copia de seguridad
: antes de realizar la copia de seguridad de los recursos en el clúster de origen -
Después de la copia de seguridad
: después de que los recursos se respalden en el clúster de origen -
Antes de la restauración
: antes de restaurar los recursos en el clúster de destino -
Después de la restauración
: después de restaurar los recursos en el clúster de destino
Puede crear un enlace creando una estrategia de Ansible que se ejecute con la imagen predeterminada de Ansible o con un contenedor de enlaces personalizado.
Estrategias de Ansible
Las estrategias de Ansible se montan en un contenedor de enlaces como mapa de configuración. El contenedor de enlaces se ejecuta como un trabajo, utilizando el clúster, la cuenta de servicio y el espacio de nombres especificados en el recurso personalizado MigPlan
. El trabajo continúa ejecutándose hasta que alcanza el límite por defecto de 6 reintentos o hasta que se completa con éxito. Esto continúa incluso si se desaloja o elimina el pod inicial.
La imagen de ejecución de Ansible por defecto es registry.redhat.io/rhmtc/openshift-migration-hook-runner-rhel7:1.7
. Esta imagen se basa en la imagen de Ansible Runner e incluye python-openshift
para los recursos de Ansible Kubernetes y el binario oc
actualizado.
Contenedor de enlaces personalizado
Puede utilizar un contenedor de enlaces personalizado en lugar de la imagen predeterminada de Ansible.
11.4.1. Escritura de una estrategia de Ansible para un enlace de migración
Puede escribir una estrategia de Ansible para utilizarla como enlace de migración. El enlace se añade a un plan de migración utilizando la consola web de MTC o especificando valores para los parámetros spec.hooks
en el manifiesto de recursos personalizados (CR) de MigPlan
.
La estrategia de Ansible se monta en un contenedor de enlaces como mapa de configuración. El contenedor de enlaces se ejecuta como un trabajo, utilizando el clúster, la cuenta de servicio y el espacio de nombres especificados en el CR MigPlan
. El contenedor de enlaces utiliza un token de cuenta de servicio especificado para que las tareas no requieran autenticación antes de ejecutarse en el clúster.
11.4.1.1. Módulos de Ansible
Puede utilizar el módulo shell
de Ansible para ejecutar comandos oc
.
Ejemplo de módulo shell
- hosts: localhost gather_facts: false tasks: - name: get pod name shell: oc get po --all-namespaces
Puede utilizar los módulos kubernetes.core
, como k8s_info
, para interactuar con los recursos de Kubernetes.
Ejemplo de módulo k8s_facts
- hosts: localhost gather_facts: false tasks: - name: Get pod k8s_info: kind: pods api: v1 namespace: openshift-migration name: "{{ lookup( 'env', 'HOSTNAME') }}" register: pods - name: Print pod name debug: msg: "{{ pods.resources[0].metadata.name }}"
Puede utilizar el módulo fail
para producir un estado de salida distinto de cero en casos en los que normalmente no se produciría un estado de salida distinto de cero, garantizando que se detecte el éxito o el fracaso de un enlace. Los enlaces se ejecutan como trabajos y el estado de éxito o fracaso de un enlace se basa en el estado de salida del contenedor de trabajos.
Ejemplo de módulo fail
- hosts: localhost gather_facts: false tasks: - name: Set a boolean set_fact: do_fail: true - name: "fail" fail: msg: "Cause a failure" when: do_fail
11.4.1.2. Variables del entorno
El nombre del CR MigPlan
y los espacios de nombres de migración se pasan como variables de entorno al contenedor de enlaces. Se accede a estas variables mediante el complemento de búsqueda
.
Variables de entorno adicionales
- hosts: localhost gather_facts: false tasks: - set_fact: namespaces: "{{ (lookup( 'env', 'migration_namespaces')).split(',') }}" - debug: msg: "{{ item }}" with_items: "{{ namespaces }}" - debug: msg: "{{ lookup( 'env', 'migplan_name') }}"