Concourse システムアーキテクチャ
Concourse CIのシステムアーキテクチャについて記述する。
アーキテクチャ
※ 参考は、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の特徴
以下の特徴をもつ。
- シンプルなシステム
- Workerノードの簡単なスケール
- 再現しやすいアプリケーションビルド環境
シンプルなシステム
- スタンドアローンのバイナリファイルで動作する
- パイプラインのジョブごとにDockerコンテナを起動することで冪等性の担保
- BOSHによるConcourseクラスタの管理
また、Concourseは開発者目線としてもYAMLだけでの管理で導入がしやすい。
YAMLファイルでパイプラインを記述して、flyコマンドで反映するだけで実行することができる。
Workerノードの簡単なスケール
パイプライン数が増えて、ジョブ実行の速度やディスク容量がいっぱいになったときには、Workerノードを増やすだけでスケールすることができる。
再現しやすいアプリケーションビルド環境
Pipelineがステートレスである。
またDockerコンテナによるジョブなので、環境依存なく好きなイメージでBuildジョブを作成することができる。