Concourse システムアーキテクチャ

2017/12/20

Concourse システムアーキテクチャ

Concourse CIのシステムアーキテクチャについて記述する。

Concourse document

アーキテクチャ

※ 参考は、Pivotal documentation。
Concourse architecture

ATC

Httpサーバー。デフォルト8080ポートで起動する。
以下の役割を持つ。

  • Concourse web UI
  • flyコマンドによるパイプライン制御
  • Concourse Workerノードのスケジュール管理機能

TSA

SSHサーバー。デフォルト2222ポートで起動する。
以下の役割を持つ。

  • ATCサーバーで利用するWorkerを安全に登録
  • Beaconサーバーと通信して、リバースSSHトンネルとなる
  • 30秒間隔でWorkerノードに生存確認を行う

PostgreSQL

Concourseパイプラインデータ、ビルドのConfig情報、ビルドのログを保存するデータストア。

Beacon

Concourseビルドパイプラインの実行準備をATCサーバーに登録する役割を持つ。

Garden

Httpサーバー。デフォルト7777ポートで起動する。
以下の役割を持つ。

  • ATCサーバの制御とパイプラインコンテナの管理を行う
  • Concourseのリソース管理を行う
  • ConcourseパイプラインのTaskを実行する

Baggageclaim

Httpサーバー。デフォルト7788ポートで起動する。
以下の役割を持つ。

  • ATCサーバの制御とパイプラインコンテナで利用するマウント管理を行う
  • VolumeのCache等の機能は、Baggageclaimで行う

Vaultについて

Concourseは、秘密鍵等の情報を保持するのには適していないのでVaultとの連携が可能になっている。
ビルド時に、Githubの鍵やオブジェクトストレージの秘密情報をVault経由で取得することができる。

以下のドキュメントに情報あり。
Credential Management

Concourseの特徴

以下の特徴をもつ。

  1. シンプルなシステム
  2. Workerノードの簡単なスケール
  3. 再現しやすいアプリケーションビルド環境

シンプルなシステム

  • スタンドアローンのバイナリファイルで動作する
  • パイプラインのジョブごとにDockerコンテナを起動することで冪等性の担保
  • BOSHによるConcourseクラスタの管理

また、Concourseは開発者目線としてもYAMLだけでの管理で導入がしやすい。
YAMLファイルでパイプラインを記述して、flyコマンドで反映するだけで実行することができる。

Workerノードの簡単なスケール

パイプライン数が増えて、ジョブ実行の速度やディスク容量がいっぱいになったときには、Workerノードを増やすだけでスケールすることができる。

再現しやすいアプリケーションビルド環境

Pipelineがステートレスである。
またDockerコンテナによるジョブなので、環境依存なく好きなイメージでBuildジョブを作成することができる。