Skip to content

デプロイスペックリファレンス

デプロイスペック は、cornus が実行するワークロードの宣言的説明です。cornus deploy -f に渡す YAML (または JSON) document です。これは 命令的 に適用されます。1 つの仕様が入り、選択された デプロイバックエンド が actual 状態をそれに収束させます (ワークロードの作成または再作成)。

Compose ファイルや devcontainer は内部で同じ仕様に変換されるため、ここにあるすべてのフィールドは cornus compose からも到達できます。6 つのバックエンド、つまり dockerhost (既定)、podmancontainerdbareincuskubernetes は 1 つのインターフェースの背後にあり、同じ仕様を尊重します。ただし、すべてのフィールドがすべてのバックエンドに map されるわけではありません。ソースがバックエンドごとの挙動を記録している場合は、そのフィールドの説明で明記します。incus バックエンドが map する範囲は最も狭く (クライアントローカルマウント、ヘルスチェック、user ネットワーク、command だけの上書きに対応せず、workingDiruser は絶対パス形式と数値形式でのみ map されます)、黙って捨てるのではなくフィールドごとに警告します。対応しない項目はデプロイバックエンドに一覧があります。

canonical な正本は pkg/.cornus/v1/deploy.go です。

共通のフィールドといくつかのネストされたブロックを示す、比較的完全な仕様です。

yaml
name: web
image: localhost:5000/web@sha256:1c2d...   # digest-pinned is ideal
replicas: 2
restart: unless-stopped

command: ["--port", "8080"]                 # args to the image ENTRYPOINT
env:
  LOG_LEVEL: info
  DATABASE_URL: postgres://db:5432/app

ports:
  - host: 8080
    container: 80
  - host: 127.0.0.1:5432                     # see hostIP below
    hostIP: 127.0.0.1
    container: 5432

mounts:
  - source: /srv/data
    target: /data
    readOnly: true

volumes:
  - name: web_cache                          # named => shared/persistent
    target: /var/cache
    size: 2Gi

networks:
  - name: myproj_frontend
    aliases: [web, frontend]

resources:
  cpuLimit: 0.5                              # half a core
  memoryLimit: 268435456                     # 256 MiB, in bytes
  reservedMemory: 134217728                  # 128 MiB floor

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost/healthz"]
  interval: 30s
  timeout: 5s
  retries: 3

labels:
  app.kubernetes.io/part-of: myproj

Top-level fields (DeploySpec)

フィールド必須既定説明
namestringyesデプロイメントを一意に識別します。管理対象 resource は idempotent apply/delete のため、この値で label 付けされます。
imagestringyes実行するイメージ参照。digest-pinned が理想です。
command[]stringnoイメージ CMDイメージの既定コマンド (Docker CMD) を上書きします。これはイメージ ENTRYPOINT への argument であり、ENTRYPOINT は有効なままです。kubernetes ではコンテナの Args に入るため、イメージ entrypoint は保持されます。incus では、entrypoint なしで設定された command は map できず警告されます — entrypoint も設定してください。
entrypoint[]stringnoイメージ ENTRYPOINTイメージ entrypoint (Docker ENTRYPOINT / Kubernetes コンテナ command) を上書きします。設定時、command がその argument を与えます。空の場合はイメージ既定を保ちます。incus ではインスタンスの oci.entrypoint になり、イメージの argv をまとめて置き換えます。
envmap[string]stringno環境変数。map から KEY=VALUE として適用されます。
ports[]PortMappingnoホストポートをコンテナポートに map します。
mounts[]Mountnoホストパスをコンテナにバインドします。
volumes[]VolumeSpecnoバックエンドがストレージを用意する管理対象 (non-bind) ボリューム。
networks[]NetworkAttachmentnoこのワークロードが参加する user-defined ネットワーク (Compose networks:)。空のは既定 connectivity のみを意味します。
proxyProxySpecnouserspace enforcing エグレスプロキシを要求します。kubernetes のみ (dockerhost は libnetwork で isolation を得るため無視します)。
dnsDNSSpecnopod ごとの caretaker DNS resolver を要求します。kubernetes のみ。
hubHubSpecnoワークロードをサーバーのワークロード間オーバーレイに参加させます。kubernetes のみ。 ワークロード間 hub を参照してください。
dockerDockerSpecnoワークロードに Docker エンジン API エンドポイントを公開します。kubernetes のみ。 サーバーに CORNUS_CLIENT_TOKEN_SECRET が必要です。
credentialsCredentialSpecno短命なクライアント発行の資格情報をワークロードへ仲介します。kubernetes でのみ実現され、現在はすべてのホストバックエンドが拒否します。Compose サービスは x-cornus-credentials: で設定します。資格情報 を参照してください。
restartstringnounless-stopped再起動ポリシー: noalwayson-failureunless-stopped
restartMaxAttemptsintno0 (バックエンド既定, unlimited)on-failure ポリシーの再起動 attempt を cap します。dockerhost のみ (kubernetes と containerd は count を bound できないため無視)。
replicasintnoバックエンド既定desired インスタンス count。すべてのバックエンドで尊重されます。ホストバックエンドでは公開済みホストポートはレプリカ 0 にだけ向きます。
privilegedboolnofalse完全な privilege で実行します (Docker --privileged / Kubernetes securityContext.privileged)。opt-in です。default-deny posture は セキュリティと認証 を参照してください。
healthcheckHealthchecknoコンテナ health probe。
resourcesResourcesnoCPU/memory limit と reservation。
updateConfigUpdateConfignoRolling-update strategy。kubernetes のみ (ホストバックエンドは単一インスタンスを recreate して無視します)。
userstringnoイメージ既定プロセスを実行する user (および任意の group): uiduid:giduseruser:group。kubernetes は numeric uid[:gid] のみを map でき、username は表現できません。incus も同じ制限 (oci.uid/oci.gid) を持ち、uid:groupname はグループを捨てるのではなく丸ごと拒否します。
workingDirstringnoイメージ既定コンテナ working ディレクトリ (compose working_dir)。incus では絶対パスのときだけ map され (oci.cwd)、相対パスは警告されます。
hostnamestringnoバックエンド既定コンテナ hostname (compose hostname)。
labelsmap[string]stringnouser metadata。kubernetes では pod-template annotation になります (label ではありません)。キー clash では cornus 自身の management label が常に勝ちます。
originOriginnoワークロードの来歴。所属プロジェクトと生成元のクライアントホスト / ユーザー / ディレクトリ / Git リポジトリです。CLI が自動入力し、サーバーが認証済み subject を記録します。status/list で返されます。
stopSignalstringnoイメージ既定main プロセスを停止する signal。例: SIGTERM。dockerhost のみ。kubernetes と containerd は無視します。
stopGracePeriodstringnoバックエンド既定stop signal 後、kill まで待つ時間。Go duration (10s1m30s)。containerd は無視します。
initbool (nullable)noバックエンド既定true は zombie を reap する PID-1 init を要求し、false は拒否します (compose init)。dockerhost のみ。kubernetes と containerd は無視します。
ttyboolnofalsepseudo-TTY を割り当てます (compose tty)。
stdinOpenboolnofalseコンテナの stdin を開いたままにします (compose stdin_open)。containerd は無視します。
readOnlyboolnofalseroot ファイルシステムを読み取り専用でマウントします (compose read_only)。
capAdd[]stringnoLinux capability を追加します (compose cap_add)。
capDrop[]stringnoLinux capability を drop します (compose cap_drop)。
securityOpt[]stringnoセキュリティオプション (compose security_opt)。dockerhost はそのまま渡します。kubernetes/containerd は well-known なもの (no-new-privilegeslabel=) だけを map し、seccomp= / apparmor= では警告します。
groupAdd[]stringnosupplementary group (compose group_add)。kubernetes/containerd は numeric GID のみを受け付け、name は警告してスキップします。
sysctlsmap[string]stringnonamespaced kernel パラメーター (compose sysctls)。
extraHosts[]stringnohost:ip 形式のカスタム /etc/hosts entry (compose extra_hosts)。containerd は無視します。
dnsServers[]stringnoカスタム nameserver (compose dns)。caretaker フィールドの dns とは別です。containerd は無視します。
dnsSearch[]stringnoカスタム DNS search ドメイン (compose dns_search)。containerd は無視します。
dnsOptions[]stringnoカスタム resolver オプション (compose dns_opt)。各 item は name または name:value。containerd は無視します。
ulimits[]Ulimitnoresource ごとの rlimit (compose ulimits)。kubernetes は無視します。
tmpfs[]stringnotmpfs マウント。各 item はコンテナパスと任意の : 区切りオプション (例: /run:size=64m)。
devices[]stringnoホスト device mapping (compose devices)。各 item は host:container[:perms] (perms の既定は rwm)。kubernetes は無視します。
shmSizeint64no0 (バックエンド既定)/dev/shm size。byte 単位 (compose shm_size)。
pidModestringnoバックエンド既定PID 名前空間モード (compose pid)。例: host。kubernetes/containerd は host だけを map します。
ipcModestringnoバックエンド既定IPC 名前空間モード (compose ipc)。例: host。kubernetes/containerd は host だけを map します。
egressEgressSpecnooutbound トラフィックをクライアント側 vantage point 経由にします。エグレス を参照してください。
ingressIngressSpecno公開済みワークロードポートへの HTTP(S) ホスト / パス経路を宣言します。Kubernetes はネイティブ Ingress を作成し、ホストバックエンドでは cornus サーバーが同じ経路を実現します。イングレス を参照してください。
knativeKnativeSpecnoワークロードを Knative Serving Service (サーバーレス、autoscaling、scale-to-zero) としてデプロイします。serving.knative.dev を提供するクラスターの kubernetes バックエンドでのみ実現され、それ以外では警告して無視します (ワークロードは通常のコンテナーとして動作します)。通常は serving.knative.dev/v1 の descriptor loader が設定します。cornus deploy を参照してください。
agentForwardboolnofalseこのデプロイメントに caretaker の AgentRelayRole を接続し、cornus exec --forward-agent / cornus compose exec --forward-agent でローカル ssh-agent を exec セッションへ中継できるようにします。kubernetes のみで、デプロイメントごとにオプトインします (dockerhost/containerdhost では代わりにバックエンド全体の CORNUS_DOCKER_REMOTE / CORNUS_CONTAINERD_REMOTE で制御され、すべてのデプロイメントに対してインスタンスごとの companion が既に動作します)。Compose サービスでは x-cornus-agent-forward: true を設定します。
telemetryTelemetrySpecnocaretaker 内で組み込み OpenTelemetry Collector を実行し、ワークロードの OTEL_* env を自動的にそこへ接続します。endpoint へ、未設定時は cornus 自身のストアへ export します。全バックエンド対応。Compose: x-cornus-telemetry: (service または project level)、CLI: --telemetry-*オブザーバビリティを参照してください。

TIP

restart は Compose の deploy.restart_policy.condition (nonenoon-failureon-failureanyalways) から map されます。planner が仕様を書くとき、これは service-level の restart: より authoritative です。

Nested types

Origin

ワークロードの来歴 (origin)、つまりデプロイ元を表します。CLI は subject 以外の全フィールドをクライアント環境から設定します (cornus deploy は作業ディレクトリを、cornus compose はプロジェクト名と Compose ファイルのディレクトリを記録します)。サーバーは subject を認証済み要求の ID で上書きし、クライアントが送った値を破棄するため、申告された来歴と検証済み ID は分離されます。すべてのフィールドは best-effort です。バックエンドごとに cornus.origin.* コンテナラベル (dockerhost / containerd)、レコードフィールド (bare)、またはオブジェクトの annotation (kubernetes) として永続化され、cornus deploy / status / list で返されます。

フィールド必須既定説明
projectstringnoCompose プロジェクト名、または cornus deploy --project
hoststringnoクライアントマシンのホスト名。
userstringnoクライアント OS ユーザー。
directorystringnoデプロイを起動したクライアント側の絶対ディレクトリ。
gitGitOriginnodirectory の Git provenance。
subjectstringnoサーバーが記録する認証済み ID (JWT subject)。

GitOrigin

origin の directory の Git provenance (origin.git)。クライアント申告の best-effort 情報です。

フィールド必須既定説明
remotestringnoorigin リモート URL。
branchstringnocheckout 済み branch (detached HEAD では空)。
commitstringno完全な HEAD commit SHA。
dirtyboolnofalse未コミット変更があったか。

PortMapping

ホストポートをコンテナポート (ports[]) に map します。

フィールド必須既定説明
hostintyespublish するホストポート。
containerintyes到達するコンテナポート。
protocolstringnotcptcp または udp
hostIPstringno0.0.0.0 (all interfaces)ホスト側 publish を特定インターフェースに制限します (compose 127.0.0.1:8080:80)。ホストバックエンドでは尊重されます。kubernetes サービスには相当するものがありません。

マウント

ホストソースをコンテナにバインドします (mounts[])。管理対象 volumes entry とは別物です。

フィールド必須既定説明
sourcestringyesバインドするホストパス。
targetstringyesマウント先コンテナパス。
readOnlyboolnofalse読み取り専用でマウントします。
selinuxstringnoSELinux relabel (compose :z/:Z): z は content をコンテナ間で共有し、Z はプライベートにします。dockerhost で適用されます。containerd/kubernetes は relabel しません。
immutableboolnofalseデプロイメントの存続中に内容が変わらないクライアントローカルの読み取り専用マウント。サーバーのファイル単位キャッシュを有効にします。サーバーホストのマウントでは無視されます。
asyncCacheboolnofalseキャッシュ整合性を保つ block protocol を使うクライアントローカルの書き込み可能マウント。replica は 1 つ必要で、readOnly または immutable とは併用できません。サーバーホストのマウントでは無視されます。
noCreateHostPathboolnofalse呼び出し元のローカル bind source がない場合、自動作成を拒否します。既定では Compose の bind.create_host_path: true と同様に空ディレクトリを作成し、Compose の bind.create_host_path: false がこのフィールドを設定します。サーバーホストのマウントでは無視されます。

VolumeSpec

コンテナにマウントされる管理対象 (non-bind) ボリュームです (volumes[])。kubernetes では dynamically-provisioned PersistentVolumeClaim になります。dockerhost では Docker anonymous/named ボリュームです。初回 start 時、ボリュームはイメージが target に持っている内容で初期設定されます (Docker ボリューム semantics)。以後の start では書き込みが保持されます。

name フィールドは 2 つの Compose ボリューム flavor を選びます。

  • 匿名 (name 空の): ストレージはこのデプロイメントにプライベートかつ一時的です。デプロイメント delete 時に reap されます (docker rm -v と同様)。
  • 名前付き (name set): 共有で project-scoped なストアです。ライフサイクルは単一デプロイメントから独立しています。そのボリュームを使う単一デプロイメントの cornus delete 後も survive します。すでに project-scoped な logical name (例: myproj_cache) を渡してください。
フィールド必須既定説明
namestringno匿名set => shared/persistent 名前付きボリューム。空の => 匿名。
targetstringyesコンテナマウントパス。
sizestringno1Gi要求する size。例: 1Gi
storageClassstringnoクラスター既定 classPVC 用 Kubernetes StorageClass。
readOnlyboolnofalse読み取り専用でマウントします。
driverstringnoDocker 既定 (local)名前付き ボリューム用のボリュームプラグイン (compose driver)。dockerhost のみ。kubernetes/containerd は無視します。
driverOptsmap[string]stringnoopaque driver オプション (compose driver_opts)。dockerhost のみ。
labelsmap[string]stringno名前付き ボリューム上の user metadata。dockerhost は設定し、kubernetes は PVC にコピーします (management label が勝ちます)。containerd は無視します。

NetworkAttachment

ワークロードの user-defined ネットワーク (networks[]) への membership 1 つです。Docker/Compose user-network semantics に沿っています。member は同じネットワークの他 member からサービス name (および alias) で到達でき、fabric が対応する場合は、参加していないネットワークから隔離されます。

driver は kubernetes バックエンドがネットワークをどう実現するかを選びます。空の場合はバックエンド既定 (CORNUS_K8S_NET_DRIVER、それ自体の既定は services) です。認識される kubernetes driver: services (DNS のみ、任意のクラスター)、bridge/ipvlan/macvlan (Multus CNI)、cilium。dockerhost バックエンドは driver を Docker 自身のネットワーク driver にそのまま渡します。

フィールド必須既定説明
namestringyesproject-scoped ネットワーク resource name (例: myproj_frontend)。
driverstringnoservices (kubernetes) / Docker bridgerealisation driver (上記参照)。
driverOptsmap[string]stringnodriver に転送される opaque per-network knob (compose driver_opts)。
aliases[]stringnoこの member のネットワーク上での追加 DNS name。
defaultboolnofalsekubernetes の detached-primary モード: pod の主インターフェースを置き換えます (Multus default-network)。設定できる attachment は最大 1 つです。dockerhost は無視します。
ipstringnoこのネットワーク上の member IPv4 アドレスを CIDR form で pin します (例: 10.222.14.7/24)。Multus で実現された kubernetes ネットワークでのみ honor されます。dockerhost は無視します (libnetwork が member のアドレス割り当てと解決をネイティブに行い、CIDR 形式は Docker の endpoint アドレスとして妥当ではありません)。containerdbare は警告して無視します。これらの bridge CNI は予約のない host-local IPAM を使うため、インスタンスは自動割り当て範囲の次の空きアドレスを取ります。
subnetstringnoネットワーク IPAM subnet (compose ipam.config[0].subnet)。dockerhost と Multus netdriver が使います。containerd は無視します。
gatewaystringnoネットワーク IPAM gateway。dockerhost のみ。
ipRangestringnoネットワーク IPAM IP range。dockerhost のみ。
internalboolnofalse外部エグレスなしの intra-network トラフィックに制限します (compose internal)。dockerhost のみ。
attachableboolnofalse単独コンテナが swarm-scoped ネットワークに join できるようにします (compose attachable)。dockerhost のみ。
enableIPv6boolnofalseIPv6 addressing を有効化します (compose enable_ipv6)。dockerhost のみ。
labelsmap[string]stringnoネットワーク上の user metadata。dockerhost のみ (management label が勝ちます)。
ipv6stringnoこの member の per-network IPv6 アドレスを pin します (compose ipv6_address)。dockerhost のみ。
macstringnoこの member の MAC アドレスを pin します (compose mac_address)。dockerhost のみ。
priorityintno0ネットワーク attachment の順序 (compose priority)。最も priority が高いネットワークが先に join され、その gateway が既定経路になります。dockerhost のみ。

ProxySpec

ワークロード用の userspace エグレスプロキシを設定します (proxy)。kubernetes のみ。 allow はワークロードが到達可能な peer サービス name の集合です (プロキシネットワークを共有するサービス)。

フィールド必須既定説明
modestringnoenforcingenforcing (すべての outbound TCP を nftables sidecar に redirect し、allow peer に解決される宛先だけを許可します。実 L4 isolation) または cooperative (soft isolation: 各 allow peer の DNS name は sidecar が転送する loopback アドレスを指します。生の pod IP へ接続すれば bypass 可能)。
allow[]stringnoワークロードが到達できる peer サービス name。
portsmap[string][]intnoCooperative モード: allow peer ごとのプロキシ対象コンテナポート。
listenPortintnoバックエンド既定redirected トラフィック用に sidecar が listen するポート。

DNSSpec

pod ごとの caretaker DNS resolver を設定します (dns)。kubernetes のみ。 records は peer サービス name を pod が解決すべき IPv4 アドレスに map します (通常は peer の user-network / Multus-secondary アドレス)。records にないものはすべてクラスター DNS へ転送されます。

フィールド必須既定説明
recordsmap[string]stringnoPeer サービス name → 解決先 IPv4 アドレス。
requireUserNetboolnofalserecord が Multus 副アドレスを指すことを示します。クラスターが Multus fabric を実現できない場合、バックエンドは DNS caretaker 全体をスキップし、resolution はクラスター DNS に degrade します。

DockerSpec

caretaker の Docker エンジン API エンドポイントを設定します (docker)。kubernetes のみ。 caretaker は pod-loopback エンドポイント上に Docker-API プロキシをバインドし、DOCKER_HOST を注入します。これにより標準 docker / docker compose が、pod 自身の stack を管理している同じ cornus サーバーを操作できます。サーバーに client-scoped トークンシークレット (CORNUS_CLIENT_TOKEN_SECRET) が必要です。

フィールド必須既定説明
transportstringnotcptcp (127.0.0.1:port にバインド)、unix (socketPath にソケットをバインド)、または both (DOCKER_HOST は TCP エンドポイントを指します)。
portintno2375tcp / both 転送経路用 loopback TCP ポート。
socketPathstringno/cornus/docker/docker.sockunix / both 転送経路用 Unix ソケットパス (共有 emptyDir 上)。
envVarstringnoDOCKER_HOSTエンドポイントを app コンテナに知らせる環境変数。

TelemetrySpec

caretaker 内で組み込み OpenTelemetry Collector を実行します (Compose の service または project level の x-cornus-telemetry:、CLI の --telemetry-*)。アプリは pod-loopback receiver へ OTLP を送り、Collector は endpoint、または未指定時には cornus 自身の組み込みオブザーバビリティストアへ export します。バックエンドはワークロードの OTEL_* env を自動注入します。全バックエンド対応です。オブザーバビリティを参照してください。collector 有効イメージが必要です (-tags otelcol、リリースイメージでは設定済み)。

フィールド必須既定説明
enabledboolnofalsetelemetry を有効にします。非空の endpoint でも有効になり、裸の x-cornus-telemetry: {} だけでも有効化できます。
endpointstringnoサーバー自身のストアexport 先の OTLP バックエンド (grpc では host:porthttp/protobuf では URL)。空のままにすると cornus の組み込みオブザーバビリティストアへ export し、サーバーがデプロイ時に値を補います。既定にできるストアがない経路 (ローカルの cornus deploy、または --obs なしで起動したサーバー) では、空の endpoint は 2 つの解決策を示すメッセージとともに拒否されます。
protocolstringnogrpcexporter protocol: grpc または http/protobuf。アプリへ通知する receiver port も 4317 または 4318 に切り替えます。
headersmap[string]stringno静的 export header (例: 認証トークン)。kubernetes では Deployment 所有の Secret と secretKeyRef で投影されるため、Pod スペックに値は現れません。
insecureboolnofalsebackend への転送セキュリティを無効にします。
signals[]stringnoすべてpipeline を tracesmetricslogs に制限します。
serviceNamestringnoデプロイメント名注入される OTEL_SERVICE_NAME を上書きします。
resourceAttributesmap[string]stringnocornus 由来の既定値と統合する追加 OTEL_RESOURCE_ATTRIBUTES
grpcPort / httpPortintno4317 / 4318pod 内 OTLP receiver loopback ポート。
debugboolnofalse収集した telemetry も collector stdout に出力します。
viaMuxboolnocornus が送信先の場合は onワークロードのネットワークから接続する代わりに、caretaker 接続で cornus サーバーへ export します。telemetry caretaker を実行するすべてのバックエンドで、endpoint がこのサーバーに解決される場合は既定で ON です。直接接続を強制するには false にします。明示的な第三者 endpoint では接続がないため off のままです。CORNUS_ADVERTISE_URL が必要です。Compose: via_muxオブザーバビリティを参照してください。

HubSpec

ワークロード間オーバーレイ membership を要求します (hub)。kubernetes のみ。 ワークロード間 hub を参照してください。

フィールド必須既定説明
identitystringnoデプロイメント nameポリシー ID。
export[]HubExportnoこのワークロードがオーバーレイ上でホストするサービス。
import[]HubImportnoこのワークロードがオーバーレイ経由で到達するサービス。
importDynamicHubImportDynamicnoワークロードを動的インポート discovery に opt in します。

HubExport / HubImport / HubImportDynamic

HubExport — このワークロードがオーバーレイ上でホストするサービス 1 つ:

フィールド必須既定説明
namestringyesオーバーレイ上のサービス name。
portintyesサービスが listen するポート。
deliverboolnofalseイングレス配送を要求します (hub がこの pod へ中継し、pod が localhost の port に接続)。これによりサービスは hub から到達可能でなくても構いません。
protocolstringnotcptcp または udp

HubImport — このワークロードがオーバーレイ経由で到達するサービス 1 つ:

フィールド必須既定説明
namestringyes到達するサービス name。
ports[]intyesloopback リスナーをバインドするポート。
protocolstringnotcptcp または udp

HubImportDynamic — hub catalog プッシュを subscribe し、catalog に載る すべての サービス (このワークロード自身のエクスポートと静的インポートを除く) の synthetic IP に loopback リスナーをバインドします。サービスの出現/消滅に応じてリスナーを追加/close します。デプロイ時に name が不明なため、DNS record は配線されません。

フィールド必須既定説明
ports[]intyesdiscovered サービスごとにバインドされる共有ポート set。
protocolstringnotcptcp または udp

CredentialSpec

client-sourced 資格情報をワークロードに仲介します (credentials)。シークレット値はクライアント上で発行され (この spec には決して含まれません)、cornus サーバーと caretaker sidecar 経由で配送されます。kubernetes 上で、クライアントがワークロードの存続中ずっと保持するセッションによって実現されます。cornus deploy --detach とすべてのホストバックエンド (dockerhostcontainerdbareincus) は拒否します。Compose サービスは x-cornus-credentials: (サービスまたはプロジェクトレベル) で設定します。そちらは cornus compose up -d にも対応しており、プロジェクトのバックグラウンドエージェントがセッションを保持します。資格情報 を参照してください。

フィールド必須既定説明
sources[]CredentialSourceno各 entry はコンテナが必要に応じて retrieve できる資格情報 1 つです。

CredentialSource

フィールド必須既定説明
namestringyeslogical 資格情報 name。capability キーと既定ファイル basename / エンドポイントパス segment を兼ねます。
backendstringyes資格情報を発行するクライアント側バックエンド (例: aws-stsgithub-clistaticexec)。呼び出し元の machine 上で、呼び出し元自身の cloud/API 資格情報で実行されます。
configmap[string]stringnonon-secret バックエンド configuration (例: role_arndurationregion)。シークレット自体を絶対に保持してはいけません。
ttlstringnoバックエンド既定クライアント側 cache/refresh hint。Go duration 文字列。
deliveries[]CredentialDeliverynoコンテナが資格情報を消費する方法。空のでも有効です (取得可能だが対象範囲されない)。

CredentialDelivery

資格情報をコンテナから利用できるようにする provider-agnostic な方法 1 つです。

フィールド必須既定説明
kindstringnoendpointendpoint (HTTP metadata サーバー / auth-injecting プロキシ)、file (共有ボリューム内のパスに実体化)、または env (app コンテナ環境に注入)。
providerstringnogenericエンドポイント kind。 generic は cornus-native JSON contract (GET /credentials/<name>) を提供します。aws-imds と将来の adapter は、同じ資格情報を cloud SDK が期待する形で描画します。認証を注入するプロキシ (anthropic-proxyopenai-proxygithub-proxy) は資格情報を自ら保持し、ワークロードの API 呼び出しに追加します。
wellKnownboolnofalseエンドポイント kind。 pod netns 内で provider の canonical link-local アドレス (例: AWS 169.254.169.254、IMDSv2) をバインドします。NET_ADMIN が必要です。false の場合、エンドポイントは loopback にバインドされ、injected env var で通知されます (aws-imds では AWS_CONTAINER_CREDENTIALS_FULL_URI、ECS container-credentials エンドポイント)。
upstreamstringnoprovider 既定エンドポイント kind、auth-proxy provider。 プロキシが転送する vendor API を上書きします (例: Anthropic-/OpenAI-compatible gateway、または https://ghe.corp/api/v3 のような GitHub Enterprise Server の REST ベース)。Non-secret。
pathstringnoファイル kind。 資格情報を実体化するコンテナパス。
formatstringnojsonファイル kind。 json (neutral な {values,expiration} object)、env (KEY=VALUE lines)、raw (単一値)、または aws-credentials (ini プロファイル)。
envVarstringnoenv kind。 設定する app-container 環境変数。デプロイ time に Kubernetes シークレット (secretKeyRef) へ一度取得されます。静的でランタイム refresh はなく、etcd に残ります。短命資格情報には proxy/file 配送を推奨します。
valueKeystringnovalue then tokenenv kind。 どの資格情報 values キーが env 値を供給するか。

ヘルスチェック

コンテナ health probe (healthcheck) です。Docker のヘルスチェックを model にしています。dockerhost では Docker コンテナヘルスチェックになり、kubernetes では exec liveness (および readiness) probe になります。test は Docker の CMD form を使います。最初の element は CMD (残りを exec)、CMD-SHELL (単一文字列を shell で実行)、または NONE (継承されたヘルスチェックを無効化) です。

フィールド必須既定説明
test[]stringnoDocker CMD form の probe コマンド (上記参照)。
intervalstringnoバックエンド既定Probe interval。Go duration 文字列 (30s)。
timeoutstringnoバックエンド既定probe ごとのタイムアウト。Go duration 文字列。
startPeriodstringnoバックエンド既定failure を count し始める前の grace period。Go duration 文字列。
startIntervalstringnoバックエンド既定start period の probe interval (compose start_interval)。
retriesintnoバックエンド既定unhealthy とみなすまでの consecutive failure 数。

::: 警告 containerd containerd バックエンドはヘルスチェックを無視します (警告付き)。 :::

Resources

ワークロードの compute を cap する (*Limit フィールド)、または guaranteed floor を reserve します (reserved* フィールド、compose deploy.resources.reservations 由来)。zero フィールドは「その axis は unset」を意味します。

フィールド必須既定説明
cpuLimitfloat64no0 (unset)fractional core count (例: 0.5 = half a core)。Docker NanoCpus、kubernetes CPU quantity in millicores。
memoryLimitint64no0 (unset)byte count。Docker Memory、kubernetes memory quantity。
reservedCpufloat64no0 (unset)Reservation floor。kubernetes resources.requests.cpudockerhost では no-op (Docker に CPU reservation はありません)。containerd は無視します。
reservedMemoryint64no0 (unset)Reservation floor。kubernetes resources.requests.memory。dockerhost MemoryReservation。containerd は無視します。

UpdateConfig

rolling-update strategy (updateConfig、compose deploy.update_config 由来) です。kubernetes だけが デプロイメント strategy.rollingUpdate に map します。他の compose knob (delaymonitormax_failure_ratio) は swarm concept でありデプロイメントでは表現できないため、translate 時に drop されます。

フィールド必須既定説明
parallelismintno0 (バックエンド既定 of 1)一度に update するインスタンス数。maxUnavailable (stop-first) または maxSurge (start-first) の size になります。
orderstringnostop-firststop-first (新しいインスタンスを起動する前に古いインスタンスを落とす) または start-first (古いものを削除する前に新しいインスタンスを surge する)。

Ulimit

プロセス resource limit 1 つです (ulimits[]、compose ulimits)。Compose の shorthand (裸の integer) は soft == hard を設定します。dockerhost HostConfig.Ulimits、containerd OCI Process.Rlimits。kubernetes は無視します。

フィールド必須既定説明
namestringyes素の limit name (nofilenproc)。
softint64nosoft bound。
hardint64nohard bound。

EgressSpec

ワークロードの outbound トラフィックをクライアント側 vantage point 経由に経路します (egress)。air-gapped クラスターや、認可されたエグレスパスが呼び出し元側にある VPN/corporate-proxy/SASE ネットワーク向けです。エグレス を参照してください。

ルーティングは宛先ごとです。各 flow は 4 つの経路のいずれかに送られます。client (クライアント側ネットワークへ中継)、gateway (永続的 egress-gateway ノードへ中継、--detach 用)、cluster (中継なしで直接エグレス)、deny (drop) です。default は unmatched 宛先に適用され、既定は cluster です。そのためエグレスを有効化してもクラスター内トラフィックが黙って逸らされることはありません。宛先を client/gateway へ out させることを明示的に選びます。

フィールド必須既定説明
modestringnoenvenvHTTP_PROXY / HTTPS_PROXY / NO_PROXY / ALL_PROXY をコンテナへ伝搬します (全バックエンド、中継なし)。proxy はサーバー経由で中継する HTTP CONNECT + SOCKS5 forward proxy を caretaker で実行し、transparent は nftables redirect ですべての outbound TCP を捕捉して中継します。中継モードは Kubernetes sidecar またはホストバックエンドの companion caretaker で動作し、incus はまだ対応していません。
gatewaystringnoReserved; today は空のでなければなりません。 gateway 経路は現在 cornus サーバー自身を通じてエグレスします。non-empty 値は validation で拒否されます。
proxiesmap[string]stringnoclient-resolvedモード env: 注入する明示的なプロキシ変数。空の場合、クライアントがデプロイ time に自分の OS プロキシ configuration を解決します。
rules[]EgressRuleno宣言的ルーティングポリシー。ordered list で first-match-wins、フォールバックは defaultscript に supersede されます。
scriptstringno経路を宛先ごとに決める任意の PAC-style JavaScript (FindProxyForURL)。設定されている場合は rules を supersede します。DIRECTclusterPROXY client/PROXY gateway→中継経路、DENY→drop、match なし→default
defaultstringnoclusterrule/script に match しない宛先の経路: clusterclientgateway、または deny
listenPortintnoバックエンド既定caretaker プロキシの listen ポート (モード proxytransparent)。

モード proxytransparent はトラフィックをクライアント経由でトンネルするため稼働中 deploy-attach セッションが必要です (stateless --detach デプロイでは使えません)。env は必要ありません。

EgressRule

宛先を経路に map します (egress.rules[])。

フィールド必須既定説明
patternstringyes宛先ホスト (glob、例: *.internal)、CIDR (例: 10.0.0.0/8)、および/または明示的なポート (例: api.example.com:44310.0.0.0/8:5432) に match します。ホストまたはポート part が空の場合は任意に match します。
routestringyesclientgatewayclusterdeny のいずれか。

IngressSpec

公開済みワークロードポートへの HTTP(S) ホスト / パス経路を宣言します (ingress)。Kubernetes は ClusterIP Service 前にネイティブ Ingress を作成します。dockerhostcontainerdbareincus では cornus サーバーが同じ経路を実現します。少なくとも 1 ポートの公開が必要です。イングレス を参照してください。

フィールド必須既定説明
enabledboolnofalseイングレスを有効化します。non-empty な hosts (または Compose host:) は enabled を imply します。裸の x-cornus-ingress: {} はすべてのフィールドを既定にして有効化します。
hosts[]stringnoderived外部 hostname。各 hostname は、1 つの TLS entry を共有する個別のイングレス規則になります。@ は apex (base ドメイン自体、<name>. prefix なし) に map されます。空の場合は単一の <subdomain>.<domain> ホストを導出します。ホストも base ドメインもなければ拒否されます。
domainstringnoCORNUS_INGRESS_DOMAINhosts が空の場合にホストを auto-derive する base ドメインのクライアント上書き。サーバーは resolved ホストが自分のドメイン内に留まることを強制できます (CORNUS_INGRESS_ENFORCE_DOMAIN)。
subdomainstringnoデプロイメント nameauto-derive 時に base ドメインの前に付く label (<subdomain>.<domain>)。Compose translator は <service>.<project> を設定します。DNS-1123 に sanitize されます。
pathstringno/経路する HTTP パス prefix。
pathTypestringnoPrefixKubernetes パス match 型: PrefixExact、または ImplementationSpecific
portintnofirst 公開済みイングレスが経路するコンテナポート。non-zero の場合は仕様の公開済みポートのいずれかと一致する必要があります。
classNamestringnoCORNUS_INGRESS_CLASS, then クラスター既定イングレスの IngressClassName
annotationsmap[string]stringnocontroller-specific knob 用にイングレス object へそのまま統合されます。
tlsIngressTLSno設定するとホスト(s) に HTTPS を要求します。プレーン HTTP では省略します。
tunnelIngressTunnelOptnoフォアグラウンドのリモートデプロイ成功後、このイングレスをパブリックトンネルで公開します。

IngressTLS

イングレスホスト(s) 用 HTTPS を設定します (ingress.tls)。

フィールド必須既定説明
secretNamestringno<name>-tls提供する既存 TLS シークレット。clusterIssuer (またはサーバー既定) が設定されている場合、既定は cert-manager により用意されます。
clusterIssuerstringnoCORNUS_INGRESS_TLS_ISSUERcert-manager が証明書を用意するよう、cert-manager.io/cluster-issuer annotation を設定します。

IngressTunnelOpt

フォアグラウンドの cornus deploy --server 成功後、サーバーのトンネルプロバイダーでイングレスを公開します。サーバーは apply 時にこのブロックを処理せず、資格情報はクライアント側に残ります。--detach とローカルデプロイでは起動せず、フォアグラウンドセッション中だけ存続します。資格情報ファイルは選択した接続プロファイルの tunnel ブロックから読み、未設定なら NGROK_AUTHTOKEN にフォールバックします。任意のトンネル公開に失敗しても、成功したデプロイ自体は失敗になりません。

フィールド必須既定説明
enabledboolnofalseデプロイ後に公開します。
hostModestringnoプロファイル既定、次に autoautopassthroughaliasrewrite
hoststringno自動選択複数ある場合に公開するイングレスホスト。

KnativeSpec

ワークロードを Knative Serving Service (knative) としてデプロイします。serving.knative.dev を提供する Kubernetes バックエンドだけが実現し、その場合 backend は Deployment と Service の代わりに serving.knative.dev/v1 Service を作成し、Knative が autoscaling、scale-to-zero、Route を管理します。通常クラスターと dockerhost / containerd / bare では警告して無視します。通常は cornus deploy -f service.yaml の Knative descriptor loader が設定します。詳細は cornus deploy を参照してください。

フィールド必須既定説明
enabledboolnofalseKnative Service としてマークします。bare {} はすべての既定値で有効にします。
minScaleintno0autoscaling の下限 (autoscaling.knative.dev/minScale)。0 は scale-to-zero を許可します。
maxScaleintno0autoscaling の上限 (autoscaling.knative.dev/maxScale)。0 は無制限です。
targetintnoreplica ごとの autoscaling target (autoscaling.knative.dev/target)。同時 request 数、または rps metric の場合は 1 秒あたりの request 数です。
concurrencyintno0replica あたりの同時 request の上限 (revision の containerConcurrency)。0 は無制限です。
classstringnocluster defaultautoscaler class: kpa または hpa
metricstringnoconcurrencyscaling metric: concurrencyrpscpu (cpuclass: hpa が必要)。
timeoutSecondsintno3001 request の最大時間 (revision の timeoutSeconds)。
portintnofirst publishedKnative が経路する単一コンテナポート。0 以外は公開済みポートのいずれかと一致する必要があります。
annotationsmap[string]stringno上記以外の autoscaling knob 用に revision template へ統合します (競合時は上記フィールドが優先)。

関連ページ

Released under the Apache-2.0 License.