Wantedly Engineering Handbook
  • Wantedly Engineering Handbook
  • まえがき
  • 第一部:開発チームへの案内
    • 技術とアーキテクチャ
    • プロダクト概要(未執筆)
    • 開発チームの構造
    • コミュニケーションの全体
    • ドキュメンテーション(未執筆)
    • カレンダー
    • 障害対応の心構え
    • 効率的な社内知識の調べ方
    • 外部発信(執筆中)
  • 第二部:技術領域への案内
    • Apps
      • アプリを提供するプラットフォーム
      • デザインシステム入門
      • Web アプリのアーキテクチャ
      • プロダクトデザイナーと上手に協働するための心得
      • Web アプリのデザインシステムライブラリ
      • Web アプリ共通ライブラリ "React Shared Component" の紹介
      • モバイルアプリのアーキテクチャ
      • モバイルアプリのデザインシステムライブラリ(未執筆)
    • The System
      • protobuf スキーマと gRPC 通信
      • 実践: gRPC in Ruby
      • 実践: gRPC in Go
      • GraphQL Gateway - アプリ向けに API を公開する
      • Wantedly Visit で BFF GraphQL サーバーを辞めた理由
      • 実践: GraphQL スキーマ設計(未執筆)
      • API での認可処理 (Authorization)
      • マイクロサービス共通ライブラリ "servicex" の紹介
      • 非同期メッセージング処理入門(未執筆)
      • バッチ処理入門(未執筆)
    • Infrastructure
      • Infrastructure Squad
      • プロダクト開発のための Kubernetes 入門
      • インフラ構成概要
      • リリース・デプロイ戦略を支える技術
      • SaaS を活用する:New Relic, Honeybadger, Datadog
    • Data
      • データ基盤入門
      • レコメンデーション
      • Looker 入門
      • 推薦システムの開発に使っているツール
    • 開発プロセス
      • Git の慣習
      • ポストモーテムの取り組み
      • 負債返済日の取り組み
      • プロダクトの課題発見及び解決
      • ソフトウェアデザインの基礎
      • コードレビュー
      • コーディング規約
      • リリース・デプロイ戦略
      • 上長承認が必要な作業
      • アーキテクチャディシジョンレコード(ADR)
      • 作業ログを残す意味
      • 多言語化対応(i18n)
      • メール開発
    • 開発ツール
      • 社内利用している開発ツールの最新状況
      • kube
      • Code Coverage
      • Kubefork
  • おわりに
    • ロードマップ(未執筆)
    • Handbook の書き方
    • コントリビューター
  • 付録
    • 社内用語集
    • 主要な GitHub レポジトリのリスト(未執筆)
    • 今後の挑戦・未解決イシュー(未執筆)
    • プロダクト開発組織のバリュー(未執筆)
    • 採用についての考え方(未執筆)
GitBook提供
このページ内
  • fork とは
  • 開発手法
  • local fork
  • remote fork
  • PR Preview

役に立ちましたか?

  1. 第二部:技術領域への案内
  2. 開発ツール

Kubefork

前へCode Coverage次へロードマップ(未執筆)

最終更新 2 年前

役に立ちましたか?

この章では、Wantedly で使われている Kubefork の概要について説明します。

fork とは

Kubefork (社内では単に fork と呼ばれることが多いです) とは、 任意の identifier に基づく Virtual Cluster を作成すること、と定義されています。

Virtual Cluster について説明するために、まずマイクロサービス開発においてのあるあるを説明します。

あるコンポーネントを手元で開発するためには、コンポーネントが通信する別のコンポーネントのことも考える必要があります。一般には通信部分をモックしたり、 docker-compose などを使って手元に関連するプロセスを建てるなどの戦略が考えられます。このとき、コンポーネントのことをよく知らない人は何に依存しているかはよく知らないため、開発がうまく行かないときに何が悪いのかの切り分けが難しくなってしまう、といった問題があります。

開発用クラスタにはコンポーネントが一式揃っているため、開発したコンポーネントをクラスタにデプロイする、といった方法も考えられます。しかし、この方法は他の開発者にも迷惑がかかってしまうためうまくいきません。開発用クラスタを個々人に一つづつ割り当てるという方法もありえますが、コスト的な問題で難しいでしょう。

そこで、Wantedly では Virtual Cluster という概念を用いてマイクロサービス開発を行えるようにしています。 実際に存在する開発用クラスタに対して、仮想的なクラスタという意味で Virtual Cluster と名付けられています。 技術的には、特定のヘッダが付いている通信を特定の service にルーティングする仕組みで実現されています。

上記を説明した図が次の図です。

開発者は 図の2つめのマイクロサービスを開発するために A という Virtual Cluster を作成しました。変更を加えた マイクロサービスを A にデプロイすることで、他の開発者に迷惑をかけずに 変更したマイクロサービスが動くかどうか、開発環境へのリクエストを使って試すことができます。

このようにして、社内の Web アプリケーションの開発では開発者それぞれ Virtual Cluster を使って開発を行っています。

開発手法

fork を用いた開発手法について次に示したあと、それぞれ説明します。

  • local fork

  • remote fork

  • PR Preview

local fork

次のようなコマンドを実行することで local fork を行うことができます。

kube <env> fork

リクエストが手元に来るだけでなく、クラスタ上の service へのリクエストも手元から行えるようになるので、クラスタ上で開発をしているような体験が得られます。

remote fork

次のようなコマンドを使うと、現状開発しているブランチの Docker Image を Virtal Cluster 上にデプロイすることができます。

kube <env> fork remote -c

手元に開発環境がなくても、ファイルの編集と git push ができれば動作確認は remote fork で行う ということが可能です。

PR Preview

GitHub 上で Pull Request が作成されると、その Pull Request に対応した Virtual Cluster が作成されます。また、アプリケーションに到達するためのURLがコメントされるので機能の確認などに使うことができます。

話を聞きに行きたい

もっと知りたい

local fork を実行すると、 Virtual Cluster が作成されたあと、 が起動し、 Virtual Cluster 宛のリクエストが手元に来るようになります。

Slack:

Slack:

Telepresence
#dx
#kube-fork-testers
マイクロサービスでもポチポチ確認するための Kubefork
dev-docs/fork(internal)
virtual cluster の説明
PR Preview の例