Skip to content

Architecture ​

Kurrent consists of a control plane, storage nodes and devices. The control plane handles identity, ledgers, scheduling and configuration over HTTPS; the data plane carries block I/O between devices and storage nodes and never traverses the control plane.

Architecture

Invariants ​

InvariantMeaning
Control/data separationA control-plane outage affects provisioning and boots but not established data-plane I/O
Nodes hold no system stateSystem, identity and data come from the network; devices retain only a boot identity anchor
One authority per factBinding follows the device ledger, disks follow their NQN, declarations follow YAML; derived artifacts never write back
Deny by defaultManagement access is granted by declared principal classes; data-plane boot is refused when credentials or the port are not ready
Idempotent convergenceinit / join can be rerun; failures roll back without half-applied state

Components ​

  • Control-plane service — Control-plane container, unix socket; Device/Worker ledgers, binding, storage scheduling, boot variables, audit, configuration status.
  • nginx — Control-plane container, :443; The only external entry: WebUI, /api/cp/, read-only boot endpoints, iPXE assets and menu.
  • dnsmasq — Control-plane host, host network; DHCP / TFTP; dnsmasq.conf is rendered from the declaration.
  • WebUI — nginx static assets; A REST client; session cookie or mTLS.
  • CLI — Operator shell; Declaration generation, validation, convergence, credentials and ledgers.
  • Agent — Storage node, :4840 mTLS; Disk-file lifecycle, master scanning, backend commands.
  • nvmet-host — Storage node, shared-volume UDS; configfs operations, host matrix, DHHC-1, TLS PSK injection.
  • Host kernel nvmet — Storage-node host; NVMe/TCP target on data-plane port 4421.
  • Device firmware — Device; iPXE network boot, device key, TOFU, NVMe/TCP and NBCT.

Firmware is built from a separate repository; see Firmware.

Ports ​

Control-Plane Host ​

PortProtocolPurpose
53UDP/TCPdnsmasq DNS
67 / 69UDPDHCP / TFTP
80TCP301 redirect to 443 only
443TCPThe only HTTPS entry
—unix socketControl-plane management plane; nginx and health checks

The control plane has no TCP listener and does not mount docker.sock.

Storage Node ​

PortProtocolPurpose
4840TCPAgent HTTPS (mTLS, called by the control plane)
4421TCPNVMe/TCP data plane, TLS 1.3 enforced; shared by firmware and kernel
—Shared-volume UDSnvmet-host management plane (mTLS)
3260TCPiSCSI compatibility backend (no live boot path on mainline)

Device ​

A device only needs DHCP, TFTP, HTTPS and the storage-node data plane; it does not access the management plane directly.

Data Flow ​

Management Request ​

text
browser / CLI
  → 443 nginx
      → mTLS validation (users/nodes bundle + CRL)
      → identity headers injected (SUCCESS only)
  → unix socket control plane
      → authenticator chain (certificate / token / session)
      → principal classes and RBAC
      → ledgers / audit / Agent calls

Provisioning and Credentials ​

text
control plane
  → 4840 Agent (mTLS)
      → UDS nvmet-host (mTLS)
          → configfs: subsystem / namespace / port / allowed_hosts / dhchap_key
          → kernel .nvme keyring: TLS PSK

Push results are written back to the ledger; failures are retried by background reconciliation.

Boot ​

text
device
  → DHCP / TFTP (first hop)
  → HTTPS: scripts, device report, challenge, /boot-vars
  → 4421: NVMe/TCP + TLS 1.3, authentication and I/O
  → NBFT / NBCT → initramfs

The control plane participates only in the HTTPS segment; the data plane connects the device directly to the storage node.

State and Derived Artifacts ​

  • Control-plane declaration — control_plane/kurrent.yaml; Authoritative input.
  • Node declaration — storager/kurrent.yaml; Authoritative input.
  • Devices, Workers, disks, credentials, sessions, tokens — control_plane/state/*.yml; Runtime ledgers.
  • Audit — control_plane/state/audit.jsonl; Append-only log.
  • PKI — control_plane/state/pki/; Trust roots and component certificates.
  • TOFU server certificate — control_plane/state/certs/; Boot-chain certificate and fingerprint.
  • dnsmasq configuration — dnsmasq/dnsmasq.conf; Derived from the declaration; never edited by hand.
  • Boot scripts — tftp/; Menu and scripts; firmware binaries come from the firmware repository.

There is no database. The control plane is a single node with plain-file state; state backup, permissions and single-node failure boundaries are the deployment's responsibility.

Failure Domains ​

FailureImpact
Control plane stopsNew provisioning, new boots, configuration changes and audit stop; established NVMe/TCP I/O continues
nginx stopsManagement and boot-chain HTTPS unavailable; data plane unaffected
dnsmasq stopsNew devices cannot DHCP/TFTP boot; running systems unaffected
One storage node stopsDisks on that node cannot boot or lose I/O; other nodes unaffected
Control-plane host lostRestore from backup; losing PKI/certificates forces components to re-enroll and devices to re-trust
Device lostRebind a new device; system disk and Worker identity remain

Extension Points ​

  • Storage backends: the Agent encapsulates nvmet / iSCSI differences; the control plane only speaks HTTP.
  • Transport: the stateless semantics do not depend on a particular block protocol; replacing the transport does not change the entity model.
  • Boot behaviour: menu, timeout and default disk are projected by the control plane and never written into the disk.
  • Firmware: built from patches in a separate repository, reproducible on any upstream baseline.

Future directions (high availability, IPv6, ARM, data disks, Windows/ESXi) are in the Roadmap.

Further Reading ​