3.4.3. コマンドラインでのアプリケーションの移行
MTC カスタムリソース (CR) を使用して、コマンドラインでアプリケーションを移行できます。
アプリケーションをローカルクラスターからリモートクラスター、リモートクラスターからローカルクラスター、およびリモートクラスター間で移行できます。
MTC の用語
クラスターの設定に関連して、以下の用語が使用されます。
host
クラスター:-
migration-controller
Pod はhost
クラスターで実行されます。 -
host
クラスターでは、直接のイメージ移行に公開されたセキュアなレジストリールートは不要です。
-
-
ローカルクラスター: ローカルクラスターは
host
クラスターと同じである場合が多くありますが、これは必須ではありません。 リモートクラスター:
- リモートクラスターには、直接のイメージ移行に公開されるセキュアなレジストリールートが必要です。
-
リモートクラスターには、
migration-controller
サービスアカウントトークンが含まれるSecret
CR が必要です。
移行の実行に関連して、以下の用語が使用されます。
- ソースクラスター: アプリケーションの移行元となるクラスター。
- 宛先クラスター: アプリケーションが移行されるクラスター。
3.4.3.1. MTC (Migration Toolkit for Containers) を使用したアプリケーションの移行
MTC (Migration Toolkit for Containers) API を使用してコマンドラインでアプリケーションを移行できます。
アプリケーションをローカルクラスターからリモートクラスター、リモートクラスターからローカルクラスター、およびリモートクラスター間で移行できます。
この手順では、間接的および直接的な移行を実行する方法を説明します。
- 間接的な移行: イメージ、ボリューム、および Kubernetes オブジェクトはソースクラスターからレプリケーションリポジトリーにコピーされ、その後にレプリケーションリポジトリーから宛先クラスターにコピーされます。
- 直接的な移行: イメージまたはボリュームはソースクラスターから宛先クラスターに直接コピーされます。イメージとボリュームの直接的な移行には、パフォーマンス上の大きなメリットがあります。
以下のカスタムリソース (CR) を作成して移行を実行します。
MigCluster
CR:host
、ローカル、またはリモートクラスターを定義します。migration-controller
Pod はhost
クラスターで実行されます。-
Secret
CR: リモートクラスターまたはストレージの認証情報が含まれます。 MigStorage
CR: レプリケーションリポジトリーを定義します。異なるストレージプロバイダーには、
MigStorage
CR マニフェストで異なるパラメーターが必要です。-
MigPlan
CR: 移行計画を定義します。 MigMigration
CR: 関連付けられたMigPlan
で定義された移行を実行します。以下の目的で、単一の
MigPlan
CR に複数のMigMigration
CR を作成できます。- 移行を実行する前に、アプリケーションを停止せずにほとんどのデータをコピーする段階移行 (Stage migration) を実行する。段階移行により、移行のパフォーマンスが向上します。
- 実行中の移行を取り消す。
- 完了した移行をロールバックする
前提条件
-
すべてのクラスターで
cluster-admin
権限が必要です。 -
OpenShift Container Platform CLI (
oc
) をインストールする必要があります。 - すべてのクラスターに MTC (Migration Toolkit for Containers Operator) をインストールする必要があります。
- インストールされた MTC (Migration Toolkit for Containers Operator) の version は、すべてのクラスターで同一である必要があります。
- オブジェクトストレージをレプリケーションリポジトリーとして設定する必要があります。
- イメージの直接的な移行を実行している場合、すべてのリモートクラスターでセキュアなレジストリールートを公開する必要があります。
- ボリュームの直接移行を使用している場合、ソースクラスターには HTTP プロキシーを設定することはできません。
手順
host-cluster.yaml
というhost
クラスターのMigCluster
CR マニフェストを作成します。apiVersion: migration.openshift.io/v1alpha1 kind: MigCluster metadata: name: host namespace: openshift-migration spec: isHostCluster: true
host
クラスターのMigCluster
CR を作成します。$ oc create -f host-cluster.yaml -n openshift-migration
各リモートクラスターに、
cluster-secret.yaml
というSecret
CR マニフェストを作成します。apiVersion: v1 kind: Secret metadata: name: <cluster_secret> namespace: openshift-config type: Opaque data: saToken: <sa_token> 1
- 1
- リモートクラスターの base64 でエンコードされた
migration-controller
サービスアカウント (SA) トークンを指定します。
以下のコマンドを実行して SA トークンを取得できます。
$ oc sa get-token migration-controller -n openshift-migration | base64 -w 0
それぞれのリモートクラスターに
Secret
CR を作成します。$ oc create -f cluster-secret.yaml
それぞれのリモートクラスターに、
remote-cluster.yaml
というMigCluster
CR マニフェストを作成します。apiVersion: migration.openshift.io/v1alpha1 kind: MigCluster metadata: name: <remote_cluster> namespace: openshift-migration spec: exposedRegistryPath: <exposed_registry_route> 1 insecure: false 2 isHostCluster: false serviceAccountSecretRef: name: <remote_cluster_secret> 3 namespace: openshift-config url: <remote_cluster_url> 4
それぞれのリモートクラスターについて
MigCluster
CR を作成します。$ oc create -f remote-cluster.yaml -n openshift-migration
すべてのクラスターが
Ready
状態にあることを確認します。$ oc describe cluster <cluster_name>
storage-secret.yaml
というレプリケーションリポジトリーのSecret
CR マニフェストを作成します。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
AWS 認証情報はデフォルトで base64 でエンコードされます。別のストレージプロバイダーを使用している場合、それぞれのキーを使用して以下のコマンドを実行して、認証情報をエンコードする必要があります。
$ echo -n "<key>" | base64 -w 0 1
- 1
- キー ID またはシークレットキーを指定します。どちらの値も base64 でエンコードする必要があります。
レプリケーションリポジトリーの
Secret
CR を作成します。$ oc create -f storage-secret.yaml
migstorage.yaml
というレプリケーションリポジトリーのMigStorage
CR マニフェストを作成します。apiVersion: migration.openshift.io/v1alpha1 kind: MigStorage metadata: name: <storage_name> namespace: openshift-migration spec: backupStorageConfig: awsBucketName: <bucket_name> 1 credsSecretRef: name: <storage_secret_ref> 2 namespace: openshift-config backupStorageProvider: <storage_provider_name> 3 volumeSnapshotConfig: credsSecretRef: name: <storage_secret_ref> 4 namespace: openshift-config volumeSnapshotProvider: <storage_provider_name> 5
MigStorage
CR を作成します。$ oc create -f migstorage.yaml -n openshift-migration
MigStorage
CR がReady
状態にあることを確認します。$ oc describe migstorage <migstorage_name>
migplan.yaml
というMigPlan
CR マニフェストを作成します。apiVersion: migration.openshift.io/v1alpha1 kind: MigPlan metadata: name: <migration_plan> namespace: openshift-migration spec: destMigClusterRef: name: host namespace: openshift-migration indirectImageMigration: true 1 indirectVolumeMigration: true 2 migStorageRef: name: <migstorage_ref> 3 namespace: openshift-migration namespaces: - <application_namespace> 4 srcMigClusterRef: name: <remote_cluster_ref> 5 namespace: openshift-migration
MigPlan
CR を作成します。$ oc create -f migplan.yaml -n openshift-migration
MigPlan
インスタンスを表示し、そのインスタンスがReady
状態にあることを確認します。$ oc describe migplan <migplan_name> -n openshift-migration
migmigration.yaml
というMigMigration
CR マニフェストを作成します。apiVersion: migration.openshift.io/v1alpha1 kind: MigMigration metadata: name: <migmigration_name> namespace: openshift-migration spec: migPlanRef: name: <migplan_name> 1 namespace: openshift-migration quiescePods: true 2 stage: false 3 rollback: false 4
MigMigration
CR を作成し、MigPlan
CR に定義された移行を開始します。$ oc create -f migmigration.yaml -n openshift-migration
MigMigration
CR を監視して移行の進捗を確認します。$ oc watch migmigration <migmigration_name> -n openshift-migration
出力は以下のようになります。
出力例
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: my_application 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