11.2.4. Eseguire la migrazione di un'applicazione tramite l'API MTC
È possibile eseguire la migrazione di un'applicazione dalla riga di comando tramite l'API Migration Toolkit for Containers (MTC).
Procedura
Creare il manifest della risorsa personalizzata
MigCluster
per il cluster host:$ cat << EOF | oc apply -f - apiVersion: migration.openshift.io/v1alpha1 kind: MigCluster metadata: name: <host_cluster> namespace: openshift-migration spec: isHostCluster: true EOF
Creare il manifest dell'oggetto
Secret
per ogni cluster remoto:$ cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: <cluster_secret> namespace: openshift-config type: Opaque data: saToken: <sa_token> 1 EOF
- 1
- Specificare il token dell'account di servizio (SA)
migration-controller
con codifica base64 del cluster remoto. È possibile ottenere il token eseguendo il seguente comando:
$ oc sa get-token migration-controller -n openshift-migration | base64 -w 0
Creare il manifest della risorsa personalizzata
MigCluster
per ogni cluster remoto:$ cat << EOF | oc apply -f - apiVersion: migration.openshift.io/v1alpha1 kind: MigCluster metadata: name: <remote_cluster> 1 namespace: openshift-migration spec: exposedRegistryPath: <exposed_registry_route> 2 insecure: false 3 isHostCluster: false serviceAccountSecretRef: name: <remote_cluster_secret> 4 namespace: openshift-config url: <remote_cluster_url> 5 EOF
- 1
- Specificare la risorsa personalizzata
Cluster
del cluster remoto. - 2
- Facoltativo: per la migrazione diretta delle immagini, specificare il percorso del registro esposto.
- 3
- La verifica SSL è abilitata se
false
. I certificati CA non sono richiesti o controllati setrue
. - 4
- Specificare l'oggetto
Secret
del cluster remoto. - 5
- Specificare l'URL del cluster remoto.
Verificare che tutti i cluster siano nello stato
Ready
:$ oc describe cluster <cluster>
Creare il manifest dell'oggetto
Secret
per il repository di replica:$ cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: namespace: openshift-config name: <migstorage_creds> type: Opaque data: aws-access-key-id: <key_id_base64> 1 aws-secret-access-key: <secret_key_base64> 2 EOF
Le credenziali di AWS sono con codifica base64 per impostazione predefinita. Per gli altri provider di storage, è necessario codificare le proprie credenziali eseguendo il seguente comando con ogni chiave:
$ echo -n "<key>" | base64 -w 0 1
- 1
- Specificare l'ID della chiave o la chiave segreta. Entrambe le chiavi devono essere con codifica base64.
Creare il manifest della risorsa personalizzata
MigStorage
per il repository di replica:$ cat << EOF | oc apply -f - apiVersion: migration.openshift.io/v1alpha1 kind: MigStorage metadata: name: <migstorage> namespace: openshift-migration spec: backupStorageConfig: awsBucketName: <bucket> 1 credsSecretRef: name: <storage_secret> 2 namespace: openshift-config backupStorageProvider: <storage_provider> 3 volumeSnapshotConfig: credsSecretRef: name: <storage_secret> 4 namespace: openshift-config volumeSnapshotProvider: <storage_provider> 5 EOF
- 1
- Specificare il nome del bucket.
- 2
- Specificare la risorsa personalizzata
Secrets
dello storage a oggetti. È necessario assicurarsi che le credenziali memorizzate nella risorsa personalizzataSecrets
dello storage a oggetti siano corrette. - 3
- Specificare il provider di storage.
- 4
- Facoltativo: se si copiano i dati usando gli snapshot, specificare la risorsa personalizzata
Secrets
dello storage a oggetti. È necessario assicurarsi che le credenziali memorizzate nella risorsa personalizzataSecrets
dello storage a oggetti siano corrette. - 5
- Facoltativo: se si copiano i dati usando gli snapshot, specificare il provider di storage.
Verificare che la risorsa personalizzata
MigStorage
sia nello statoReady
:$ oc describe migstorage <migstorage>
Creare il manifest della risorsa personalizzata
MigPlan
:$ cat << EOF | oc apply -f - apiVersion: migration.openshift.io/v1alpha1 kind: MigPlan metadata: name: <migplan> namespace: openshift-migration spec: destMigClusterRef: name: <host_cluster> namespace: openshift-migration indirectImageMigration: true 1 indirectVolumeMigration: true 2 migStorageRef: name: <migstorage> 3 namespace: openshift-migration namespaces: - <source_namespace_1> 4 - <source_namespace_2> - <source_namespace_3>:<destination_namespace> 5 srcMigClusterRef: name: <remote_cluster> 6 namespace: openshift-migration EOF
- 1
- La migrazione diretta delle immagini è abilitata se
false
. - 2
- La migrazione diretta dei volumi è abilitata se
false
. - 3
- Specificare il nome dell'istanza della risorsa personalizzata
MigStorage
. - 4
- Specificare uno o più spazi dei nomi di origine. Per impostazione predefinita, lo spazio dei nomi di destinazione ha lo stesso nome.
- 5
- Specificare uno spazio dei nomi di destinazione se è diverso dallo spazio dei nomi di origine.
- 6
- Specificare il nome dell'istanza
MigCluster
del cluster di origine.
Verificare che l'istanza
MigPlan
sia nello statoReady
:$ oc describe migplan <migplan> -n openshift-migration
Creare il manifest della risorsa personalizzata
MigMigration
per avviare la migrazione definita nell'istanzaMigPlan
:$ cat << EOF | oc apply -f - apiVersion: migration.openshift.io/v1alpha1 kind: MigMigration metadata: name: <migmigration> namespace: openshift-migration spec: migPlanRef: name: <migplan> 1 namespace: openshift-migration quiescePods: true 2 stage: false 3 rollback: false 4 EOF
- 1
- Specificare il nome della risorsa personalizzata
MigPlan
. - 2
- I pod sul cluster di origine vengono fermati prima della migrazione, se
true
. - 3
- Una migrazione di fase, che copia la maggior parte dei dati senza fermare l'applicazione, viene eseguita se
true
. - 4
- Se
true
, una migrazione completata viene annullata.
Verificare la migrazione guardando il progresso della risorsa personalizzata
MigMigration
:$ oc watch migmigration <migmigration> -n openshift-migration
L'output assomiglia al seguente:
Esempio di output
Name: c8b034c0-6567-11eb-9a4f-0bc004db0fbc Namespace: openshift-migration Labels: migration.openshift.io/migplan-name=django Annotations: openshift.io/touch: e99f9083-6567-11eb-8420-0a580a81020c API Version: migration.openshift.io/v1alpha1 Kind: MigMigration ... Spec: Mig Plan Ref: Name: migplan Namespace: openshift-migration Stage: false Status: Conditions: Category: Advisory Last Transition Time: 2021-02-02T15:04:09Z Message: Step: 19/47 Reason: InitialBackupCreated Status: True Type: Running Category: Required Last Transition Time: 2021-02-02T15:03:19Z Message: The migration is ready. Status: True Type: Ready Category: Required Durable: true Last Transition Time: 2021-02-02T15:04:05Z Message: The migration registries are healthy. Status: True Type: RegistriesHealthy Itinerary: Final Observed Digest: 7fae9d21f15979c71ddc7dd075cb97061895caac5b936d92fae967019ab616d5 Phase: InitialBackupCreated Pipeline: Completed: 2021-02-02T15:04:07Z Message: Completed Name: Prepare Started: 2021-02-02T15:03:18Z Message: Waiting for initial Velero backup to complete. Name: Backup Phase: InitialBackupCreated Progress: Backup openshift-migration/c8b034c0-6567-11eb-9a4f-0bc004db0fbc-wpc44: 0 out of estimated total of 0 objects backed up (5s) Started: 2021-02-02T15:04:07Z Message: Not started Name: StageBackup Message: Not started Name: StageRestore Message: Not started Name: DirectImage Message: Not started Name: DirectVolume Message: Not started Name: Restore Message: Not started Name: Cleanup Start Timestamp: 2021-02-02T15:03:18Z Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Running 57s migmigration_controller Step: 2/47 Normal Running 57s migmigration_controller Step: 3/47 Normal Running 57s (x3 over 57s) migmigration_controller Step: 4/47 Normal Running 54s migmigration_controller Step: 5/47 Normal Running 54s migmigration_controller Step: 6/47 Normal Running 52s (x2 over 53s) migmigration_controller Step: 7/47 Normal Running 51s (x2 over 51s) migmigration_controller Step: 8/47 Normal Ready 50s (x12 over 57s) migmigration_controller The migration is ready. Normal Running 50s migmigration_controller Step: 9/47 Normal Running 50s migmigration_controller Step: 10/47