Skip to content

Cornus とは

Cornus は、docker composedocker CLI、Dev Container という Docker の開発ワークフローを、単一の Go バイナリから Kubernetes クラスター (または通常の Docker ホスト) に持ち込むためのソフトウェアです。通常は社内プラットフォームで別々に運用する三つのツールを、自己完結した一つのサービスにまとめます。小規模なチームでも、レジストリ、BuildKit デーモン、GitOps コントローラーを個別に用意することなく、Compose プロジェクトをビルド、プッシュし、実際のクラスターへデプロイできます。

1.0 未満

Cornus は活発に開発中であり、CLI または API の安定性はまだ保証していません。リリースアーティファクトをバージョンに固定し、アップグレード前にリリースノートを確認してください。

このプロジェクトは単一モジュール (module cornus、Go 1.26、Apache-2.0) です。

三つのサブシステム

Cornus は、動作に必要なレジストリ、ビルドエンジン、デプロイエンジンを一つのバイナリに収めています。

  1. レジストリ — 永続的な sha256 コンテンツアドレス指定ストアを基盤とする、小規模な OCI Distribution v1.1 レジストリ (/v2/*) です。永続化方式は差し替え可能で、--storage によりファイルシステム (既定)、メモリ内、S3 / S3 互換オブジェクトストレージを選べます (gs:// / azblob://-tags cloudblob ビルドで利用できます)。ボリューム / PVC またはオブジェクトバケットを使用するため、再起動後もデータが残ります。ストレージバックエンドを参照してください。
  2. ビルドエンジン — 別個の buildkitd を必要としない、docker buildx と同じプロセス内 BuildKit ソルバーです。Dockerfile ビルド、キャッシュマウント (RUN --mount=type=cache)、シークレットマウント (RUN --mount=type=secret)、SSH エージェント転送 (RUN --mount=type=ssh)、名前付きビルドコンテキスト / バインドマウント、リモートキャッシュをそのまま利用できます。ビルドはローカルまたはリモートの Cornus サーバーで実行でき、呼び出し元のディレクトリ、シークレット、SSH エージェントは 9P-over-WebSocket でストリーミングされます。必要に応じて遅延転送もできるため、ビルドが実際に読むバイトだけがネットワークを通過します。cornus build CLI と /.cornus/v1/build HTTP エンドポイントから利用できます。
  3. デプロイエンジン — 命令的で差し替え可能なデプロイバックエンドです。dockerhost (既定) は Docker ホスト上でコンテナを実行し、podman は Podman をそのネイティブ libpod API 経由で駆動し、containerd は素の containerd ホスト上でネイティブに実行します (CNI ブリッジネットワークを使用し、dockerd は不要です)。bare はデーモンなしで OCI ランタイムを直接駆動します。incus は Incus 6.3+ のデーモン上で Incus のアプリケーションコンテナとして実行します。kubernetes (client-go) はデプロイメントとサービスをクラスターへデプロイします。v1 に git の監視や継続的リコンシリエーションはありません。中核機能に加え、リモートワークロードへ 9P で送るクライアントローカルバインドマウント、公開ポートのクライアント側自動転送、ホスト型トンネルを介したワークロードの公開、リモートワークロードの通信を呼び出し元ネットワーク経由にするクライアント側エグレスも提供します。デプロイバックエンドを参照してください。

サブシステムは共有する Go ストレージではなく OCI HTTP を介して連携します。ビルドエンジンはイメージ参照をレジストリへプッシュし、対象ランタイムがそれをプルします。レジストリのコンテンツストアは pkg/storage の背後にあるプライベートな永続化層なので、Cornus は外部 OCI レジストリも使用できます。

ビルド → プッシュ → デプロイの流れ

ワークロードがクラスターに到達するまでには、サブシステムに直接対応する三つの段階があります。

  1. ビルドエンジンでイメージをビルドします。
  2. Cornus 自身のもの、または外部のレジストリへイメージをプッシュします。
  3. デプロイバックエンドに仕様を適用してデプロイします。バックエンドがイメージをプルして実行します。

cornus compose upはこれらの基本操作をまとめた糖衣構文です。明示的に制御したい場合は、cornus buildcornus pushcornus deployを直接実行することもできます。詳しい手順はクイックスタートを参照してください。

デプロイメントモデル

Cornus はコンテナイメージ (およびビルド済みのオールインワン CLI バイナリ) として配布され、ローカル Docker コンテナとしても、Kubernetes の第一級サービスとしても動作します (StatefulSet + PVC + Service + RBAC。Helm チャートも提供されます)。ビルド済みマルチアーキテクチャイメージは、semver タグで ghcr.io/moriyoshi/cornus に公開されます。イメージにはサードパーティーライセンスの帰属表示が含まれます。リリースには Linux および macOS (amd64/arm64) と Windows (amd64) 向けの CLI バイナリも添付されます。Linux の生成物は完全に静的で、SHA256SUMS マニフェストが付属します。Helm チャートは OCI アーティファクトとして公開され、すべての生成物がキーレス cosign で署名されます。

レジストリとデプロイのサブシステムに特別な権限は不要ですが、ビルドエンジンには root、またはルートレスユーザー名前空間のスタックが必要です。バイナリの入手方法はインストール、権限の考え方はアーキテクチャ概要を参照してください。

インターフェイス

  • HTTP: /v2/* (レジストリ)、/.cornus/v1/build + /.cornus/v1/build/attach/.cornus/v1/deploy[/{name}[/{action}]] + /.cornus/v1/deploy/attach/.cornus/v1/caretaker/attach (Pod サイドカーとの接続確立)、/.cornus/v1/hub/catalog/.cornus/v1/gc/healthz/readyz、および任意で有効化する Prometheus /metrics
  • CLI (kong): servesetupconfigbuildpushdeployexecport-forwardtunnelsocks5composedaemonhubtokenhealthversioncornus configは kubeconfig 風の接続プロファイルを管理します。クラスター内サーバーへの自動ポート転送と、呼び出し元の kube アクセスに基づく短命な資格情報の発行ができるため、手動のトンネルやトークンなしで全コマンドをリモートクラスターに対して実行できます。リモートクラスターで作業するを参照してください。
  • cornus compose: Docker Compose 互換のコマンドグループ (up / down / ps / build / restart / stop / start) です。Compose コマンドを実行中の Cornus サーバーへ振り向けます。ライフサイクルコマンドとワークスペースマウントを含む Dev Container 定義 (.devcontainer/devcontainer.json) も、単一コンテナ形式と Compose 形式の両方をネイティブに読み取ります。
  • cornus daemon: ユーザーごとの単一エージェントがホストする長時間動作のクライアント側ヘルパーです。daemon docker はローカル Docker エンジン API プロキシを公開します (DOCKER_HOST を指すと Docker 互換クライアントがリモート Cornus サーバーを操作します)。同じエージェントが、デタッチされた Compose のマウント、ポート転送、SOCKS5 alias、エグレス、および資格情報セッションを保持します。

次に読むページ

Released under the Apache-2.0 License.