コンテナワークロードを Azure Red Hat OpenShift (ARO) から Red Hat OpenShift Service on AWS (ROSA) に移行する - AWS 規範的ガイダンス

コンテナワークロードを Azure Red Hat OpenShift (ARO) から Red Hat OpenShift Service on AWS (ROSA) に移行する

Amazon Web Services、Naveen Ramasamy、Srikanth Rangavajhala、および Gireesh Sreekantan

概要

このパターンでは、Azure Red Hat OpenShift (ARO) から Red Hat OpenShift Service on AWS (ROSA) にコンテナワークロードを移行するためのステップバイステップの手順を説明します。ROSA は、Red Hat が AWS と連携して提供するマネージド Kubernetes サービスです。Kubernetes プラットフォームを使用してコンテナ化されたアプリケーションをデプロイ、管理、スケールするのに役立ち、Kubernetes と AWS クラウドインフラストラクチャの両方に関する Red Hat の専門知識を活用できます。

ARO、他のクラウド、またはオンプレミスから ROSA にコンテナワークロードを移行するには、アプリケーション、設定、およびデータを、あるプラットフォームから別のプラットフォームに転送する必要があります。このパターンは、AWS クラウドサービス、セキュリティ、コスト効率を最適化しながらスムーズな移行を確保するのに役立ちます。ワークロードを ROSA クラスターに移行するための 2 つの方法として、CI/CD と Migration Toolkit for Containers (MTC) について説明します。

このパターンはどちらの方法にも当てはまります。移行プロセスの複雑さと確実性によって、選択する方法は異なります。アプリケーションの状態を完全に制御でき、パイプラインを通じて一貫したセットアップを確保できる場合は、CI/CD を使用することをお勧めします。ただし、アプリケーションの状態に不確実性、予期しない変更、または複雑なエコシステムが含まれる場合は、アプリケーションとそのデータを新しいクラスターに移行するため、信頼性の高い制御されたパスとして MTC を使用することをお勧めします。2 つの方法の詳細な比較については、「追加情報」セクションを参照してください。

ROSA に移行するメリット:

  • ROSA はネイティブサービスとして AWS とシームレスに統合されています。AWS マネジメントコンソールから簡単にアクセスでき、単一の AWS アカウントを通じて請求されます。他の AWS のサービスとの​​完全な互換性を提供し、AWS と Red Hat の両方からの連携サポートを提供します。

  • ROSA はハイブリッドデプロイとマルチクラウドデプロイをサポートします。これにより、オンプレミスのデータセンターや複数のクラウド環境にわたってアプリケーションを一貫して実行できるようになります。

  • ROSA は Red Hat のセキュリティ重視の恩恵を受けており、ロールベースのアクセス制御 (RBAC)、イメージスキャン、脆弱性評価などの機能を提供して、安全なコンテナ環境を確保します。

  • ROSA は、アプリケーションを簡単にスケールできるように設計されており、高可用性オプションを提供します。これにより、信頼性を維持しながら、必要に応じてアプリケーションを拡大できます。

  • ROSA は、手動のセットアップおよび管理方法と比較して、Kubernetes クラスターのデプロイを自動化して簡素化します。これにより、開発およびデプロイのプロセスが加速されます。

  • ROSA は AWS クラウドサービスの恩恵を受けており、データベースサービス、ストレージソリューション、セキュリティサービスなどの AWS サービスとシームレスに統合できます。

前提条件と制限

前提条件

  • アクティブな AWS アカウント。

  • ROSA が機能を提供するために依存する AWS のサービスに対して設定されたアクセス許可。詳細については、ROSA ドキュメントの「Prerequisites」を参照してください。

  • ROSA コンソールで有効になっている ROSA。手順については、ROSA ドキュメントを参照してください。

  • インストールおよび設定済みの ROSA クラスター。詳細については、ROSA ドキュメントの「Get started with ROSA」を参照してください。ROSA クラスターをセットアップするためのさまざまな方法については、AWS 規範ガイダンスの「ROSA implementation strategies」を参照してください。

  • AWS Direct Connect (推奨) または AWS Virtual Private Network (Site-to-Site VPN) を介したオンプレミスのネットワークから AWS への確立済みネットワーク接続。

  • aws client、OpenShift CLI (oc) クライアント、ROSA クライアント、Git バイナリなどのツールをインストールするための Amazon Elastic Compute Cloud (Amazon EC2) インスタンスまたは別の仮想サーバー。

CI/CD での移行に関するその他の前提条件:

  • 新しいパイプラインの作成、ステージの追加、OpenShift クラスターの追加、ビルドの実行を行うアクセス許可での、オンプレミスの Jenkins サーバーへのアクセス。

  • 新しい Git ブランチを作成し、新しいブランチへのコミットを実行するアクセス許可での、アプリケーションのソースコードが維持されている Git リポジトリへのアクセス。

MTC での移行に関するその他の前提条件:

  • レプリケーションリポジトリとして使用される Amazon Simple Storage Service (Amazon S3) バケット。

  • ソース ARO クラスターへの管理アクセス。これは、MTC 接続をセットアップするために必要です。

機能制限

  • 一部の AWS のサービスは、すべての AWS リージョンで利用できるわけではありません。各リージョンで利用できるサービスの詳細は、「AWS のサービス by Region」をご確認ください。特定のエンドポイントについては、「Service endpoints and quotas」ページを参照して、サービスのリンクを選択してください。

アーキテクチャ

ROSA は、パブリック、プライベート、AWS PrivateLink の 3 つのネットワークデプロイパターンを提供します。Red Hat のサイト信頼性エンジニアリング (SRE) チームは、PrivateLink により、既存の VPC 内に存在するクラスターの PrivateLink エンドポイントに接続されたプライベートサブネットを使用してクラスターを管理できます。

PrivateLink オプションを選択すると、最も安全な設定が提供されます。そのため、機密性の高いワークロードや厳格なコンプライアンス要件の場合に使用することをお勧めします。パブリックとプライベートのネットワークデプロイオプションの詳細については、Red Hat OpenShift ドキュメントを参照してください。

重要

PrivateLink クラスターは、インストール時にのみ作成できます。インストール後に PrivateLink を使用するようにクラスターを変更することはできません。

次の図は、Direct Connect がオンプレミス環境と ARO 環境への接続に使用する ROSA クラスターの PrivateLink アーキテクチャを示しています。

AWS Direct Connect と AWS PrivateLink を使用する ROSA クラスター。

ROSA に対する AWS のアクセス許可

ROSA に対する AWS のアクセス許可については、有効期間の短い動的トークンで AWS Security Token Service (AWS STS) を使用することをお勧めします。この方法では、最小特権の事前定義済みロールとポリシーを使用して、AWS アカウントで操作するための最小限のアクセス許可を ROSA に付与し、ROSA のインストール、コントロールプレーン、およびコンピューティング機能をサポートします。

CI/CD パイプラインの再デプロイ

CI/CD パイプラインの再デプロイは、成熟した CI/CD パイプラインを持つユーザーに推奨される方法です。このオプションを選択すると、任意の DevOps デプロイ戦略を使用して、アプリケーション負荷を ROSA 上のデプロイに徐々にシフトできます。

注記

このパターンは、オンプレミスの Git、JFrog Artifactory、および Jenkins パイプラインがある一般的なユースケースを前提としています。このアプローチでは、「エピック」セクションの手順に従う前に、オンプレミスネットワークから Direct Connect を介して AWS へのネットワーク接続を確立し、ROSA クラスターをセットアップする必要があります。詳細については、「前提条件」セクションを参照してください。

以下の図は、この方法のワークフローを示しています。

CI/CD での移行方法を使用してコンテナを ARO から ROSA に移行します。

MTC での移行

Migration Toolkit for Containers (MTC) を使用すると、コンテナ化されたワークロードを ARO から ROSA へなど、さまざまな Kubernetes 環境間で移行することができます。MTC は、いくつかの重要なタスクを自動化し、移行ライフサイクルを管理するための包括的なフレームワークを提供することで、移行プロセスを簡素化します。

以下の図は、この方法のワークフローを示しています。

MTC での移行方法を使用してコンテナを ARO から ROSA に移行します。

ツール

AWS のサービス

  • AWS DataSync は、ファイルまたはオブジェクトデータを AWS ストレージサービスとの間で移動したり、AWS ストレージサービス間で移動したりするのに役立つオンラインデータ転送および検出サービスです。

  • AWS Direct Connect は、お客様の内部ネットワークを Direct Connect ロケーションに、標準のイーサネット光ファイバーケーブルを介して接続するサービスです。この接続を使用すると、ネットワークパス内のインターネットサービスプロバイダーをバイパスしながら、パブリック AWS のサービスへの仮想インターフェイスを直接作成できます。

  • AWS PrivateLink は、仮想プライベートクラウド (VPC) から VPC 外のサービスへの一方向のプライベート接続を確立するのに役立ちます。

  • Red Hat OpenShift Service on AWS (ROSA) は、コンテナ化されたアプリケーションを Red Hat OpenShift ユーザーが AWS で構築、スケール、管理できるようにするマネージドサービスです。

  • AWS Security Token Service (AWS STS) を使用すると、ユーザー用の、権限が制限された一時的な認証情報をリクエストできます。

その他のツール

ベストプラクティス

  • レジリエンスを確保するため、セキュリティコンプライアンスワークロードがある場合は、PrivateLink を使用するマルチ AZ ROSA クラスターをセットアップします。詳細については、ROSA ドキュメントを参照してください。

    注記

    インストール後に PrivateLink を設定することはできません。

  • レプリケーションリポジトリに使用する S3 バケットは、公開しないでください。適切な S3 バケットポリシーを使用してアクセスを制限します。

  • MTC での移行を選択した場合は、[ステージ] 移行オプションを使用して、カットオーバー中のダウンタイムウィンドウを短縮します。

  • ROSA クラスターをプロビジョニングする前と後で、サービスクォータを確認します。必要に応じて、要件に従ってクォータの引き上げをリクエストします。詳細については、Service Quotas ドキュメントを参照してください。

  • ROSA セキュリティガイドラインを確認し、セキュリティのベストプラクティスを実装します。

  • インストール後に、デフォルトのクラスター管理者を削除することをお勧めします。詳細については、Red Hat OpenShift のドキュメントを参照してください。

  • マシンプールの自動スケーリングを使用して、ROSA クラスター内の未使用のワーカーノードをスケールダウンし、コストを最適化します。詳細については、「ROSA Workshop」を参照してください。

  • OpenShift Container Platform 向け Red Hat Cost Management サービスを使用すると、クラウドとコンテナのコストをよりよく理解し、追跡することができます。詳細については、「ROSA Workshop」を参照してください。

  • AWS のサービスを使用して ROSA クラスターインフラストラクチャサービスとアプリケーションをモニタリングおよび監査します。詳細については、「ROSA Workshop」を参照してください。

エピック

タスク説明必要なスキル

新しい ROSA クラスターを Jenkins に追加します。

  1. Jenkins コンソールで、[Manage Jenkins][Configure System] の順に選択します。

  2. [Manage Jenkins] ページの [OpenShift Plug-in] セクションで、[Add a new cluster] を選択します。

  3. ROSA で認証するには、クラスター名、API サーバー URL、トークン情報などの必要な情報を指定します。

AWS 管理者、AWS システム管理者、AWS DevOps

oc クライアントを Jenkins ノードに追加します。

  1. Jenkins コンソールで、[Manage Jenkins][Global Tool Configuration] の順に選択します。

  2. [OpenShift Client Tools] セクションで、ROSA クラスターバージョンと同じ OpenShift CLI (oc) クライアントバージョンをインストールします。

AWS 管理者、AWS システム管理者、AWS DevOps

新しい Git ブランチを作成します。

rosa-dev 用の Git リポジトリに新しいブランチを作成します。このブランチは、ROSA のコードまたは設定パラメータの変更を既存のパイプラインから分離します。

AWS DevOps

ROSA のイメージにタグを付けます。

ビルドステージでは、別のタグを使用して、ROSA パイプラインから構築されたイメージを識別します。

AWS 管理者、AWS システム管理者、AWS DevOps

パイプラインを作成します。

既存のパイプラインと同様の新しい Jenkins パイプラインを作成します。このパイプラインでは、前に作成した rosa-dev Git ブランチを使用して、既存のパイプラインと同じ Git チェックアウト、コードスキャン、ビルドステージを含めるようにしてください。

AWS 管理者、AWS システム管理者、AWS DevOps

ROSA デプロイステージを追加します。

新しいパイプラインで、ステージを追加して ROSA クラスターにデプロイし、Jenkins グローバル設定に追加した ROSA クラスターを参照します。

AWS 管理者、AWS DevOps、AWS システム管理者

新しいビルドを開始します。

Jenkins で、パイプラインを選択して [Build now] を選択するか、Git の rosa-dev ブランチに変更をコミットして新しいビルドを開始します。

AWS 管理者、AWS DevOps、AWS システム管理者

デプロイメントを確認する

oc コマンドまたは ROSA コンソールを使用して、アプリケーションがターゲット ROSA クラスターにデプロイされていることを確認します。

AWS 管理者、AWS DevOps、AWS システム管理者

ターゲットクラスターにデータをコピーします。

ステートフルワークロードの場合、AWS DataSync、または rsync などのオープンソースユーティリティを使用して、ソースクラスターからターゲットクラスターにデータをコピーするか、MTC での移行を行えます。詳細については、AWS DataSync のドキュメントを参照してください。

AWS 管理者、AWS DevOps、AWS システム管理者

アプリケーションをテストする

  1. oc route コマンドまたは ROSA コンソールを使用して、アプリケーションのルート URL を取得します。

  2. ルート URL を使用して、アプリケーションをテストします。

AWS 管理者、AWS DevOps、AWS システム管理者

カットオーバーします。

テストが成功した場合、適切な Amazon Route 53 ポリシーを使用して、トラフィックを ARO ホストアプリケーションから ROSA ホストアプリケーションに移動します。このステップを完了すると、アプリケーションのワークロードは ROSA クラスターに完全に移行されます。

AWS 管理者、AWS システム管理者
タスク説明必要なスキル

MTC 演算子をインストールします。

ARO クラスターと ROSA クラスターの両方に MTC 演算子をインストールします。

  1. ARO または ROSA コンソールで、[演算子][OperatorHub] ページに移動します。

  2. [フィルター条件] キーワードボックスで、MTC を検索するか入力します。

  3. MTC 演算子を選択して追加情報を表示します。

  4. 演算子に関する情報を確認したら、[インストール] を選択します。

AWS 管理者、AWS DevOps、AWS システム管理者

ネットワークトラフィックをレプリケーションリポジトリに設定します。

プロキシサーバーを使用している場合は、レプリケーションリポジトリとクラスター間のネットワークトラフィックを許可するように設定します。レプリケーションリポジトリは、MTC がデータを移行する際に使用する中間ストレージオブジェクトです。移行中、ソースクラスターとターゲットクラスターはレプリケーションリポジトリにネットワークアクセスできる必要があります。

AWS 管理者、AWS DevOps、AWS システム管理者

MTC にソースクラスターを追加します。

MTC ウェブコンソールで、ARO ソースクラスターを追加します。

AWS 管理者、AWS DevOps、AWS システム管理者

レプリケーションリポジトリとして Amazon S3 を追加します。

MTC ウェブコンソールで、Amazon S3 バケット (「前提条件」を参照) をレプリケーションリポジトリとして追加します。

AWS 管理者、AWS DevOps、AWS システム管理者

移行プランを作成します。

MTC ウェブコンソールで、移行プランを作成し、データ転送タイプとして [Copy] を指定します。これにより、MTC はソース (ARO) クラスターから S3 バケットにデータをコピーし、バケットからターゲット (ROSA) クラスターにデータをコピーするように指示されます。

AWS 管理者、AWS DevOps、AWS システム管理者

移行プランを実行します。

[Stage] または [Cutover] オプションを使用して、移行プランを実行します。

  • アプリケーションを停止せずにターゲットクラスターにデータをコピーするには、[Stage] を選択します。カットオーバー移行前に、複数のステージ移行を実行すると、ほとんどのデータをコピーできます。これにより、カットオーバー移行にかかる期間が短縮されます。

  • リソースをターゲットクラスターに移動しながら、ソースクラスターでアプリケーションが停止するには、[Cutover] を選択します。

    アプリケーションの停止を防ぐには、[Halt transactions on the source cluster during migration] をオフにします。

AWS 管理者、AWS DevOps、AWS システム管理者

トラブルシューティング

問題ソリューション

接続の問題

コンテナワークロードを ARO から ROSA に移行する場合、移行を成功させるためには、解決する必要がある接続の問題が発生する可能性があります。移行中にこれらの接続の問題 (この表に記載) に対処するには、綿密な計画、ネットワークチームやセキュリティチームとの調整、徹底したテストが不可欠です。段階的な移行戦略を実装し、各ステップで接続を検証することで、潜在的な中断を最小限に抑え、ARO から ROSA へのスムーズな移行を実現できます。

ネットワーク設定の違い

ARO と ROSA では、仮想ネットワーク (VNet) 設定、サブネット、ネットワークポリシーなどのネットワーク設定が異なる場合があります。サービス間の適切な通信を行うには、ネットワーク設定が 2 つのプラットフォーム間で一致していることを確認してください。

セキュリティグループとファイアウォールルール

ROSA と ARO では、デフォルトのセキュリティグループとファイアウォールの設定が異なる場合があります。移行中にコンテナとサービス間の接続を維持する上で必要なトラフィックを許可するように、これらのルールを調整および更新してください。 

IP アドレスと DNS の変更

ワークロードを移行すると、IP アドレスと DNS 名が変更される場合があります。静的 IP または特定の DNS 名に依存するアプリケーションを再設定します。 

外部サービスアクセス

アプリケーションがデータベースや API などの外部サービスに依存している状態では、場合によっては、ROSA の新しいサービスと通信できるように接続設定を更新する必要があります。

Azure Private Link の設定

ARO で Azure Private Link またはプライベートエンドポイントサービスを使用する場合、リソース間のプライベート接続を確保するように ROSA で同等の機能をセットアップする必要があります。

Site-to-Site VPN または Direct Connect のセットアップ

オンプレミスネットワークと ARO の間に既存の Site-to-Site VPN または Direct Connect 接続がある場合、ローカルリソースとの通信が中断されないようにするには、ROSA と同様の接続を確立する必要があります。

Ingress とロードバランサーの設定

Ingress コントローラーとロードバランサーの設定は、ARO と ROSA で異なる場合があります。これらの設定を再構成して、サービスへの外部アクセスを維持します。

証明書と TLS の処理

アプリケーションで SSL 証明書または TLS を使用している場合、証明書が有効であり、ROSA で正しく設定されていることを確認します。

コンテナレジストリのアクセス

コンテナが外部コンテナレジストリでホストされている場合、ROSA に関する適切な認証とアクセス許可をセットアップします。

モニタリングとログ記録

モニタリングとログ記録の設定を更新して、ROSA の新しいインフラストラクチャを反映し、コンテナのヘルスとパフォーマンスを継続的かつ効果的に監視できるようにします。

関連リソース

AWS のリファレンス

Red Hat OpenShift ドキュメント

追加情報

MTC と CI/CD パイプラインの再デプロイオプションを選択する

ある OpenShift クラスターから別のクラスターにアプリケーションを移行するには、慎重に検討する必要があります。理想的には、CI/CD パイプラインを使用してアプリケーションを再デプロイし、永続ボリュームデータの移行を処理することで、スムーズな移行を行います。ただし、実際には、クラスター上で実行中のアプリケーションは、時間の経過とともに予期しない変更の影響を受けやすくなります。これらの変更により、アプリケーションが元のデプロイ状態から徐々に逸脱する可能性があります。名前空間の正確な内容が不明であり、すべてのアプリケーションコンポーネントを新しいクラスターにシームレスに移行することが重要であるシナリオの場合、MTC がソリューションを提供します。

適切な選択を行うには、特定のシナリオを評価し、各アプローチの利点を比較検討する必要があります。そうすることで、ニーズと優先順位に沿って、正常かつシームレスに移行できます。2 つのオプションから選択するための追加のガイドラインを以下に示します。

CI/CD パイプラインの再デプロイ

パイプラインを使用してアプリケーションを確実に再デプロイできる場合、推奨されるアプローチは CI/CD パイプラインの使用です。これにより、移行が制御されて予測可能になり、既存のデプロイ方法と一致するようになります。この方法を選択すると、ブルー/グリーンデプロイまたはカナリアデプロイ戦略を使用して、ROSA のデプロイにロードを徐々にシフトできます。このシナリオでは、このパターンは、Jenkins がオンプレミス環境からアプリケーションデプロイをオーケストレーションしていることを前提としています。

利点:

  • ソース ARO クラスターへの管理アクセスは必要ありません。また、ソースクラスターまたはターゲットクラスターに演算子をデプロイする必要もありません。

  • このアプローチは、DevOps 戦略を使用することでトラフィックを徐々に切り替える場合に役立ちます。

欠点:

  • アプリケーションの機能をテストするには、より多くの労力が必要です。

  • アプリケーションに永続データが含まれている場合は、AWS DataSync またはその他のツールを使用してデータをコピーする追加のステップが必要となります。

MTC の移行

実際には、実行中のアプリケーションに予期しない変更が発生し、初期のデプロイから逸脱してしまうことがあります。ソースクラスター上に存在するアプリケーションの現在の状態が不明な場合、MTC オプションを選択します。例えば、アプリケーションエコシステムがさまざまなコンポーネント、設定、データストレージボリュームにまたがっている場合、アプリケーションとその環境全体をカバーする完全な移行を確実に実行するには、MTC を選択することをお勧めします。

利点:

  • MTC は、ワークロードの完全なバックアップと復元を提供します。

  • ワークロードの移行中に、永続データをソースからターゲットにコピーします。

  • ソースコードリポジトリへのアクセスを必要としません。

欠点:

  • ソースクラスターとターゲットクラスターに MTC 演算子をインストールするには、管理者特権が必要です。

  • DevOps チームに、MTC ツールを使用して移行を実行するためのトレーニングが必要となります。