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 プロキシーを設定することはできません。

手順

  1. host-cluster.yaml という host クラスターの MigCluster CR マニフェストを作成します。

    apiVersion: migration.openshift.io/v1alpha1
    kind: MigCluster
    metadata:
      name: host
      namespace: openshift-migration
    spec:
      isHostCluster: true
  2. host クラスターの MigCluster CR を作成します。

    $ oc create -f host-cluster.yaml -n openshift-migration
  3. 各リモートクラスターに、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
  4. それぞれのリモートクラスターに Secret CR を作成します。

    $ oc create -f cluster-secret.yaml
  5. それぞれのリモートクラスターに、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
    1
    オプション: 直接的なイメージの移行を実行する場合、公開されるレジストリールートを指定します (例: docker-registry-default.apps.example.com)。
    2
    SSL 検証は、false の場合に有効になります。CA 証明書は、true の場合は必要ではなく、チェックされません。
    3
    リモートクラスターの Secret CR を指定します。
    4
    リモートクラスターの URL を指定します。
  6. それぞれのリモートクラスターについて MigCluster CR を作成します。

    $ oc create -f remote-cluster.yaml -n openshift-migration
  7. すべてのクラスターが Ready 状態にあることを確認します。

    $ oc describe cluster <cluster_name>
  8. 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
    1
    キー ID を base64 形式で指定します。
    2
    シークレットキーを base64 形式で指定します。

    AWS 認証情報はデフォルトで base64 でエンコードされます。別のストレージプロバイダーを使用している場合、それぞれのキーを使用して以下のコマンドを実行して、認証情報をエンコードする必要があります。

    $ echo -n "<key>" | base64 -w 0 1
    1
    キー ID またはシークレットキーを指定します。どちらの値も base64 でエンコードする必要があります。
  9. レプリケーションリポジトリーの Secret CR を作成します。

    $ oc create -f storage-secret.yaml
  10. 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
    1
    バケット名を指定します。
    2
    オブジェクトストレージの Secrets CR を指定します。オブジェクトストレージの Secrets CR に保存される認証情報が正しいことを確認する必要があります。
    3
    ストレージプロバイダーを指定します。
    4
    オプション: スナップショットを使用してデータをコピーする場合は、オブジェクトストレージの Secrets CR を指定します。オブジェクトストレージの Secrets CR に保存される認証情報が正しいことを確認する必要があります。
    5
    オプション: スナップショットを使用してデータをコピーする場合は、ストレージプロバイダーを指定します。
  11. MigStorage CR を作成します。

    $ oc create -f migstorage.yaml -n openshift-migration
  12. MigStorage CR が Ready 状態にあることを確認します。

    $ oc describe migstorage <migstorage_name>
  13. 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
    1
    false の場合、直接的なイメージ移行が有効にされます。
    2
    false の場合、直接的なボリューム移行が有効にされます。
    3
    MigStorage CR インスタンスの名前を指定します。
    4
    移行する namespace を 1 つ以上指定します。
    5
    ソースクラスター MigCluster インスタンスの名前を指定します。
  14. MigPlan CR を作成します。

    $ oc create -f migplan.yaml -n openshift-migration
  15. MigPlan インスタンスを表示し、そのインスタンスが Ready 状態にあることを確認します。

    $ oc describe migplan <migplan_name> -n openshift-migration
  16. 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
    1
    MigPlan CR 名を指定します。
    2
    true の場合、ソースクラスターの Pod は停止します。
    3
    true の場合、アプリケーションを停止せずにほとんどのデータをコピーする段階移行が実行されます。
    4
    true の場合、完了した移行がロールバックされます。
  17. MigMigration CR を作成し、MigPlan CR に定義された移行を開始します。

    $ oc create -f migmigration.yaml -n openshift-migration
  18. 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