Start Building for Free
CircleCI.comアカデミーブログコミュニティサポート

CircleCI Server v3.x の概要

2 months ago2 min read
Server v3.x
サーバー管理者
このページの内容

はじめに

CircleCI Server は、コンプライアンスやセキュリティ上のニーズからファイアウォール内やプライベートクラウド、データセンターでの運用が求められる企業向けのオンプレミス型 CI/CD プラットフォームです。

CircleCI Server は、CircleCI のクラウドサービスと同じ機能を提供しますが、お客様の Kubernetes クラスタ内で動作します。

サービスs Architecture
Figure 1. CircleCI Server v3.x のアーキテクチャ

CircleCI Server アプリケーションは、ロードバランサーを使って 4 つのサービスを公開しています。 これらのロードバランサーのうち 3 つは、Nomad クラスタと仮想マシンに接続するための VPC (Virtual Private Cloud) 内のロードバランサーです。 必要に応じて、フロントエンド ロードバランサーを非公開にし、パブリックインターネットからのアクセスを遮断することも可能です。 詳細については、 ロード バランサーに関するページ を参照してください。

ロード バランサータイプポート説明

フロントエンド GUI プロキシおよび API

外部

80、443

Web アプリケーションを公開する

Nomad コントロール プレーン

内部

4647

Nomad ランナーの RPC プロトコルを公開する

出力プロセッサ

内部

8585

Nomad ランナーの出力を取り込む

VM サービス

内部

3000

仮想マシンをプロビジョニングする

このアプリケーションでは、いくつかの外部ポートが公開されています。 これらのポートは、以下の表に記載されている様々な機能に使用されます。

ポート番号プロトコル方向送信元/送信先使用備考

80

TCP

インバウンド

エンド ユーザー

HTTP Web アプリ トラフィック

443

TCP

インバウンド

エンド ユーザー

HTTP Web アプリ トラフィック

8800

TCP

インバウンド

管理者

管理者コンソール

22

TCP

インバウンド

管理者

SSH

踏み台ホストでのみ必要

64535 ~ 65535

TCP

インバウンド

ビルドへの SSH 接続

Nomad クライアントでのみ必要

CircleCI Server では、 Nomad スケジューラを使用して CI ジョブのスケジュールを設定します。 Nomad コントロールプレーンは Kubernetes 内で動作します。一方、スケジュールされた CircleCI ジョブの実行を担当する Nomad クライアントは、クラスタ外部にプロビジョニングされます。 CircleCI Server では、Nomad クライアント自体または専用の仮想マシン (VM) で Docker ジョブを実行できます。

ジョブのアーティファクトと出力は、Nomad ジョブからオブジェクト ストレージ (S3、GCS、またはその他のサポートされているオプション) に直接送信されます。 オブジェクト ストレージには、監査ログやアプリケーションのその他のアイテムも保存されます。そのため、Kubernetes クラスタと Nomad クライアントの両方がオブジェクト ストレージにアクセスできる必要があります。

サービス

CircleCI Server 3.0 は、以下のサービスで構成されています。 それぞれの説明と、各サービスで障害が発生した場合の影響を以下に示します。

Serviceコンポーネント説明障害発生時の影響備考

api-service

アプリコア

GraphQL API を提供します。 この API は、Web フロントエンドのレンダリング データを提供します。

多くの UI 要素 (コンテキストなど) が完全に機能しなくなります。

audit-log-service

アプリコア

監査ログイベントを blob ストレージに長期保存します。

一部のイベントが記録されなくなります。

builds-service

アプリコア

www-api から取り込みを行い、plans-service、workflows-conductor、orbs-service に送信します。

circleci-mongodb

実行

プライマリ データストア

circleci-postgres

マイクロサービス用データ ストレージ

circleci-rabbitmq

パイプラインと実行

ワークフロー メッセージ、テスト結果、使用状況、cron、出力、通知、スケジューラーのキュー.

circleci-redis

実行

リクエストのキャッシュおよびレート制限の計算のために、一時的なデータ (ビルドログなど) をキャッシュします。

キャッシュを適切に行えない場合、VCS の呼び出しが多くなり VCS からレート制限を適用されることがあります。

circleci-telegraf

Telegraf は StatsD メトリクスを収集します。 CircleCI サービスのホワイトボックスメトリクスはすべて、StatsD メトリクスを発行します。これらは Telegraf に送信されますが、他の場所 (Datadog や Prometheus など) にエクスポートするように設定することもできます。

circleci-vault

シークレット用にサービスとしての暗号化と復号化を実行する HashiCorp Vault

config

contexts-service

アプリ コア

暗号化されたコンテキストを保存、提供します。

コンテキストを使用するすべてのビルドに失敗するようになります。

cron-service

パイプライン

スケジュールされたワークフローをトリガーします。

スケジュールされたワークフローが実行されなくなります。

dispatcher

実行

ジョブをタスクに分割し、実行用にスケジューラーに送信します。

Nomad にジョブが送信されなくなります。 run キューのサイズは増加しますが、著しいデータ損失が起こることはありません。

domain-service

アプリ コア

CircleCI ドメイン モデルに関する情報を保存、提供します。 アクセス許可および API と連携しています。

ワークフローを開始できなくなります。 一部の REST API 呼び出しに失敗し、CircleCI UI で 500 エラーが発生する可能性があります。 LDAP 認証を使用している場合、すべてのログインに失敗するようになります。

exim

一般公開時には削除されます。ただしユーザーは削除後も既存の MTA にメール送信用の認証情報を提供することができます。

メール通知が送信されなくなります。

frontend

フロントエンド

CircleCI Web アプリと www-api プロキシ

UI と REST API が利用できなくなります。GitHub/GitHub Enterprise からジョブがトリガーされなくなります。 ビルドの実行はできますが、情報は更新されません。

1 秒あたりのリクエスト レート上限は 150、ユーザー 1 人あたりの瞬間リクエスト レート上限は 300 です。

inject-bottoken

"ボット トークン" を MongoDB に挿入する Kubernetes ジョブ。 ボット トークンは、サービス間通信用の認証トークンです。

主に www-api で使用されます。

kotsadm-kots

ライセンス

メインの KOTS アプリケーション。 CircleCI Server のアップグレードと設定を行う KOTS 管理者コンソールを実行します。

CircleCI Server のアップグレードと設定が行えなくなります。 管理者コンソールは使用できません。

kotsadm-migrations

ライセンス

Kotsadm の更新に合わせてデータベースの移行を行います。

kotsadm-minio

ライセンス

KOTS ライセンス用のオブジェクトストレージ

kotsadm-postgres

ライセンス

KOTS ライセンス用のデータベース

legacy-notifier

アプリ コア

外部サービス (Slack、メールなど) への通知を処理します。

prometheus

Server

メトリクスに使用します。

orb-service

パイプライン

Orb レジストリと設定ファイルの間の通信を処理します。

output-processor

実行

ジョブの出力とステータスの更新を受け取り、MongoDB に書き込みます。 また、キャッシュとワークスペースにアクセスし、キャッシュ、ワークスペース、アーティファクト、テスト結果を保存するための API を実行中のジョブに提供します。

permissions-service

アプリ コア

CircleCI のアクセス権インターフェイスを提供します。

ワークフローを開始できなくなります。 一部の REST API 呼び出しに失敗し、CircleCI UI で 500 エラーが発生する可能性があります。

scheduler

実行

受信したタスクを実行します。 Nomad サーバーと連携しています。

Nomad にジョブが送信されなくなります。 run キューのサイズは増加しますが、著しいデータ損失が起こることはありません。

slanger

server

CircleCI アプリにリアルタイム イベントを提供します。

UI のリアルタイム更新が停止しますが、ハードリフレッシュは引き続き機能します。

test-results

実行

テスト結果ファイルを解析してデータを保存します。

ジョブについてテストの失敗やタイミングのデータが生成されなくなります。 サービスが再起動するとバックフィルが行われます。

vm-gc

コンピューティング管理

古いマシンやリモート Docker インスタンスを定期的に確認し、vm-service にそれらの削除をリクエストします。

このサービスを再起動するまで、古い vm-service インスタンスが破棄されなくなる可能性があります。

vm-scaler

マシン

マシンとリモート Docker ジョブの実行用にプロビジョニングするインスタンス数を増やすように、vm-service に定期的にリクエストします。

マシンとリモート Docker 用の VM インスタンスがプロビジョニングされなくなり、容量不足でジョブとそれらの Executor を実行できなくなる可能性があります。

EKS と GKE ではオーバーレイが異なります。

vm-service

マシン

利用可能な vm-service インスタンスのインベントリ管理と、新しいインスタンスのプロビジョニングを行います。

マシンまたはリモート Docker を使用するジョブが失敗するようになります。

workflows-conductor-event-consumer

パイプライン

パイプラインを実行するために VCS から情報を取得します。

VCS に変更があっても、新しいパイプラインが実行されなくなります。

workflows-conductor-grpc-handler

パイプライン

gRPC 経由での情報の変換を支援します。

web-ui-*

フロントエンド

フロントエンド Web アプリケーションの GUI のレンダリングに使用するマイクロ フロントエンド (MFE) サービスです。

各サービス ページを読み込むことができなくなります。 たとえば、web-ui-server-admin で障害が発生した場合、CircleCI Server の管理者ページを読み込めなくなります。

MFE は、app.<my domain here> での Web アプリケーションのレンダリングに使用されます。

プラットフォーム

CircleCI Server は、Kubernetesクラスタ内でのデプロイを想定しています。 仮想マシンサービス(VMサービス)により、独自の EKS や GKE を活用して VM イメージを動的に作成することができます。

EKS または GKE 以外でインストールする場合は、一部のマシンビルドと同じ機能を利用するために追加作業が必要です。 CircleCI ランナーを設定することで、VM サービスと同じ機能を、より幅広い OS およびマシンタイプ(MacOS など)で利用できるようになります。

CircleCI では、インストールするプラットフォームを幅広くサポートできるよう最善を尽くしています。 可能な限り環境に依存しないソリューションを使用しています。 ただし、すべてのプラットフォームやオプションをテストしているわけではありません。 そのため、テスト済み環境のリストを提供しており、継続的に拡大していく予定です。 定期的にテストし、サポートするプラットフォームのリストに OpenShift を追加する予定です。

環境状態備考

EKS

テスト済み

GKE

テスト済み

Azure

テスト未実施

Minio の Azure ゲートウェイとランナーで動作する必要があります。

Digital Ocean

テスト未実施

Minio Digital Ocean ゲートウェイとランナーで動作する必要があります。

OpenShift

テスト未実施

動作しないことが分かっています。

Rancher

テスト未実施

Minio とランナーで動作する必要があります。


ドキュメントの改善にご協力ください

このガイドは、CircleCI の他のドキュメントと同様にオープンソースであり、 GitHub でご利用いただけます。 ご協力いただき、ありがとうございます。

サポートが必要ですか

CircleCI のサポートエンジニアによる、サービスに関する問題、請求およびアカウントについての質問への対応、設定の構築に関する問題解決のサポートを行っています。 サポートチケットを送信して、CircleCI のサポートエンジニアにお問い合わせください。日本語でお問い合わせいただけます。

または、 サポートサイト から、サポート記事やコミュニティフォーラム、トレーニングリソースをご覧いただけます。