モノリス VM の移行 - 概要と設定

このチュートリアルでは、まだ完全にモダナイズされていないサンプル アプリケーションを確認し、サービスのすべてを GKE に移行するために必要な手順について説明します。このアプリケーションは、サービスの一部を GKE クラスタで実行し、残りのサービスは VM のモノリスとして実行します。

このチュートリアルは複数のセクションに分かれています。

  1. 概要と設定

    このセクションでは、このチュートリアルの背景を確認し、チュートリアルの残りの部分に進むために必要なインフラストラクチャとツールを設定します。

  2. 調査と評価(Day 0)

    次に、調査ツールを使用して VM の移行への適性を評価し、移行に備えて処理クラスタを作成します。

  3. 移行と導入(Day 1)

    最後に、モノリス VM の移行計画を作成して、イメージとデータの完全な移行を行い、新しく作成したアーティファクトを Kubernetes にデプロイします。

背景

今日でも、大企業におけるレガシー アプリケーションの多くはモノリシックであり、専用のテクノロジー スタックやコンピューティング負荷の高い仮想マシン(VM)で稼働しています。多くの場合、これらのサービスは大規模なアプリケーションの作業にとって重要ですが、稼働費用やライセンス料など多くの運用コストが発生します。しかし、その性質上、VM は GKE クラスタ内のコンテナなど、より軽量なソリューションへの移行が難しい場合があります。

このチュートリアルでは、簡単かつコードを一切変更せずに、モノリス サービスとそのデータベースを VM から GKE 環境に移行するために、Migrate for Anthos and GKE を活用する方法を学びます。これにより、運用コストが削減され、開発がスムーズに行えるようになります。

ここで使用するサンプル アプリケーションは、リテール バンキング サービスのシミュレーションである Bank of Anthos で、独自の取引処理ネットワークとデータベースを備えています。

Bank of Anthos のウェブ フロントエンド、ユーザー、連絡先サービスは、アカウント データベースとともに、GKE 上のコンテナで動作する、すでにコンテナ化されたマイクロサービスです。ただし、モノリシック トランザクション ソースとトランザクション データベースは、まだ単一の仮想マシン上で動作しています。現在のワークフローを中断することなく運用コストを削減するには、この VM を GKE に簡単に移行できる必要があります。

Bank of Anthos のアーキテクチャ図

料金

このチュートリアルでは、課金対象である次の Google Cloud コンポーネントを使用します。

料金計算ツールを使用すると、予想使用量に基づいて費用の見積もりを算出できます。新しい Google Cloud ユーザーは無料トライアルをご利用いただけます。

このチュートリアルを終了した後、作成したリソースを削除すると、それ以上の請求は発生しません。詳しくは、クリーンアップをご覧ください。

必要なツール

このチュートリアルで使用する gcloudkubectlgitmigctl コマンドライン ツールと一緒にプリインストールされる Cloud Shell を使用して、このチュートリアルを実施できます。Cloud Shell を使用すると、これらのコマンドライン ツールをワークステーションにインストールする必要はありません。

Cloud Shell を使用するには:

  1. Google Cloud Console に移動します。
  2. Cloud Console ウィンドウの上部にある [Cloud Shell をアクティブにする] [Shell をアクティブにする] ボタン ボタンをクリックします。

    Cloud Console の一番下にある新しいフレームの中で Cloud Shell セッションが開き、コマンドライン プロンプトが表示されます。

    Cloud Shell セッション

必要な API

Compute Engine のサポート有効化

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. Compute Engine API を有効にします。

    API の有効化

GKE の有効化と設定

作業を始める前に、次のことを確認してください。

次のいずれかの方法で gcloud のデフォルトの設定を指定します。

  • gcloud init。デフォルトの設定全般を確認する場合に使用します。
  • gcloud config。プロジェクト ID、ゾーン、リージョンを個別に設定する場合に使用します。

gcloud init の使用

エラー One of [--zone, --region] must be supplied: Please specify location を受信した場合は、このセクションの内容を実施します。

  1. gcloud init を実行して、次の操作を行います。

    gcloud init

    リモート サーバーで SSH を使用している場合は、--console-only フラグを指定して、コマンドがブラウザを起動しないようにします。

    gcloud init --console-only
  2. 手順に従って gcloud を承認し、Google Cloud アカウントを使用します。
  3. 新しい構成を作成するか、既存の構成を選択します。
  4. Google Cloud プロジェクトを選択します。
  5. ゾーンクラスタの場合はデフォルトの Compute Engine ゾーン、リージョン クラスタまたは Autopilot クラスタの場合はデフォルトの Compute Engine リージョンを選択します。

gcloud config の使用

  • デフォルトのプロジェクト ID を設定します。
    gcloud config set project PROJECT_ID
  • ゾーンクラスタを使用する場合は、デフォルトのコンピューティング ゾーンを設定します。
    gcloud config set compute/zone COMPUTE_ZONE
  • Autopilot クラスタまたはリージョン クラスタを使用する場合は、デフォルトのコンピューティング リージョンを設定します。
    gcloud config set compute/region COMPUTE_REGION
  • gcloud を最新バージョンに更新します。
    gcloud components update

Bank of Anthos をデプロイする

このセクションでは、ソースのモノリス VM を Compute Engine にデプロイし、Bank of Anthos の残りのサービスを格納する GKE クラスタを作成します。

  1. Bank of Anthos モノリスのデプロイに必要な環境変数を設定します。

    export PROJECT_ID=PROJECT_ID
    export ZONE=COMPUTE_ZONE
    
  2. Bank of Anthos リポジトリのクローンをホーム ディレクトリに作成します。

    git clone https://github.com/GoogleCloudPlatform/bank-of-anthos ${HOME}/bank-of-anthos
    
  3. Bank of Anthos ソースのモノリスを Compute Engine にデプロイします。

    cd ${HOME}/bank-of-anthos
    make monolith-deploy
    

    このコマンドは、名前が競合する VM がまだ存在していないことを確認します。これにより、Bank of Anthos のソース モノリス イメージを使用して Compute Engine に VM を作成します。

  4. ポート 8080 で VM インスタンスへのリクエストを許可するファイアウォール ルールを作成します。これは、フロントエンド サービスがソースのモノリスと通信するために使用されます。

    gcloud compute --project=PROJECT_ID firewall-rules create default-allow-http \
      --direction=INGRESS --priority=1000 --network=default --action=ALLOW \
      --rules=tcp:8080 --source-ranges=0.0.0.0/0 --target-tags=monolith
    
  5. 残りの Bank of Anthos サービスをホストする GKE クラスタを作成します。

    gcloud container clusters create boa-cluster \
      --project=PROJECT_ID --zone=COMPUTE_ZONE \
      --machine-type=e2-standard-4 --num-nodes=4 \
      --enable-stackdriver-kubernetes --subnetwork=default
    
  6. クラスタを作成したら、その認証情報を取得して、Kubernetes コンテキストがクラスタを指すように設定します。

    gcloud container clusters get-credentials boa-cluster --zone COMPUTE_ZONE
    
  7. プロジェクト ID は、GKE サービスがソースのモノリス VM と通信する方法を示すために使用される ConfigMap に置き換えます。

    sed -i 's/\[PROJECT_ID\]/'PROJECT_ID'/g' ${HOME}/bank-of-anthos/src/ledgermonolith/config.yaml
    

    このファイルを表示して、変更が正常に適用されたことを確認します。

    cat ${HOME}/bank-of-anthos/src/ledgermonolith/config.yaml | grep ADDR
    

    ソースのサービス ホストにプロジェクト ID が挿入されていることが確認できます。

    TRANSACTIONS_API_ADDR: "ledgermonolith-service.c.PROJECT_ID.internal:8080"
    BALANCES_API_ADDR: "ledgermonolith-service.c.PROJECT_ID.internal:8080"
    HISTORY_API_ADDR: "ledgermonolith-service.c.PROJECT_ID.internal:8080"
    CONTACTS_API_ADDR: "contacts:8080"
    USERSERVICE_API_ADDR: "userservice:8080
    
  8. さまざまな Bank of Anthos サービスをクラスタに適用します。

    cd ${HOME}/bank-of-anthos/
    kubectl apply -f src/ledgermonolith/config.yaml
    kubectl apply -f extras/jwt/jwt-secret.yaml
    kubectl apply -f kubernetes-manifests/accounts-db.yaml
    kubectl apply -f kubernetes-manifests/userservice.yaml
    kubectl apply -f kubernetes-manifests/contacts.yaml
    kubectl apply -f kubernetes-manifests/frontend.yaml
    kubectl apply -f kubernetes-manifests/loadgenerator.yaml
    

    次のコマンドで Pod の状態を確認できます。

    kubectl get pods
    

    すべての Pod が起動して、動作するまでに数分かかることがあります。

    NAME                           READY   STATUS    RESTARTS   AGE
    accounts-db-0                  1/1     Running   0          51s
    contacts-d5dcdc87c-5l9xf       1/1     Running   0          50s
    frontend-5768bd978-s6vkq       1/1     Running   0          50s
    loadgenerator-8485dfd-wjvst    1/1     Running   0          50s
    userservice-8477dfcb46-htw96   1/1     Running   0          51s
    
  9. すべての Pod が Running に設定されたら、frontend LoadBalancer サービスの外部 IP アドレスを確認できます。

    kubectl get service frontend
    
    NAME       TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE
    frontend   LoadBalancer   10.79.248.161   ##.##.##.##.    80:31304/TCP   4m
    
  10. これで、ブラウザを開いて上に記載されている外部 IP アドレスのウェブページにアクセスできます(HTTPS ではなく HTTP を使用してください)。

    http://EXTERNAL_IP
    

    デフォルトの認証情報でログインすると、ダッシュボードにトランザクションが表示されるはずです。表示されているトランザクションは、現在 VM でホストされているソースのモノリスから送信されているものです。

    Bank of Anthos のスクリーンショット

次のステップ

必要な API を有効にして Bank of Anthos の設定をデプロイしたので、チュートリアルの次のセクション(調査と評価)に進むことができます。次のセクションでは、移行調査ツールを使用して、Migrate for Anthos and GKE ツールを使用して VM が移行に適しているかどうかを評価する方法を学習します。

チュートリアルをここで終了する場合は、Google Cloud のプロジェクトとリソースを忘れずにクリーンアップしてください。

クリーンアップ

不要な Google Cloud 料金が発生しないようにするには、このチュートリアルで使用したリソースを、使用し終わったらすぐに削除する必要があります。以下のリソースです。

  • boa-cluster GKE クラスタ
  • ledgermonolith-service Compute Engine VM

これらのリソースを手動で削除するか、以下の手順に従ってプロジェクトを削除します。これにより、すべてのリソースが削除されます。

  • Cloud Console で [リソースの管理] ページに移動します。

    [リソースの管理] に移動

  • プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  • ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。