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

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

このチュートリアルは、次の 4 つのセクションから構成されます。

  1. 概要と設定

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

  2. 調査と評価(Day 0)

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

  3. 移行とデプロイ(Day 1)

    評価したら、モノリシック VM の移行計画を作成し、イメージとデータの完全な移行を行い、新しく作成したアーティファクトを Kubernetes にデプロイする方法を確認します。

  4. 最適化(Day 2)

    最後に、ソースコードの変更をコンテナ化された環境にすばやくデプロイする方法と、マイクロサービス、オブザーバビリティ、モダナイゼーションのベスト プラクティスについて確認します。

背景

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

このチュートリアルでは、簡単かつコードを一切変更せずモノリス サービスとそのデータベースを VM から GKE 環境に移行するために、Migrate to Containers を活用する方法について説明します。これにより、運用コストが削減され、開発がスムーズに行えるようになります。次に、ソースコードの変更とモダナイゼーションのベスト プラクティスをデプロイして、新しく移行されたワークロードを活用する方法について確認します。

ここで使用するサンプル アプリケーションは、リテール バンキング サービスをシミュレートする 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 コンソールに移動します。
  2. コンソール ウィンドウの上部にある [Cloud Shell をアクティブにする] [Shell をアクティブにする] ボタン ボタンをクリックします。

    コンソールの一番下にある新しいフレームの中で 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 の有効化と設定

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

  • Google Kubernetes Engine API が有効になっていることを確認します。
  • Google Kubernetes Engine API の有効化
  • Google Cloud CLI がインストールされていることを確認します。
  • 次のいずれかの方法で、プロジェクトにデフォルトの Google Cloud CLI 設定をセットアップします。
    • プロジェクトのデフォルトの設定全般を確認する場合は、gcloud init を使用します。
    • gcloud config を使用して、プロジェクト ID、ゾーン、リージョンを個別に設定します。

    gcloud init

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

      gcloud init

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

      gcloud init --console-only
    2. Google Cloud アカウントを使用できるように、gcloud CLI の承認手順を行います。
    3. 新しい構成を作成するか、既存の構成を選択します。
    4. Google Cloud プロジェクトを選択します。
    5. デフォルトの Compute Engine ゾーンを選択します。
    6. デフォルトの Compute Engine リージョンを選択します。

    gcloud config

    1. デフォルトのプロジェクト ID を設定します。
      gcloud config set project PROJECT_ID
    2. デフォルトの Compute Engine リージョン(例: us-central1)を設定します。
      gcloud config set compute/region COMPUTE_REGION
    3. デフォルトの Compute Engine ゾーン(例: us-central1-c)を設定します。
      gcloud config set compute/zone COMPUTE_ZONE
    4. gcloud を最新バージョンに更新します。
      gcloud components update

    デフォルトの場所を設定することで、gcloud CLI のエラー(One of [--zone, --region] must be supplied: Please specify location など)を防止できます。

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
    

    このコマンドは、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 to Containers ツールを使用する移行に適しているかどうかを評価する方法を説明します。

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

クリーンアップ

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

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

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

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

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

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