リモート開発に Kubernetes を使う

クラウドネイティブなアプリケーションの大規模チーム開発では、ローカルな開発マシン上でアプリケーション全体を実行するのが困難な状況が起こり得るでしょう。アプリケーションをローカルで実行できないのは、幾つかの理由があります。

  • アプリケーションがローカルマシンが提供する以上のリソースを必要とする

  • アプリケーションがクラウドサービス、API、ネットワーク設定と、エミュレートできない依存関係がある

  • テストや検証に大規模データやネットワークトラフィックが必要となる

度々、これらが意味するところ、コードの変更を確認するには、継続的インテグレーションのパイプラインやステージング環境に依存する必要があります。これらにより、コードが動くところを見るためには、コミット、プッシュ、構築、テスト、デプロイするたびに時間を浪費して、かつ、厄介なワークフローになっています。

ローカルとリモートの組み合わせ

この問題に対する解決策の1つが、リモートデプロイ用のクラスタとローカルサービスとの統合です。実際の所これが意味するのは、自分の開発マシン上で docker run を使ってサービスを開始し、ローカルのサービスがネットワークを通して開発クラスタと通信できるようになります。リモート開発クラスタは、プロダクション環境に相当するワークロードを負担(ホスト)します。

開発環境は、ローカルで実行しているコンテナとリモートでのリソースを連結できるので、内部ループの簡素化とスピードアップに役立ちます。それには商用やオープンソースで複数のツールが利用可能です。それらを使い、ローカルとリモート間でハイブリッドな開発環境に使えるでしょう。以下は例です。

Telepresence

Telepresence はオープンソースの CNCF プロジェクトであり、リモートの Kubernetes クラスタとローカルサービスを統合するのに役立ちます。Telepresence は Kubernetes 内でトラフィックマネージャ(traffic manager)ポッドとして機能し、Telepresence クライアントは開発ワークステーション上のデーモンです。トラフィックマネージャは2種類のネットワークプロキシとして機能します。開発ワークステーション上で実行しているコンテナとクラスタとの間で、接続を受け付けたりトラフィックを経路付けしたりします。

Telepresence のハイレベルアーキテクチャ

ローカルコンテナをクラスタと統合するには、複数のオプションがあります。

  • 傍受(intercepts) (捕捉)なし

    • 最も基本的な統合では、一切傍受しません。コンテナとクラスタ間の通信をシンプルに確立するだけです。これにより、コンテナは API やデータベースといったクラスタリソースにアクセスできるようになります。

  • グローバル傍受(global intercepts)

    • サービスに対してグローバル傍受をセットアップできます。これが意味するのは、サービスに対する全てのトラフィックが、ローカルコンテナから Kubernetes へと 再経路付け(re-routed) されます。

  • パーソナル傍受(personal intercepts)

    • グローバル傍受よりも更に高度な方法がパーソナル傍受です。パーソナル傍受により、ローカルのコンテナに対するリクエストがあるとき、経路付けをすべきとする条件を定義できるようにします。条件として設定できるのは経路付けリクエストのみであり、これには特定の HTTP ヘッダ、特定の API への経路に対するリクエストが含まれます。

Telepresence は Docker とシームレスに統合しており、今日から試せます。更に学ぶには以下のドキュメントを御覧ください。

Docker × Ambassador

大規模チームとの開発クラスタの共有は、恵みにも呪いにもなります。あなたのチームメイトがクラスタに接続すると、あなたは彼らが何をしているのか見えるようになるからです。しかし、彼らも意図せずあなたの共有サービスを傍受する可能性があります。Telepresence の開発者が作った Ambassador Labs は、チームがクラスタを共有するのに役立つサブスクリプションプラットフォームを運営しています。サービス上で実行している全ての傍受を識別できます。各開発者はコードレビュー中に共有できる、認証されたプレビュー URL を生成できます。

Docker と Ambassador Labs はローカルとリモートのハイブリッドな開発環境を、簡単かつシームレスにできるようにするため協働しています。Ambassador Cloud にサインインして Telepresence を使うには、自分の Docker ID で接続できます。始めるには:

  1. Docker × Ambassador page ページに移動します。

  2. 自分の Docker ID にサインインします。

  3. Ambassador Cloud アプリを認証します。

Telepresence のセットアップ、開発クラスタに接続し、それから傍受の作成について、手順を追って説明します。

参考

Using Kubernetes for remote development

https://docs.docker.com/develop/remote-development/