Kubernetesクラスターの遠隔操作による開発を支援するTelepresence
そこで登場したのがTelepresenceだ。
Telepresenceは「開発のためのカッコいいKubernetes VPN」「超強力なポートフォワードされたkubectl」「開発用PCとKubernetesクラスターのネットワークブリッジ」などと称されていることを紹介し、デベロッパーがどのようにTelepresenceを認識しているのかを紹介した。
その動作原理を簡単に紹介したのが次のスライドだ。ここではクラウド側にA、B、Cというマイクロサービスが存在するアプリケーションを想定した時に、そのAというサービスだけを開発用PC側で実行されるサービスに置き換えて通信を行うことで、A以外の設定や環境を変えずにテストができると解説している。
次のスライドでは具体的な例、ここでは3つのサービスで構成されるショッピングカートアプリケーションを使って解説を行った。Shopfront、Productcatalogue、Stockmanagerという3つのサービスが存在する典型的なECサイトを模したデモによってTelepresenceの機能を紹介している。図の中央上部に書かれたShopfrontというSpring Bootのアプリケーションを、開発用PCの中のアプリケーションと入れ替えて通信を行うというのがデモの主旨だ。
このデモでは画面を3つに分割して解説を行っている。左側はShopfrontのWebページ、右上はkubectlのコマンドを投入するターミナル画面、右下はKubernetesのPodのモニター画面だ。
デモの中ではnslookupコマンドでネットワーク環境を確認したり、実行中のプロセスにブレークポイントを設けて、値を変更してWebページに表示させたりするなど、開発中に必要な操作を実施してみせており、デベロッパーが欲しいと思われる機能を見せた形になった。
次のスライドではTelepresenceによる効果、利点を紹介している。特に開発用PCで使われているツールには制限はない。つまりどのようなツールであってもTelepresenceを使うことで、実行環境(開発環境もしくはステージング、本番環境)に開発用PCを置き換えて実行できるという部分を強調した形になった。必要要件としては当然ながら、ネットワーク接続、実行するデベロッパーがkubectlを実行できる特権を持っていること、MacもしくはLinux環境が必要であることが明記されている。Windowsを開発用PCとして使っている場合は、Windows 10(Version 1709より正式版)で導入されたWindows Subsystem for Linuxを使うことがドキュメントサイトに記載されている。
またTelepresenceを使わないでリモートの開発環境に開発用PCを置き換えて実行することの難しさを「Don’t Try This at Home」というコピーとともに紹介している。
そして開発の規模、つまり開発環境、ステージング環境、本番環境などの違いによってどのようなワークフローになるのか? を紹介するスライドでは、本番環境しかないシンプルな組織、中規模組織で開発環境と本番環境が分かれている組織、本番環境に複数のnamespace(つまり複数のアプリケーション)が存在するような大規模な組織に分けて解説を行った。
この例では開発環境を兼ねた本番環境においてTelepresenceを実行し、リアルなトランザクションが開発用PCを通過していくというユースケースになる。しかしこれはあくまでも利用例として挙げたもので、実際には止めたほうが良いとコメントしていたことが印象的だった。
これが大部分の企業での開発環境及び本番環境だろう。開発環境で開発用PCがTelepresenceのProxy経由でコードを実行しテスト、それが上手くいけばCircleCIなどを使って本番環境に実装するという流れだ。
この例では、ドイツの不動産仲介企業Engel&VolkersのエンジニアChristian Goggia氏が、KubeCon EU 2019にて行ったセッションを元に解説を行った。この例はBazelというビルドツールと組み合わせて利用しているという。Roggia氏のプレゼンテーションは以下から参照して欲しい。
参考:Reproducible Development and Deployment with Bazel and Telepresence - Christian Roggia
現在のアーキテクチャーでは、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
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- KubeCon NA 2020 LinkerdとAmbassadorを使ったマルチクラスター通信を紹介
- CNDT2021、クラウドネイティブなシステムにおけるデバッグ手法を紹介
- Kubernetes上のアプリケーション開発を加速させるツール(2) Telepresence
- API gatewayのGlooとAmbassadorがそれぞれ最新バージョンをリリース
- CNCFのサンドボックスプロジェクト、カオスエンジニアリングのLitmus Chaosを紹介
- フィーチャーフラグを抽象化するOpenFeatureとは?
- KubeCon NA 2021プレカンファレンスのWASM Dayの後半を紹介
- KubeCon Europe開幕、初日のキーノートではLinkerd、OpenTelemetryに注目
- マルチクラウドを制御するユニバーサルなコントロールプレーンCrossplane
- OpenShift Commons GatheringからMicroShiftとCockroachDBを紹介