サンプルで Bridge to Kubernetes を使用する

このサンプルでは、Bridge to Kubernetes を使用して、任意の Kubernetes クラスターで簡単な TODO アプリケーションのマイクロサービス バージョンを開発する方法を示します。 Visual Studio Code を使用したこのサンプルは、TodoMVC によって提供されるコードを作成し直したものです。 この例では MiniKube を使用してアプリケーションをホストしますが、これらの手順は任意の Kubernetes クラスターで動作するはずです。

この TODO アプリケーションのサンプルは、永続ストレージを提供するフロントエンドとバックエンドで構成されています。 この拡張サンプルでは、統計コンポーネントを追加し、特に次のいくつかのマイクロサービスにアプリケーションを分割しています。

  • フロントエンドで database-api を呼び出し、TODO 項目を永続化および更新する。
  • database-api サービスでが Mongo データベースに依存し、TODO 項目を永続化する。
  • フロントエンドが RabbitMQ キューに、追加、完了および削除イベントを書き込む。
  • 統計ワーカーが RabbitMQ キューからイベントを受け取り、Redis キャッシュを更新する。
  • 統計 API が、フロントエンドが表示するキャッシュ済みの統計を公開する。

この拡張 TODO アプリケーションは、全体で相関する 6 つのコンポーネントで構成されています。

前提条件

  • MiniKube をインストールする任意の Kubernetes クラスター、または Chocolatey パッケージ マネージャー
  • Windows 10 の場合は、Hyper-V
  • Kubectl がインストールされていて、選択したコマンド ライン環境のパス上にある
  • Bridge to Kubernetes Visual Studio Code 拡張機能

MiniKube のインストール

任意の Kubernetes プロバイダーと Bridge to Kubernetes を使用できます。 この記事では、MiniKube を使用します。 MiniKube は、ローカル コンピューターで Kubernetes をホストできる軽量の Kubernetes プロバイダーです。 インストール手順に従って、Windows 10、Linux、または macOS に MiniKube をインストールします。

Windows 10 で最良の結果を得るには、Hyper-V VM マネージャーを使用し、仮想スイッチを作成する必要があります。

インストールが完了したら、MiniKube を起動して、Hyper-V を使用するように指定し、プライマリ仮想スイッチの名前を指定します。 次のコマンドを、管理者特権でコマンド プロンプトから実行する必要があります。

minikube start --vm-driver hyperv --hyperv-virtual-switch "Primary Virtual Switch"

アプリケーションの配置

Bridge to Kubernetes リポジトリをクローンし、現在の作業フォルダーが todo-app の状態でコマンド ウィンドウを開きます。

このサンプル用の名前空間を作成します。

kubectl create namespace todo-app

次に、配置マニフェストを適用します。

kubectl apply -n todo-app -f deployment.yaml

これは、LoadBalancer 型のサービスを使用してフロントエンドを公開する単純な展開です。 すべてのポッドが実行され、frontend サービスの外部 IP が使用可能になるまで待機します。

MiniKube でテストする場合は、minikube tunnel を使用して外部 IP を解決する必要があります。

kubectl get services -n todo-app

NAME          TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)        AGE
frontend      LoadBalancer   10.0.49.177    127.0.0.1   80:30145/TCP   18h

外部 IP およびローカル ポート (PORT(S) 列の最初の数字) を使用してアプリケーションを参照します。

http://{external-ip}:{local-port}

ブラウザーで実行中のアプリをテストします。 todo 項目を追加、完了、削除すると、統計ページが期待されるメトリックで更新されることに着目してください。

stats-api サービスをデバッグする

これで、Bridge to Kubernetes 拡張機能を使用して、Kubernetes クラスターからのトラフィックをローカルで実行されているバージョンの stats-api にリダイレクトする方法を示すことができます。

cd stats-api/

VS Code で stats-api のソース コードを開きます。

code .

VS Code が起動したら、VS Code の左側のサイド バーから [Kubernetes] ペインを開き、MiniKube クラスターの todo-app 名前空間を選択します。 todo-app ノードを右クリックし、 [Use Namespace](名前空間を使用) を選択します。

名前空間を選択する

ターミナル ウィンドウ (Ctrl + ~) で npm install を実行して依存関係をインストールします。

npm install

次に、server.js の 17 行目にブレークポイントを設定します。

コマンド パレットを開き (Ctrl + Shift + P キーか、Mac の場合は Cmd + Shift + P キー)、「Bridge to Kubernetes」と入力します。 [Bridge to Kubernetes: Configure](Bridge to Kubernetes: 構成) オプションを選択します。

[Bridge to Kubernetes: Configure]\(Bridge to Kubernetes: 構成\) コマンド

置き換えるサービス、開発用コンピューターから転送するためのポート、使用する起動タスクを構成するように求められます。

stats-api サービスを選択します。

接続するサービスを選択する

サービスを選択した後、ローカル アプリケーションの TCP ポートを入力するように求められます。 この例では、「3001」と入力します。

ポート番号の入力

起動タスクとして [Run Script: dev](スクリプトの実行: 開発) を選択します。

デバッガーの起動タスクを選択する

分離して実行するか、または分離しないで実行するオプションがあります。 分離して実行すると、自分の要求だけがローカル プロセスにルーティングされます。他の開発者は影響を受けずにクラスターを使用できます。 分離して実行しない場合、すべてのトラフィックがローカル プロセスにリダイレクトされます。 このオプションの詳細については、「分離して開発するためのルーティング機能の使用」を参照してください。 この例では、分離しないで実行する方法を使用します。

分離を選択する

Note

EndpointManager が管理者特権で実行して hosts ファイルを変更することを許可するように、VS Code に求められます。

Bridge to Kubernetes デバッグ プロファイルが正常に構成されました。

左側にあるデバッグ アイコンを選択し、[Run Script: dev with Kubernetes]\(スクリプトの実行: Kubernetes での開発\) を選択します。 [Run Script: dev with Kubernetes](スクリプトの実行: Kubernetes での開発) の横にある開始ボタンをクリックします。

デバッグ起動プロファイルを選択する

VS Code のステータス バーがオレンジに変わり、Kubernetes 拡張機能に接続されたことが示されたら、開発用コンピューターは接続されています。 開発用コンピューターが接続されると、置き換えている stats-api のトラフィックの、開発用コンピューターに対するリダイレクトが開始されます。

Bridge to Kubernetes を使用したデバッグ

todo-app のフロントエンド エントリ ポイントに移動します。 minikube の場合は、127.0.0.1 を使用します。 アプリのローカル エンドポイント URL にアクセスするには、ステータス バーの [Kubernetes] メニューを開き、エンドポイント エントリを選択します。

stats リンクを選択して、stats-api に要求を行います。

実行中の Web サイト - status リンクを選択する

最初にクラスターで開始されたトラフィックが、ローカルで実行されているバージョン (クラスターの外部) にリダイレクトされ、ブレークポイントがトリガーされたことがわかります。

再生を押して、透過的に要求の完了を続行させます。

これは、AKS 以外のクラスターで Bridge to Kubernetes を使用する方法の一例です。 次は、独自のプロジェクトで試してみてください。

クリーンアップ

このサンプルで生成された資産をクリーンアップするには、次を実行します。

kubectl delete namespace todo-app

次のステップ

Bridge to Kubernetes を使用して Azure Kubernetes Service (AKS) にアプリをデプロイすることもできます。 「AKS で Bridge to Kubernetes を使用する」を参照してください