infra_wiki

fleetd

The service on spore that checks machine identity and controls folly node installation.

live

fleetd controls how a machine becomes a folly Kubernetes node. It runs on spore and uses NetBox for device state and owner requests.

It checks the machine's identity, authorizes installation, and checks the running node each hour. Tinkerbell runs the installation actions.

Start here#

To learn aboutRead
The system and its trust boundariesFolly design
Provision, wipe and retirement requestsLifecycle
Identity checks and configuration deliveryAttestation and installation
Endpoints, alerts and recovery limitsOperate fleetd

How it works#

  1. A machine boots HookOS, the network installation environment.
  2. Its Trusted Platform Module (TPM) proves possession of the approved endorsement keys (EKs).
  3. fleetd checks the boot evidence and the device's declaration in NetBox.
  4. fleetd issues device certificates and authorizes an eligible installation.
  5. Tinkerbell wipes the declared disk and installs the class's operating system.
  6. The node fetches its configuration once: a Talos class its machine config, a nixos-image or alpine-image class its seed, the JSON that names the profile it switches into, its address and the fleet's endpoints. fleetd then marks the device active. NixOS node image says how a NixOS node's first boot reads its seed. A cloud-init-nocloud class's install fetches its seed, a tar of the NoCloud files, in HookOS and writes it onto the disk, so the device is active before the node's first boot.
  7. The running node sends a signed boot check each hour.

The device certificates are the Local Device Identity (LDevID) and Local Attestation Key (LAK) certificates. The LAK signs later boot checks.

Owner actions#

The owner sets desired_action in NetBox to request provision, attest or wipe. The decommissioning status requests retirement.

Important limits#

  • Provision, wipe and retirement erase data. Each requires the declared disk serial.
  • A successful installation Workflow means the reboot starts. It does not prove that Talos boots or Kubernetes becomes ready.
  • A spore reboot loses pending configurations. Recovery requires a new provision.
  • Retirement cannot revoke an issued kubelet client certificate.
  • TPM 1.2 nodes and class worker-g2 cannot use this installation path.

Reference#

  • Source and HTTP contract: apps/fleetd/
  • Service: nix/services/fleetd.nix
  • Class declarations: clusters/folly/fleet/classes.json
  • Kea reservations, one per NetBox device with a MAC: /var/lib/kea/fleet/reservations.json on spore (Kea)
  • Alerts: clusters/folly/monitoring/fleetd-rules.yaml

Edit on GitHub

↑↓ move ↵ open esc close