Kubernetesクラスターの遠隔操作による開発を支援するTelepresence

2021年5月26日(水)
松下 康之 - Yasuyuki Matsushita
ローカルの開発環境と本番環境の橋渡しをするTelepresenceを紹介する。

そこで登場したのがTelepresenceだ。

Telepresenceがその問題を解決する

Telepresenceがその問題を解決する

Telepresenceは「開発のためのカッコいいKubernetes VPN」「超強力なポートフォワードされたkubectl」「開発用PCとKubernetesクラスターのネットワークブリッジ」などと称されていることを紹介し、デベロッパーがどのようにTelepresenceを認識しているのかを紹介した。

「Telepresenceとは何か?」を紹介

「Telepresenceとは何か?」を紹介

その動作原理を簡単に紹介したのが次のスライドだ。ここではクラウド側にA、B、Cというマイクロサービスが存在するアプリケーションを想定した時に、そのAというサービスだけを開発用PC側で実行されるサービスに置き換えて通信を行うことで、A以外の設定や環境を変えずにテストができると解説している。

本番環境のサービスを開発用PCと置き換えて通信するTelepresence

本番環境のサービスを開発用PCと置き換えて通信するTelepresence

次のスライドでは具体的な例、ここでは3つのサービスで構成されるショッピングカートアプリケーションを使って解説を行った。Shopfront、Productcatalogue、Stockmanagerという3つのサービスが存在する典型的なECサイトを模したデモによってTelepresenceの機能を紹介している。図の中央上部に書かれたShopfrontというSpring Bootのアプリケーションを、開発用PCの中のアプリケーションと入れ替えて通信を行うというのがデモの主旨だ。

ECサイトを使ってTelepresenceのデモを実行

ECサイトを使ってTelepresenceのデモを実行

このデモでは画面を3つに分割して解説を行っている。左側はShopfrontのWebページ、右上はkubectlのコマンドを投入するターミナル画面、右下はKubernetesのPodのモニター画面だ。

ECサイトのデモ画面

ECサイトのデモ画面

デモの中ではnslookupコマンドでネットワーク環境を確認したり、実行中のプロセスにブレークポイントを設けて、値を変更してWebページに表示させたりするなど、開発中に必要な操作を実施してみせており、デベロッパーが欲しいと思われる機能を見せた形になった。

TelepresenceのデモでIntelliJから変数の値を変更しているところ

TelepresenceのデモでIntelliJから変数の値を変更しているところ

次のスライドではTelepresenceによる効果、利点を紹介している。特に開発用PCで使われているツールには制限はない。つまりどのようなツールであってもTelepresenceを使うことで、実行環境(開発環境もしくはステージング、本番環境)に開発用PCを置き換えて実行できるという部分を強調した形になった。必要要件としては当然ながら、ネットワーク接続、実行するデベロッパーがkubectlを実行できる特権を持っていること、MacもしくはLinux環境が必要であることが明記されている。Windowsを開発用PCとして使っている場合は、Windows 10(Version 1709より正式版)で導入されたWindows Subsystem for Linuxを使うことがドキュメントサイトに記載されている。

Telepresenceの利点を解説

Telepresenceの利点を解説

参考:Windows support - Telepresence: Fast, realistic local development for Kubernetes and OpenShift Origin microservices

またTelepresenceを使わないでリモートの開発環境に開発用PCを置き換えて実行することの難しさを「Don’t Try This at Home」というコピーとともに紹介している。

Telepresenceを使わないで同じことをやるのは難しいと訴求

Telepresenceを使わないで同じことをやるのは難しいと訴求

そして開発の規模、つまり開発環境、ステージング環境、本番環境などの違いによってどのようなワークフローになるのか? を紹介するスライドでは、本番環境しかないシンプルな組織、中規模組織で開発環境と本番環境が分かれている組織、本番環境に複数のnamespace(つまり複数のアプリケーション)が存在するような大規模な組織に分けて解説を行った。

シンプルな組織の場合は本番環境でTelepresenceを利用

シンプルな組織の場合は本番環境でTelepresenceを利用

この例では開発環境を兼ねた本番環境においてTelepresenceを実行し、リアルなトランザクションが開発用PCを通過していくというユースケースになる。しかしこれはあくまでも利用例として挙げたもので、実際には止めたほうが良いとコメントしていたことが印象的だった。

この例では開発環境と本番環境が分離されている

この例では開発環境と本番環境が分離されている

これが大部分の企業での開発環境及び本番環境だろう。開発環境で開発用PCがTelepresenceのProxy経由でコードを実行しテスト、それが上手くいけばCircleCIなどを使って本番環境に実装するという流れだ。

より大規模な例を紹介。これはドイツの不動産仲介企業Engel&Volkersの例

より大規模な例を紹介。これはドイツの不動産仲介企業Engel&Volkersの例

この例では、ドイツの不動産仲介企業Engel&VolkersのエンジニアChristian Goggia氏が、KubeCon EU 2019にて行ったセッションを元に解説を行った。この例はBazelというビルドツールと組み合わせて利用しているという。Roggia氏のプレゼンテーションは以下から参照して欲しい。

参考:Reproducible Development and Deployment with Bazel and Telepresence - Christian Roggia

Telepresenceのコンポーネント。ClientとProxy Server

Telepresenceのコンポーネント。ClientとProxy Server

Telepresence Proxy ServerをPersistentに

Telepresence Proxy ServerをPersistentに

現在のアーキテクチャーでは、Telepresenceが実行されるたびにProxy Serverが起動され、実行が終わると消去される仕組みだが、永続的に起動し続けるというモードも検討されていることを解説した。

マルチユーザーのサポートを検討中

マルチユーザーのサポートを検討中

現在のTelepresenceのアーキテクチャーは、開発用PCの上で実行されるClientと、ターゲットとなるシステムの中で実行されるProxy Serverとで構成されている。この構成は1ユーザーが1コンポーネント/サービスだけをスワップして実行するというやり方には適しているが、複数のコンポーネントを置き換えて実行するには適していない。

現状ではnamespaceを分けて利用するという形になるが、理想的とは言えないようだ。そしてマルチユーザーでのTelepresenceをイメージするために、例としてクリストファー・ノーランが監督した「インセプション」からの画像を使っているのは興味深い。「夢の中でさらに夢を見る」というややこしい入れ子状態を、マルチユーザーの環境でスワップするTelepresenceに模しているというわけだ。

特定のトランザクションだけをスワップする方式も検討中

特定のトランザクションだけをスワップする方式も検討中

このスライドでは、特定のクッキーを持つトランザクションだけを開発用PCにスワップする方式を検討していることを解説した。ヘッダーを読んで特定のトランザクションだけを間引きしてスワップするという発想らしい。

コンタクト先やリソースへのリンクを紹介

コンタクト先やリソースへのリンクを紹介

Telepresenceは開発用PCと実行環境のプロセスを置き換えて実行することで、実行環境の違いによるエラーなどを抑制するソリューションである。シンプルな発想から産まれたソリューションではあるが、利用例が上手く当てはまれば効果は大きいだろう。サンドボックスプロジェクトからインキュベーションに昇格するためには、さらに多様な使われ方とそれを可能にする機能拡張が求められるだろう。将来の動向に注目したい。

オープンソースプロジェクト:https://www.telepresence.io/

Ambassador Labsの提供する商用サービス:Ambassador Cloud | powered by Telepresence

著者
松下 康之 - Yasuyuki Matsushita
フリーランスライター&マーケティングスペシャリスト。DEC、マイクロソフト、アドビ、レノボなどでのマーケティング、ビジネス誌の編集委員などを経てICT関連のトピックを追うライターに。オープンソースとセキュリティが最近の興味の中心。

連載バックナンバー

サーバー技術解説

Tigeraのアドボケイトが、x86とARMのマルチアーキテクチャークラスターを解説

2022/4/7
ARMの優位性を解説しながら、ARMをx86クラスターに追加するマルチアーキテクチャークラスターを、デモを用いて解説。
システム開発イベント

KubeCon NA 2021からサービスメッシュの2セッションを紹介

2022/3/18
KubeCon NA 2021からサービスメッシュのLinkerdの最新情報とIstioを使ったユースケースのセッションを紹介する。
セキュリティイベント

KubeCon NA 2021、ソフトウェア開発工程のタンパリングを防ぐSLSAを解説

2022/3/9
KubeCon NA 2021のプレカンファレンスから、ソフトウェアサプライチェーンを実装するフレームワークSLSAを取り上げたセッションを紹介する。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています