Kekeの日記

エンジニア、読書なんでも

Telepresence概論

f:id:bobchan1915:20190520235144p:plain
Telepresence

動機

マイクロサービスになればなるほど、テストが難しくなってくるので、ローカルの開発環境を整えるの難しく、その問題を抱えるのは必然かなと思います。

今回はその時に使えるToolであるTelepresenceを使っていこうと思います。

Telepresenceって?

Telepresenceについて解説していきます。

Telepresenceとは、マイクロサービスを応援するKuberenetesのために速く、ローカル開発環境を整えるためのソフトウェア

注意点としては、単一サービスのみローカルでテストをできることです。

特徴

Telepresenceの特徴をまとめると以下の通りになります。

  1. ローカル環境でデバックをできる
  2. コードを変更してテストを即座にできる
  3. 実環境でテストをすることができる
  4. 開発環境に対してオーバヘッドはほとんど0に近いのでリソースなどを取られる心配がない
  5. 自分自身のツールを使うことができる

仕組み

Telepresenceは双方向ネットワークプロキシを通常Podに対して設定し、代役を果たします。

ローカルプロセスにデータをプロキシしていて、リモートのKubernetesクラスタにデータを送信します。

これによって

  • ローカル環境はリモートクラスタにフルアクセスすることができる
  • ローカル環境はKubernetesの環境変数、シークレット、そしてConfigMapなどにフルアクセスできる
  • リモートサービスがローカル環境へフルアクセスできる

ことが可能になります。

使う方法

使う方法は以下の通りです。

CLIツールをインストール

MacOSならばHom

$ brew cask install osxfuse
$ brew install datawire/blackbird/telepresence

使い方

1. Deploymentを置き換える

f:id:bobchan1915:20190520234927p:plain

--swap-deployment [Deployment名]を指定することによって、デプロイメントを置き換えることができます。

$ telepresence --swap-deployment hello-world --expose 8000 \
--run python3 -m http.server 8000 &

2. Remoteクラスタへ接続する

f:id:bobchan1915:20190520235058p:plain

クラスタ内からアクセスするように内部DNSなどを引いたり、Podを正しくアクセスすることができるかチェックをすることができます。

$ telepresence --run curl http://myservice:8000/

3. New Deploymentをデプロイする

f:id:bobchan1915:20190520235015p:plain

Deploymentを作成することができます。

telepresence --new-deployment -n [NAME_OF_TELEPRESENCE_NAME] myserver --run-shell

ここではNAME_OF_TELEPRESENCE_NAMEでdeploymentの名前を指定する。

そして

kubectl expose deployment hello-world --type=LoadBalancer --name=my-service

このようにして、Exposeをすることができる。

まとめ

Kubernetesでアプリケーションを書いたことがある人ならば、当たり前かもしれませんがTelepresenceはめちゃめちゃ便利なので、最高な開発環境には必須です。

特にXXX as Codeのように、「宣言的」である環境下においては、わざわざデプロイを待つ必要がなくなる上、実際のトラフィックを受けられ、ConfigMapやVolumnも使うことができるので非常に強力です。 クラスタ側には、オーバーヘッドがなく、導入するデメリットはありません。

簡単な記事でしたが、最低限は伝わったかと思います!ありがとうございました!

参考文献

www.telepresence.io