テレプレゼンスとドッカーを使用したテスト

ローカルの変更をリモートのKubernetes環境と同期する方法を希望したことはありますか? そのためのDocker拡張機能があります! Telepresence が Docker Desktop と提携して統合テストを迅速に実行し、どこから始めればよいかについて詳しく知るために、以下をお読みください。

この記事のバージョンは、 大使のブログ

テレプレゼンスとドッカー 900x600 1

Docker デスクトップのテレプレゼンス拡張機能を使用してローカルで統合テストを実行する

マイクロサービス ベースのアプリケーションのテストは、リソース要件のためにローカルで実行できなくなった場合、困難になります。 テストのためにクラウドに移行するのは簡単ですが、ローカルの変更をリモートのKubernetes環境とどのように同期しますか?

テレプレゼンスを使用してリモートデプロイを待つ代わりに、ローカルで統合テストを実行し、Docker Desktop の拡張機能として利用できるようになりました。 Docker でテレプレゼンスを使用すると、Docker ツールチェーンと連携する柔軟なリモート開発環境が得られるため、Kubernetes ベースのアプリのコーディングとテストをより迅速に行うことができます。

次の簡単な手順で Docker のテレプレゼンスをインストールします。

  1. Docker デスクトップをダウンロードします
  2. Docker デスクトップを開きます。
  3. Dockerダッシュボードで、左側のナビゲーションバーにある[拡張機能の追加]をクリックします。
  4. 拡張機能マーケットプレイスで、アンバサダー テレプレゼンス拡張機能を検索します。
  5. [インストール]をクリックします。

テレプレゼンス拡張機能を介してアンバサダークラウドに接続します。

テレプレゼンス拡張機能を Docker Desktop にインストールした後、テレプレゼンス拡張機能をアンバサダー クラウドに接続するための API キーを生成する必要があります。

  1. Docker デスクトップでテレプレゼンス拡張機能をクリックし、[開始する] をクリックします。
  2. 「API キーの取得」ボタンをクリックして、ブラウザー・ウィンドウでアンバサダー・クラウドを開きます。
  3. Google、GitHub、または Gitlab アカウントでサインインします。 アンバサダークラウドが開き、プロファイルが表示され、API キーが表示されます。
  4. API キーをコピーし、Docker ダッシュボードの [API キー] フィールドに貼り付けます。

Docker デスクトップでクラスターに接続します。

  1. ドロップダウンメニューから目的のクラスターを選択し、[次へ] をクリックします。 これで、このクラスターが kubectl の現在のコンテキストに設定されます。
  2. [[クラスター] に接続] をクリックします。 クラスターが接続され、 インターセプトを作成できるようになりました。

上記の記録に示されている例を実際に使用するには、次の手順に従ってください。

1. Docker デスクトップ Kubernetes クラスターをローカルで有効にして起動する 1. 

テレプレゼンス拡張機能を Docker デスクトップにまだインストールしていない場合は、インストールします。

2.ローカルのDockerデスクトップクラスターにemojivotoアプリケーションをインストールします(これを使用してリモートK8sクラスターをシミュレートします)。

次のコマンドを使用して、Emojivoto アプリケーションをクラスターに適用します。

kubectl apply -k github.com/BuoyantIO/emojivoto/kustomize/deployment

3. Docker を使用して 1 つのコンテナーで Web サービスを開始します。

ファイル docker-compose.yml を作成し、そのファイルに以下を貼り付けます。

version: '3'

services:
web:
image: buoyantio/emojivoto-web:v11
environment:
- WEB_PORT=8080
- EMOJISVC_HOST=emoji-svc.emojivoto:8080
- VOTINGSVC_HOST=voting-svc.emojivoto:8080
- INDEX_BUNDLE=dist/index_bundle.js
ports:
- "8080:8080"
network_mode: host

ターミナルで実行 docker compose up して、ローカルでWebサービスの実行を開始します。

4.テストコンテナを使用して、Emojivotoの「リスト」APIエンドポイントをカールし、失敗するのを確認します(バックエンドクラスターにアクセスできないため)。

新しいターミナルでは、別のコンテナでEmojivotoアプリをテストします。 次のコマンドを実行します docker run -it --rm --network=host alpine。 次に、curl: apk --no-cache add curlをインストールします。

最後に、curl localhost:8080/api/list、バックエンドクラスターに接続されておらず、絵文字または投票サービスを解決できないため、rpcエラーメッセージが表示されます。

> docker run -it --rm --network=host alpine
apk --no-cache add curl
fetch https://dl-cdn.alpinelinux.org/alpine/v3.15/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.15/community/x86_64/APKINDEX.tar.gz
(1/5) Installing ca-certificates (20211220-r0)
(2/5) Installing brotli-libs (1.0.9-r5)
(3/5) Installing nghttp2-libs (1.46.0-r0)
(4/5) Installing libcurl (7.80.0-r0)
(5/5) Installing curl (7.80.0-r0)
Executing busybox-1.34.1-r3.trigger
Executing ca-certificates-20211220-r0.trigger
OK: 8 MiB in 19 packages

curl localhost:8080/api/list
{"error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp: lookup emoji-svc on 192.168.65.5:53: no such host\""}

5.Dockerデスクトップ経由でテレプレゼンス接続を実行します。

Dockerデスクトップを開き、左側のテレプレゼンス拡張機能をクリックします。 青い「接続」ボタンをクリックします。 アンバサダークラウドからAPIキーをコピーして貼り付けます(まだ行っていない場合)(https://app.getambassador.io/cloud/settings/licenses-api-keys)。 メニューから適切な Kubernetes コンテキストを選択して、Emojivoto アプリケーションをデプロイしたクラスターを選択します。 [次へ] をクリックすると、拡張機能がテレプレゼンスをローカル クラスタに接続します。

6.カールを再実行し、これが成功するのを確認します。

次に、curlコマンドを再実行しましょう。 エラーの代わりに、リモートクラスターに接続されていることを示す絵文字のリストが返されます。

curl localhost:8080/api/list
[{"shortcode":":joy:","unicode":"😂"},{"shortcode":":sunglasses:","unicode":"😎"},{"shortcode":":doughnut:","unicode":"🍩"},{"shortcode":":stuck_out_tongue_winking_eye:","unicode":"😜"},{"shortcode":":money_mouth_face:","unicode":"🤑"},{"shortcode":":flushed:","unicode":"😳"},{"shortcode":":mask:","unicode":"😷"},{"shortcode":":nerd_face:","unicode":"🤓"},{"shortcode":":gh

7.次に、K8sクラスターで実行されているWebサービスに送信されるトラフィックを「インターセプト」し、テレプレゼンスインターセプトを作成して「ローカル」Docker Composeインスタンスに再ルーティングします。

emojivoto名前空間を選択し、「web」の横にあるインターセプトボタンをクリックします。 ターゲット ポートを 8080 に、サービス ポートを 80 に設定し、インターセプトを作成します。

インターセプトが作成されると、UI に一覧表示されます。 3つのドットが付いた近くの青いボタンをクリックして、プレビューURLにアクセスします。 ブラウザーでこの URL を開くと、Kubernetes クラスターで実行されている依存関係を使用して、Web サービスのローカル インスタンスを操作できます。

おめでとうございます、テレプレゼンスインターセプトと共有可能なプレビューURLが正常に作成されました。 これをチームメイトに送信すると、チームメイトはローカルサービスがDockerデスクトップクラスターと対話した結果を確認できます。

 

テレプレゼンスについてもっと知りたい、または他の生活を改善するDocker拡張機能を見つけたいですか? 次の関連リソースを確認してください。