モノリス 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. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

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

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

  6. 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 の設定をデプロイしたので、チュートリアルの次のセクション(調査と評価)に進むことができます。次のセクションでは、移行調査ツールを使用して、VM が Migrate for Anthos and GKE ツールを使用する移行に適しているかどうかを評価する方法を説明します。

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

クリーンアップ

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

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

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

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

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

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