Skip to content

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

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

Compose ファイルや devcontainer は内部で同じ仕様に変換されるため、ここにあるすべてのフィールドは cornus compose からも到達できます。6 つのバックエンド、つまり dockerhost (既定)、podman、containerd、bare、incus、kubernetes は 1 つのインターフェースの背後にあり、同じ仕様を尊重します。ただし、すべてのフィールドがすべてのバックエンドに map されるわけではありません。ソースがバックエンドごとの挙動を記録している場合は、そのフィールドの説明で明記します。incus バックエンドが map する範囲は最も狭く (クライアントローカルマウント、ヘルスチェック、user ネットワーク、command だけの上書きに対応せず、workingDir と user は絶対パス形式と数値形式でのみ 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 のみを意味します。
proxyProxySpecno—userspace enforcing エグレスプロキシを要求します。kubernetes のみ (dockerhost は libnetwork で isolation を得るため無視します)。
dnsDNSSpecno—pod ごとの caretaker DNS resolver を要求します。kubernetes のみ。
hubHubSpecno—ワークロードをサーバーのワークロード間オーバーレイに参加させます。kubernetes のみ。 ワークロード間 hub を参照してください。
dockerDockerSpecno—ワークロードに Docker エンジン API エンドポイントを公開します。kubernetes のみ。 サーバーに CORNUS_CLIENT_TOKEN_SECRET が必要です。
credentialsCredentialSpecno—短命なクライアント発行の資格情報をワークロードへ仲介します。kubernetes でのみ実現され、現在はすべてのホストバックエンドが拒否します。Compose サービスは x-cornus-credentials: で設定します。資格情報 を参照してください。
restartstringnounless-stopped再起動ポリシー: no、always、on-failure、unless-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。
resourcesResourcesno—CPU/memory limit と reservation。
updateConfigUpdateConfigno—Rolling-update strategy。kubernetes のみ (ホストバックエンドは単一インスタンスを recreate して無視します)。
userstringnoイメージ既定プロセスを実行する user (および任意の group): uid、uid:gid、user、user: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]stringno—user 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 (10s、1m30s)。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[]stringno—Linux capability を追加します (compose cap_add)。
capDrop[]stringno—Linux capability を drop します (compose cap_drop)。
securityOpt[]stringno—セキュリティオプション (compose security_opt)。dockerhost はそのまま渡します。kubernetes/containerd は well-known なもの (no-new-privileges、label=) だけを map し、seccomp= / apparmor= では警告します。
groupAdd[]stringno—supplementary group (compose group_add)。kubernetes/containerd は numeric GID のみを受け付け、name は警告してスキップします。
sysctlsmap[string]stringno—namespaced kernel パラメーター (compose sysctls)。
extraHosts[]stringno—host: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[]Ulimitno—resource ごとの rlimit (compose ulimits)。kubernetes は無視します。
tmpfs[]stringno—tmpfs マウント。各 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 します。
egressEgressSpecno—outbound トラフィックをクライアント側 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 を設定します。
telemetryTelemetrySpecno—caretaker 内で組み込み OpenTelemetry Collector を実行し、ワークロードの OTEL_* env を自動的にそこへ接続します。endpoint へ、未設定時は cornus 自身のストアへ export します。全バックエンド対応。Compose: x-cornus-telemetry: (service または project level)、CLI: --telemetry-*。オブザーバビリティを参照してください。

TIP

restart は Compose の deploy.restart_policy.condition (none→no、on-failure→on-failure、any→always) から 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 で返されます。

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

GitOrigin ​

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

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

PortMapping ​

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

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

マウント ​

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

フィールド型必須既定説明
sourcestringyes—バインドするホストパス。
targetstringyes—マウント先コンテナパス。
readOnlyboolnofalse読み取り専用でマウントします。
selinuxstringno—SELinux 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]stringno—opaque 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 にそのまま渡します。

フィールド型必須既定説明
namestringyes—project-scoped ネットワーク resource name (例: myproj_frontend)。
driverstringnoservices (kubernetes) / Docker bridgerealisation driver (上記参照)。
driverOptsmap[string]stringno—driver に転送される 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 アドレスとして妥当ではありません)。containerd と bare は警告して無視します。これらの 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][]intno—Cooperative モード: 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]stringno—Peer サービス 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:port、http/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 を traces、metrics、logs に制限します。
serviceNamestringnoデプロイメント名注入される OTEL_SERVICE_NAME を上書きします。
resourceAttributesmap[string]stringno—cornus 由来の既定値と統合する追加 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[]intyes—loopback リスナーをバインドするポート。
protocolstringnotcptcp または udp。

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

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

CredentialSpec ​

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

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

CredentialSource ​

フィールド型必須既定説明
namestringyes—logical 資格情報 name。capability キーと既定ファイル basename / エンドポイントパス segment を兼ねます。
backendstringyes—資格情報を発行するクライアント側バックエンド (例: aws-sts、github-cli、static、exec)。呼び出し元の machine 上で、呼び出し元自身の cloud/API 資格情報で実行されます。
configmap[string]stringno—non-secret バックエンド configuration (例: role_arn、duration、region)。シークレット自体を絶対に保持してはいけません。
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-proxy、openai-proxy、github-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 プロファイル)。
envVarstringno—env 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[]stringno—Docker 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.cpu。dockerhost では 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 (delay、monitor、max_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 (nofile、nproc)。
softint64no—soft bound。
hardint64no—hard 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 させることを明示的に選びます。

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

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

EgressRule ​

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

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

IngressSpec ​

公開済みワークロードポートへの HTTP(S) ホスト / パス経路を宣言します (ingress)。Kubernetes は ClusterIP Service 前にネイティブ Ingress を作成します。dockerhost、containerd、bare、incus では 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 型: Prefix、Exact、または ImplementationSpecific。
portintnofirst 公開済みイングレスが経路するコンテナポート。non-zero の場合は仕様の公開済みポートのいずれかと一致する必要があります。
classNamestringnoCORNUS_INGRESS_CLASS, then クラスター既定イングレスの IngressClassName。
annotationsmap[string]stringno—controller-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プロファイル既定、次に autoauto、passthrough、alias、rewrite。
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 は無制限です。
targetintno—replica ごとの autoscaling target (autoscaling.knative.dev/target)。同時 request 数、または rps metric の場合は 1 秒あたりの request 数です。
concurrencyintno0replica あたりの同時 request の上限 (revision の containerConcurrency)。0 は無制限です。
classstringnocluster defaultautoscaler class: kpa または hpa。
metricstringnoconcurrencyscaling metric: concurrency、rps、cpu (cpu は class: hpa が必要)。
timeoutSecondsintno3001 request の最大時間 (revision の timeoutSeconds)。
portintnofirst publishedKnative が経路する単一コンテナポート。0 以外は公開済みポートのいずれかと一致する必要があります。
annotationsmap[string]stringno—上記以外の autoscaling knob 用に revision template へ統合します (競合時は上記フィールドが優先)。

関連ページ ​

Released under the Apache-2.0 License.