11.3. Migration d’applications à l’aide de la ligne de commande
Vous pouvez migrer des applications avec l’API MTC en utilisant l’interface de ligne de commande (CLI) afin d’automatiser la migration.
11.3.1. Conditions préalables à la migration Copier lienLien copié sur presse-papiers!
-
Vous devez être connecté en tant qu’utilisateur avec les privilèges
cluster-adminsur tous les clusters.
Migration directe des images
- Vous devez vous assurer que le registre d'images OpenShift sécurisé du cluster source est exposé.
- Vous devez créer une route vers le registre exposé.
Migration directe des volumes
- Si vos clusters utilisent des proxies, vous devez configurer un proxy TCP Stunnel.
Images internes
Si votre application utilise des images internes de l’espace de nommage
openshift, vous devez vous assurer que les versions requises des images sont présentes sur le cluster cible.Vous pouvez mettre à jour manuellement une balise de flux d'images afin d'utiliser une image OpenShift Container Platform 3 dépréciée sur un cluster OpenShift Container Platform 4.12.
Clusters
- Le cluster source doit être mis à niveau vers la dernière version de MTC z-stream.
- La version de MTC doit être la même sur tous les clusters.
Réseau
- Les clusters disposent d’un accès réseau illimité entre eux et au référentiel de réplication.
-
Si vous copiez les volumes persistants avec
move, les clusters doivent disposer d’un accès réseau illimité aux volumes distants. Vous devez activer les ports suivants sur un cluster OpenShift Container Platform 3 :
-
8443(serveur d’API) -
443(routes) -
53(DNS)
-
Vous devez activer les ports suivants sur un cluster OpenShift Container Platform 4 :
-
6443(serveur d’API) -
443(routes) -
53(DNS)
-
-
Vous devez activer le port
443sur le référentiel de réplication si vous utilisez le protocole TLS.
Volumes persistants (PV)
- Les volumes persistants doivent être valides.
- Les volumes persistants doivent être liés à des revendications de volumes persistants.
Si vous utilisez des clichés pour copier les PV, des conditions préalables supplémentaires s’appliquent :
- Le fournisseur de services en nuage doit prendre en charge les instantanés.
- Les PV doivent avoir le même fournisseur de cloud.
- Les PV doivent se trouver dans la même région géographique.
- Les PV doivent avoir la même classe de stockage.
11.3.2. Création d’une route de registre pour la migration directe d’images Copier lienLien copié sur presse-papiers!
Pour la migration directe d'images, vous devez créer une route vers le registre d'images OpenShift exposé sur tous les clusters distants.
Conditions préalables
Le registre d'images OpenShift doit être exposé au trafic externe sur tous les clusters distants.
Le registre OpenShift Container Platform 4 est exposé par défaut.
Le registre OpenShift Container Platform 3 doit être exposé manuellement.
Procédure
Pour créer une route vers un registre OpenShift Container Platform 3, exécutez la commande suivante :
oc create route passthrough --service=docker-registry -n default
$ oc create route passthrough --service=docker-registry -n defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pour créer une route vers un registre OpenShift Container Platform 4, exécutez la commande suivante :
oc create route passthrough --service=image-registry -n openshift-image-registry
$ oc create route passthrough --service=image-registry -n openshift-image-registryCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.3.3. Configuration du proxy Copier lienLien copié sur presse-papiers!
Dans le cas d’OpenShift Container Platform 4.1 et versions antérieures, vous devez configurer les proxies dans le manifeste de la ressource personnalisée (CR) MigrationController après avoir installé l’opérateur Migration Toolkit for Containers, car ces versions ne prennent pas en charge un objet proxy à l’échelle du cluster.
Pour OpenShift Container Platform 4.2 à 4.12, le Migration Toolkit for Containers (MTC) hérite des paramètres de proxy à l'échelle du cluster. Vous pouvez modifier les paramètres du proxy si vous souhaitez remplacer les paramètres du proxy à l'échelle du cluster.
11.3.3.1. Migration directe des volumes Copier lienLien copié sur presse-papiers!
La migration directe des volumes (DVM) a été introduite dans MTC 1.4.2. DVM ne prend en charge qu'un seul proxy. Le cluster source ne peut pas accéder à la route du cluster cible si ce dernier se trouve également derrière un proxy.
Si vous souhaitez effectuer un DVM à partir d'un cluster source situé derrière un proxy, vous devez configurer un proxy TCP qui fonctionne au niveau de la couche transport et transmet les connexions SSL de manière transparente sans les décrypter et les recrypter à l'aide de leurs propres certificats SSL. Un proxy Stunnel est un exemple de ce type de proxy.
11.3.3.1.1. Configuration du proxy TCP pour le DVM Copier lienLien copié sur presse-papiers!
Vous pouvez établir une connexion directe entre le cluster source et le cluster cible via un proxy TCP et configurer la variable stunnel_tcp_proxy dans le CR MigrationController pour utiliser le proxy :
La migration directe de volume (DVM) ne prend en charge que l'authentification de base pour le proxy. En outre, la DVM ne fonctionne que derrière des proxys qui peuvent tunneliser une connexion TCP de manière transparente. Les mandataires HTTP/HTTPS en mode man-in-the-middle ne fonctionnent pas. Les proxys existants à l'échelle du cluster peuvent ne pas prendre en charge ce comportement. Par conséquent, les paramètres du proxy pour DVM sont intentionnellement différents de la configuration habituelle du proxy dans MTC.
11.3.3.1.2. Pourquoi utiliser un proxy TCP plutôt qu'un proxy HTTP/HTTPS ? Copier lienLien copié sur presse-papiers!
Vous pouvez activer DVM en exécutant Rsync entre le cluster source et le cluster cible via une route OpenShift. Le trafic est chiffré à l'aide de Stunnel, un proxy TCP. Le Stunnel fonctionnant sur le cluster source initie une connexion TLS avec le Stunnel cible et transfère les données sur un canal crypté.
Les proxys HTTP/HTTPS à l'échelle du cluster dans OpenShift sont généralement configurés en mode man-in-the-middle où ils négocient leur propre session TLS avec les serveurs extérieurs. Cependant, cela ne fonctionne pas avec Stunnel. Stunnel exige que sa session TLS ne soit pas modifiée par le proxy, faisant essentiellement du proxy un tunnel transparent qui transmet simplement la connexion TCP telle quelle. Vous devez donc utiliser un proxy TCP.
11.3.3.1.3. Problème connu Copier lienLien copié sur presse-papiers!
La migration échoue avec l'erreur Upgrade request required
Le contrôleur de migration utilise le protocole SPDY pour exécuter des commandes dans des modules distants. Si le cluster distant se trouve derrière un proxy ou un pare-feu qui ne prend pas en charge le protocole SPDY, le contrôleur de migration ne parvient pas à exécuter les commandes à distance. La migration échoue avec le message d'erreur Upgrade request required. Solution : Utilisez un proxy qui prend en charge le protocole SPDY.
Outre la prise en charge du protocole SPDY, le proxy ou le pare-feu doit également transmettre l'en-tête HTTP Upgrade au serveur API. Le client utilise cet en-tête pour ouvrir une connexion websocket avec le serveur API. Si l'en-tête Upgrade est bloqué par le proxy ou le pare-feu, la migration échoue avec le message d'erreur Upgrade request required. Solution : Assurez-vous que le proxy transmet l'en-tête Upgrade.
11.3.3.2. Optimiser les politiques de réseau pour les migrations Copier lienLien copié sur presse-papiers!
OpenShift prend en charge la restriction du trafic vers ou depuis les pods à l'aide de NetworkPolicy ou EgressFirewalls en fonction du plugin réseau utilisé par le cluster. Si l'un des espaces de noms source impliqués dans une migration utilise de tels mécanismes pour restreindre le trafic réseau vers les pods, les restrictions peuvent par inadvertance arrêter le trafic vers les pods Rsync pendant la migration.
Les pods Rsync fonctionnant sur les clusters source et cible doivent se connecter l'un à l'autre via une route OpenShift. Les objets NetworkPolicy ou EgressNetworkPolicy existants peuvent être configurés pour exempter automatiquement les pods Rsync de ces restrictions de trafic.
11.3.3.2.1. Configuration de la politique de réseau Copier lienLien copié sur presse-papiers!
11.3.3.2.1.1. Trafic de sortie des pods Rsync Copier lienLien copié sur presse-papiers!
Vous pouvez utiliser les étiquettes uniques des modules Rsync pour autoriser le trafic sortant de ces modules si la configuration de NetworkPolicy dans les espaces de noms source ou destination bloque ce type de trafic. La stratégie suivante autorise le trafic de sortie all à partir des modules Rsync dans l'espace de noms :
11.3.3.2.1.2. Trafic entrant vers les pods Rsync Copier lienLien copié sur presse-papiers!
11.3.3.2.2. Configuration de la politique de réseau EgressNetworkPolicy Copier lienLien copié sur presse-papiers!
L'objet EgressNetworkPolicy ou Egress Firewalls sont des constructions OpenShift conçues pour bloquer le trafic de sortie du cluster.
Contrairement à l'objet NetworkPolicy, le pare-feu Egress fonctionne au niveau du projet car il s'applique à tous les modules de l'espace de noms. Par conséquent, les étiquettes uniques des pods Rsync n'exemptent pas uniquement les pods Rsync des restrictions. Cependant, vous pouvez ajouter les plages CIDR du cluster source ou cible à la règle Allow de la politique afin qu'une connexion directe puisse être établie entre deux clusters.
En fonction du cluster dans lequel le pare-feu de sortie est présent, vous pouvez ajouter la plage CIDR de l'autre cluster pour autoriser le trafic de sortie entre les deux :
11.3.3.2.3. Choix d'autres points d'arrivée pour le transfert de données Copier lienLien copié sur presse-papiers!
Par défaut, DVM utilise une route OpenShift Container Platform comme point final pour transférer les données PV vers les clusters de destination. Vous pouvez choisir un autre type de point d'extrémité pris en charge, si les topologies de cluster le permettent.
Pour chaque cluster, vous pouvez configurer un point de terminaison en définissant la variable rsync_endpoint_type sur le cluster destination approprié dans votre MigrationController CR :
11.3.3.2.4. Configuration de groupes supplémentaires pour les pods Rsync Copier lienLien copié sur presse-papiers!
Lorsque vos PVC utilisent un stockage partagé, vous pouvez configurer l'accès à ce stockage en ajoutant des groupes supplémentaires aux définitions de pods Rsync afin que les pods autorisent l'accès :
| Variable | Type | Défaut | Description |
|---|---|---|---|
|
| chaîne de caractères | Non défini | Liste séparée par des virgules des groupes supplémentaires pour les pods Rsync source |
|
| chaîne de caractères | Non défini | Liste de groupes supplémentaires séparés par des virgules pour les pods Rsync cibles |
Exemple d'utilisation
Le CR MigrationController peut être mis à jour pour définir les valeurs de ces groupes supplémentaires :
spec: src_supplemental_groups: "1000,2000" target_supplemental_groups: "2000,3000"
spec:
src_supplemental_groups: "1000,2000"
target_supplemental_groups: "2000,3000"
11.3.3.3. Configuration des proxies Copier lienLien copié sur presse-papiers!
Conditions préalables
-
Vous devez être connecté en tant qu’utilisateur avec les privilèges
cluster-adminsur tous les clusters.
Procédure
Procurez-vous le manifeste du CR
MigrationController:oc get migrationcontroller <migration_controller> -n openshift-migration
$ oc get migrationcontroller <migration_controller> -n openshift-migrationCopy to Clipboard Copied! Toggle word wrap Toggle overflow Mettez à jour les paramètres du proxy :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Faites précéder un domaine du signe
.pour ne faire correspondre que les sous-domaines. Par exemple,.y.comcorrespond àx.y.com, mais pas ày.com. Utilisez*pour ignorer le proxy pour toutes les destinations. Si vous mettez à l’échelle des workers qui ne sont pas inclus dans le réseau défini par le champnetworking.machineNetwork[].cidrà partir de la configuration d’installation, vous devez les ajouter à cette liste pour éviter les problèmes de connexion.Ce champ est ignoré si ni le champ
httpProxyni le champhttpsProxyne sont définis.-
Enregistrez le manifeste en tant que
migration-controller.yaml. Appliquez le manifeste mis à jour :
oc replace -f migration-controller.yaml -n openshift-migration
$ oc replace -f migration-controller.yaml -n openshift-migrationCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.3.4. Migration d’une application à l’aide de l’API MTC Copier lienLien copié sur presse-papiers!
Vous pouvez migrer une application à partir de la ligne de commande en utilisant l’API Migration Toolkit for Containers (MTC).
Procédure
Créez un manifeste de CR
MigClusterpour le cluster hôte :Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créez un manifeste d’objets
Secretpour chaque cluster distant :Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Indiquez le token de compte de service (SA)
migration-controllercodé en base64 du cluster distant. Vous pouvez obtenir le token en exécutant la commande suivante :
oc sa get-token migration-controller -n openshift-migration | base64 -w 0
$ oc sa get-token migration-controller -n openshift-migration | base64 -w 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créez un manifeste de CR
MigClusterpour chaque cluster distant :Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Indiquez la ressource personnalisée
Clusterdu cluster distant. - 2
- Facultatif : pour la migration directe d’images, indiquez la route de registre exposée.
- 3
- La vérification SSL est activée si la valeur est définie sur
false. Les certificats CA ne sont pas requis ni vérifiés si la valeur est définie surtrue. - 4
- Indiquez l’objet
Secretdu cluster distant. - 5
- Indiquez l’URL du cluster distant.
Vérifiez que tous les clusters sont dans l’état
Ready:oc describe cluster <cluster>
$ oc describe cluster <cluster>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créez un manifeste d’objets
Secretpour le référentiel de réplication :Copy to Clipboard Copied! Toggle word wrap Toggle overflow Les informations d’identification AWS sont codées en base64 par défaut. Pour les autres fournisseurs de stockage, vous devez coder vos informations d’identification en exécutant la commande suivante avec chaque clé :
echo -n "<key>" | base64 -w 0
$ echo -n "<key>" | base64 -w 01 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Indiquez l’ID de la clé ou la clé secrète. Les deux clés doivent être codées en base64.
Créez un manifeste de CR
MigStoragepour le référentiel de réplication :Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Indiquez le nom du compartiment.
- 2
- Indiquez la ressource personnalisée
Secretsdu stockage d’objets. Vous devez vous assurer que les informations d’identification stockées dans la ressource personnaliséeSecretsdu stockage d’objets sont correctes. - 3
- Indiquez le fournisseur de stockage.
- 4
- Facultatif : si vous copiez des données en utilisant des clichés, indiquez la ressource personnalisée
Secretsdu stockage d’objets. Vous devez vous assurer que les informations d’identification stockées dans la ressource personnaliséeSecretsdu stockage d’objets sont correctes. - 5
- Facultatif : si vous copiez des données en utilisant des clichés, indiquez le fournisseur de stockage.
Vérifiez que la ressource personnalisée
MigStoragese trouve dans l’étatReady:oc describe migstorage <migstorage>
$ oc describe migstorage <migstorage>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créez un manifeste de CR
MigPlan:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- La migration directe des images est activée si la valeur est définie sur
false. - 2
- La migration directe des volumes est activée si la valeur est définie sur
false. - 3
- Indiquez le nom de l’instance CR
MigStorage. - 4
- Indiquez un ou plusieurs espaces de nommage sources. Par défaut, l’espace de nommage de destination porte le même nom.
- 5
- Indiquez un espace de nommage de destination s’il est différent de l’espace de nommage source.
- 6
- Indiquez le nom de l’instance
MigClusterdu cluster source.
Vérifiez que l’instance
MigPlanse trouve dans l’étatReady:oc describe migplan <migplan> -n openshift-migration
$ oc describe migplan <migplan> -n openshift-migrationCopy to Clipboard Copied! Toggle word wrap Toggle overflow Créez un manifeste de CR
MigMigrationpour lancer la migration définie dans l’instanceMigPlan:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Indiquez le nom de la ressource personnalisée
MigPlan. - 2
- Les pods sur le cluster source sont arrêtés avant la migration si la valeur est définie sur
true. - 3
- Une migration par étapes, qui copie la plupart des données sans arrêter l’application, est effectuée si la valeur est définie sur
true. - 4
- Une migration terminée est annulée si la valeur est définie sur
true.
Vérifiez la migration en observant la progression de la ressource personnalisée
MigMigration:oc watch migmigration <migmigration> -n openshift-migration
$ oc watch migmigration <migmigration> -n openshift-migrationCopy to Clipboard Copied! Toggle word wrap Toggle overflow La sortie se présente comme suit :
Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.3.5. Migration d’état Copier lienLien copié sur presse-papiers!
Vous pouvez effectuer des migrations répétables, uniquement d'état, en utilisant Migration Toolkit for Containers (MTC) pour migrer les réclamations de volumes persistants (PVC) qui constituent l'état d'une application. Vous migrez des PVC spécifiés en excluant d'autres PVC du plan de migration. Vous pouvez mapper les PVC pour vous assurer que les PVC source et cible sont synchronisés. Les données des volumes persistants (PV) sont copiées sur le cluster cible. Les références PV ne sont pas déplacées et les pods d'application continuent de fonctionner sur le cluster source.
La migration d'état est spécifiquement conçue pour être utilisée en conjonction avec des mécanismes de CD externes, tels que OpenShift Gitops. Vous pouvez migrer les manifestes d'application à l'aide de GitOps tout en migrant l'état à l'aide de MTC.
Si vous disposez d’un pipeline CI/CD, vous pouvez migrer les composants sans état en les déployant sur le cluster cible. Ensuite, vous pouvez migrer les composants avec état en utilisant MTC.
Vous pouvez effectuer une migration d’état entre des clusters ou au sein d’un même cluster.
La migration d’état ne fait migrer que les composants qui constituent l’état d’une application. Si vous souhaitez migrer un espace de nommage complet, utilisez la migration par étapes ou à basculement.
Conditions préalables
-
L'état de l'application sur le cluster source est conservé dans
PersistentVolumesprovisionné viaPersistentVolumeClaims. - Les manifestes de l'application sont disponibles dans un référentiel central accessible à partir des clusters source et cible.
Procédure
Migrer les données des volumes persistants du cluster source vers le cluster cible.
Vous pouvez effectuer cette étape autant de fois que nécessaire. L'application source continue de fonctionner.
Mettre en pause l'application source.
Vous pouvez le faire en définissant les répliques des ressources de charge de travail à
0, soit directement sur le cluster source, soit en mettant à jour les manifestes dans GitHub et en resynchronisant l'application Argo CD.Cloner les manifestes de l'application sur le cluster cible.
Vous pouvez utiliser Argo CD pour cloner les manifestes d'application sur le cluster cible.
Migrer les données de volume restantes de la source vers le cluster cible.
Migrer toutes les nouvelles données créées par l'application au cours du processus de migration des états en effectuant une migration finale des données.
- Si l'application clonée est en état d'arrêt, il faut l'arrêter.
- Basculer l'enregistrement DNS vers le cluster cible pour rediriger le trafic utilisateur vers l'application migrée.
MTC 1.6 ne peut pas mettre les applications en veille automatiquement lors de la migration des états. Il ne peut migrer que les données PV. Par conséquent, vous devez utiliser vos mécanismes CD pour la mise en veille ou l'arrêt des applications.
MTC 1.7 introduit les flux explicites Stage et Cutover. Vous pouvez utiliser la mise en scène pour effectuer des transferts de données initiaux autant de fois que nécessaire. Vous pouvez ensuite procéder à un basculement, au cours duquel les applications sources sont mises en veille automatiquement.
Conditions préalables
-
L'état de l'application sur le cluster source est conservé dans
PersistentVolumesprovisionné viaPersistentVolumeClaims. - Les manifestes de l'application sont disponibles dans un référentiel central accessible à partir des clusters source et cible.
Procédure
Migrer les données des volumes persistants du cluster source vers le cluster cible.
Vous pouvez effectuer cette étape autant de fois que nécessaire. L'application source continue de fonctionner.
Mettre en pause l'application source.
Vous pouvez le faire en définissant les répliques des ressources de charge de travail à
0, soit directement sur le cluster source, soit en mettant à jour les manifestes dans GitHub et en resynchronisant l'application Argo CD.Cloner les manifestes de l'application sur le cluster cible.
Vous pouvez utiliser Argo CD pour cloner les manifestes d'application sur le cluster cible.
Migrer les données de volume restantes de la source vers le cluster cible.
Migrer toutes les nouvelles données créées par l'application au cours du processus de migration des états en effectuant une migration finale des données.
- Si l'application clonée est en état d'arrêt, il faut l'arrêter.
- Basculer l'enregistrement DNS vers le cluster cible pour rediriger le trafic utilisateur vers l'application migrée.
MTC 1.6 ne peut pas mettre les applications en veille automatiquement lors de la migration des états. Il ne peut migrer que les données PV. Par conséquent, vous devez utiliser vos mécanismes CD pour la mise en veille ou l'arrêt des applications.
MTC 1.7 introduit les flux explicites Stage et Cutover. Vous pouvez utiliser la mise en scène pour effectuer des transferts de données initiaux autant de fois que nécessaire. Vous pouvez ensuite procéder à un basculement, au cours duquel les applications sources sont mises en veille automatiquement.
Ressources supplémentaires
- Voir Exclure des PVC de la migration pour sélectionner des PVC pour la migration d'état.
- Voir Mappage des PVC pour migrer les données PV source vers des PVC provisionnés sur le cluster de destination.
- Voir Migrer les objets Kubernetes pour migrer les objets Kubernetes qui constituent l'état d'une application.