第2章 OpenShift Container Platform 4.1 からの移行

2.1. 移行ツールおよび前提条件

アプリケーションワークロードを、MTC (Migration Toolkit for Containers) を使用して OpenShift Container Platform 4.1 から 4.5 に移行できます。MTC を使用すると、移行を制御し、アプリケーションのダウンタイムを最小限に抑えることができます。

注記

ソースおよびターゲットクラスターが正しく設定されている場合、同じバージョンの OpenShift Container Platform クラスター間で移行できます (4.1 から 4.1 への移行など)。

Kubernetes カスタムリソースをベースとする MTC の Web コンソールおよび API により、namespace の粒度でステートフルおよびステートレスのアプリケーションワークロードを移行できます。

MTC は、ソースクラスターからターゲットクラスターにデータを移行するために、ファイルシステムおよびスナップショットによるデータのコピー方法をサポートします。ご使用の環境に適した方法で、ストレージプロバイダーでサポートされる方法を選択できます。

移行フックを使用して、移行中の特定の時点で Ansible Playbook を実行できます。フックは移行計画の作成時に追加されます。

2.1.1. MTC (Migration Toolkit for Containers) ワークフロー

MTC (Migration Toolkit for Containers) ツールを使用すると、MTC Web コンソールまたは Kubernetes API を使用して Kubernetes リソース、永続ボリュームデータ、および内部コンテナーイメージを OpenShift Container Platform ソースクラスターから OpenShift Container Platform 4.5 ターゲットクラスターに移行できます。

(MTC) は以下のリソースを移行します。

  • 移行計画に指定される namespace。
  • namespace スコープのリソース: MTC が namespace を移行する場合、サービスや Pod などのその namespace に関連付けられるすべてのオブジェクトおよびリソースを移行します。さらに、namespace に存在するものの、クラスターレベルに存在しないリソースがクラスターレベルに存在するリソースに依存する場合、MTC は両方のリソースを移行します。

    たとえば、SCC (Security Context Constraints) はクラスターレベルに存在するリソースであり、サービスアカウント (SA) は namespace レベルに存在するリソースです。SA が MTC が移行する namespace に存在する場合、MTC は SA にリンクされている SCC を自動的に識別し、それらの SCC も移行します。同様に、MTC は namespace の永続ボリュームにリンクされた永続ボリューム要求 (PVC)を移行します。

  • カスタムリソース定義 (CRD) およびカスタムリソース定義 (CRD): MTC は、namespace レベルに存在する CR およびそれらの CR にリンクされた CRB を自動的に移行します。

MTC Web コンソールを使用してアプリケーションを移行するには、以下の手順が必要です。

  1. すべてのクラスターに MTC (Migration Toolkit for Containers Operator) をインストールします。

    インターネットアクセスが制限されているか、またはインターネットアクセスのない制限された環境で Migration Toolkit for Containers Operator をインストールできます。ソースおよびターゲットクラスターは、相互に対するネットワークアクセスおよびミラーレジストリーへのネットワークアクセスがなければなりません。

  2. MTC がデータ移行に使用する中間オブジェクトストレージであるレプリケーションリポジトリーを設定します。

    ソースおよびターゲットクラスターには、移行時にレプリケーションリポジトリーへのネットワークアクセスがなければなりません。制限された環境では、内部でホストされる S3 ストレージリポジトリーを使用できます。プロキシーサーバーを使用している場合は、レプリケーションリポジトリーとクラスター間のネットワークトラフィックを許可するように設定する必要があります。

  3. ソースクラスターを MTC の Web コンソールに追加します。
  4. レプリケーションリポジトリーを MTC の Web コンソールに追加します。
  5. 以下のデータ移行オプションのいずれかを使用して、移行計画を作成します。

    • Copy: MTC は、データをソースクラスターからレプリケーションリポジトリーにコピーし、レプリケーションリポジトリーからターゲットクラスターにコピーします。

      注記

      イメージの直接移行またはボリュームの直接移行を使用している場合、イメージまたはボリュームはソースクラスターからターゲットクラスターに直接コピーされます。

      PV コピーの移行
    • Move: MTC は、ソースクラスターからリモートボリューム (例: NFS) をアンマウントし、リモートボリュームをポイントするターゲットクラスターで PV リソースを作成し、その後にリモートボリュームをターゲットクラスターにマウントします。ターゲットクラスターで実行されているアプリケーションは、ソースクラスターが使用していたものと同じリモートボリュームを使用します。リモートボリュームは、ソースクラスターおよびターゲットクラスターからアクセスできる必要があります。

      注記

      レプリケーションリポジトリーはこの図には表示されていませんが、これは移行に必要です。

      移行 PV の移動
  6. 以下のオプションのいずれかを使用して、移行計画を実行します。

    • Stage (オプション) は、アプリケーションを停止せずにデータをターゲットクラスターにコピーします。

      ステージングは、移行前にほとんどのデータがターゲットにコピーされるように複数回実行することができます。これにより、移行時間やアプリケーションのダウンタイムが最小限に抑えられます。

    • Migrate は、ソースクラスターでアプリケーションを停止し、ターゲットクラスターでそのリソースを再作成します。オプションで、アプリケーションを停止せずにワークロードを移行できます。
OCP 3 から 4 のアプリケーション移行

2.1.2. MTC (Migration Toolkit for Containers) カスタムリソース

MTC (Migration Toolkit for Containers) は以下のカスタムリソース (CR) を作成します。

移行アーキテクチャーの図

20 MigCluster (設定、MTC クラスター): クラスター定義

20 MigStorage (設定、MTC クラスター): ストレージ定義

20 MigPlan (設定、MTC クラスター): 移行計画

MigPlan CR は、移行されるソースおよびターゲットクラスター、レプリケーションリポジトリー、および namespace を記述します。これは 0、1 または多数の MigMigration CR に関連付けられます。

注記

MigPlan CR を削除すると、関連付けられた MigMigration CR が削除されます。

20 BackupStorageLocation (設定、MTC クラスター): Velero バックアップオブジェクトの場所

20 VolumeSnapshotLocation (設定、MTC クラスター): Velero ボリュームスナップショットの場所

20 MigMigration (アクション、MTC クラスター): データのステージングまたは移行時に毎回作成される移行。各 MigMigration CR は MigPlan CR に関連付けられます。

20 Backup (アクション、ソースクラスター): 移行計画の実行時に、MigMigration CR は各ソースクラスターに 2 つの Velero バックアップ CR を作成します。

  • Kubernetes オブジェクトのバックアップ CR #1
  • PV データのバックアップ CR #2

20 Restore (アクション、ターゲットクラスター): 移行計画の実行時に、MigMigration CR はターゲットクラスターに 2 つの Velero 復元 CR を作成します。

  • PV データの復元 CR #1 (バックアップ CR #2 の使用)
  • Kubernetes オブジェクトの復元 CR #2 (バックアップ CR #1 の使用)

2.1.3. データのコピー方法

MTC (Migration Toolkit for Containers) は、ソースクラスターからターゲットクラスターにデータを移行するために、ファイルシステムおよびスナップショットによるデータのコピー方法をサポートします。ご使用の環境に適した方法で、ストレージプロバイダーでサポートされる方法を選択できます。

2.1.3.1. ファイルシステムのコピー方法

MTC は、データファイルをソースクラスターからレプリケーションリポジトリーにコピーし、そこからターゲットクラスターにコピーします。

表2.1 ファイルシステムのコピー方法の概要

利点制限
  • クラスターで複数の異なるストレージクラスを使用することが可能
  • すべての S3 ストレージプロバイダーでサポートされている
  • チェックサムを使用したオプションのデータ検証
  • スナップショットのコピー方法よりも遅い
  • オプションのデータ検証は、パフォーマンスを大幅に低下させます。

2.1.3.2. スナップショットのコピー方法

MTC は、ソースクラスターのデータのスナップショットを、クラウドプロバイダーのレプリケーションリポジトリーにコピーします。データはターゲットクラスターで復元されます。

AWS、Google Cloud Provider、および Microsoft Azure は、スナップショットのコピー方法をサポートします。

表2.2 スナップショットのコピー方法の概要

利点制限
  • ファイルシステムのコピー方法よりも高速
  • クラウドプロバイダーはスナップショットをサポートしている必要があります。
  • クラスターは同じクラウドプロバイダーになければなりません。
  • クラスターは、同じ場所またはリージョンにある必要があります。
  • クラスターには同じストレージクラスがなければなりません。
  • ストレージクラスにはスナップショットとの互換性がある必要があります。

2.1.4. 移行フックについて

移行フックを使用して、MTC (Migration Toolkit for Containers) を使用した移行中の特定の時点でカスタムコードを実行できます。単一の移行計画に最大 4 つの移行フックを追加し、各フックを移行の異なるフェーズで実行できます。

移行フックは、アプリケーションの休止状態のカスタマイズ、サポート外のデータタイプの手動の移行、および移行後のアプリケーションの更新などのタスクを実行します。

移行フックは、以下の移行手順のいずれかでソースまたはターゲットクラスターで実行されます。

  • PreBackup: リソースがソースクラスターでバックアップされる前
  • PostBackup: リソースがソースクラスターでバックアップされた後
  • PreRestore: リソースがターゲットクラスターで復元される前
  • PostRestore: リソースがターゲットクラスターで復元された後

Ansible Playbook またはカスタムフックコンテナーを使用してフックを作成できます。

Ansible Playbook

Ansible Playbook はフックコンテナーに設定マップとしてマウントされます。フックコンテナーは、MigPlan カスタムリソース (CR) に指定されるクラスター、サービスアカウント、および namespace を使用してジョブとして実行されます。ジョブは、デフォルトの再試行数 6 に達するか、正常に完了するまで実行を継続します。これは、最初の Pod がエビクトされるか、または強制終了される場合でも継続されます。

デフォルトの Ansible ランタイムイメージは registry.redhat.io/rhmtc/openshift-migration-hook-runner-rhel7:1.4 です。このイメージは Ansible Runner イメージをベースとしており、Ansible Kubernetes リソースの python-openshift および更新された oc バイナリーが含まれます。

オプション: デフォルトイメージの代わりに、追加の Ansible モジュールまたはツールを含むカスタム Ansible ランタイムイメージを使用できます。

カスタムフックコンテナー

Ansible Playbook またはカスタムコードを含むカスタムフックコンテナーを作成できます。