Enroll compute nodes and converge
After genesis, every machine other than the founder network-boots from the
cluster's own booter. You install nothing by hand. This page takes the
declared machines from powered off to approved. Then it converges the
committed intent onto them.
Before you start, confirm all of the following:
- Genesis completed, and
tritonadm cn listshows the founder asapproved. - The answers document declares a booter (
booter.enabled). The admin NIC of each machine is on the admin layer-2 segment. - You can reach the BMC or the console of each machine, to set it to network boot once.
- Each machine boots UEFI with Secure Boot off. The enrollment platform image is not signed for Secure Boot.
Step 1: Check that the booter serves
On the founder, as root:
tritonadm infra zone list --kind booter
tritonadm pi list
tritonadm cn boot policy show
The booter zone is online. The enrollment platform image is on the staging
list. The boot policy names it as enrollment_pi. Genesis stages the
platform image that the answers document names. If pi list is empty, see
Troubleshooting an install.
Auto-enrollment is on by default. The declared node roster decides
admission. A machine whose identity matches a declaration is admitted and
moves to a cn_range address. A machine that matches no declaration is
recorded as discovered, and the booter serves it nothing. This is what
keeps two clusters safe on one admin segment. For the strictest posture,
turn automatic admission off and authorize each machine by hand:
tritonadm cn boot policy set --auto-enroll false
Step 2: Network-boot each machine
Set the machine to boot from the network once. Then reset it. Setup writes a local boot tree, so one network boot is sufficient.
From the BMC, the Redfish one-time boot override is two requests:
PATCH https://<BMC>/redfish/v1/Systems/System.Embedded.1
{"Boot":{"BootSourceOverrideEnabled":"Once","BootSourceOverrideTarget":"Pxe"}}
POST https://<BMC>/redfish/v1/Systems/System.Embedded.1/Actions/ComputerSystem.Reset
{"ResetType":"ForceRestart"}
Do not include BootSourceOverrideMode in the boot-override request. On
iDRAC9 that field stages a BIOS configuration job through the Lifecycle
Controller. When that controller is busy, the job stays in Scheduling, and
the host stops in POST with the override unused. The two-field form above
creates no job.
The System.Embedded.1 path is Dell's. Other BMCs name the system resource
differently. The Boot object is the same.
Watch the roster fill. On the founder:
tritonadm cn boot declared
The command joins the declared nodes with live state. It shows which
machines netbooted, which enrolled, and which have not appeared. A machine
that booted takes a join_dhcp_range lease and announces its identity. It
then appears in tritonadm cn list as awaiting_setup.
A machine that never takes a lease is almost never a booter problem. See Troubleshooting an install.
Step 3: Approve each machine for setup
Setup is the one step that erases disks, so it is a separate operator action for each machine. First read the disk inventory and the proposed layout:
tritonadm cn setup plan <CN>
<CN> is the hostname, the UUID, or a UUID prefix. The proposal is advisory.
The layout you pass to approve is the layout that setup builds.
Setup approval destroys every disk that the confirmed layout uses. The
machine builds its zones pool with zpool create -f. The -f flag
overrides the ZFS refusal to reuse a disk that belongs to another pool.
There is no undo.
tritonadm cn setup approve <CN> --layout mirror --hostname <HOSTNAME>
--layout is required. It accepts single, mirror, raidz1, raidz2,
or raidz3. Use the value that the answers document declares in
storage.layout for that node. --width, --spares, --exclude,
--no-cache, and --compress refine the pool. Omit them to let the layout
heuristic select the values. --hostname sets the node name that the machine
keeps. It must be an RFC 1123 label.
The command starts the setup saga. Watch it:
tritonadm cn show <CN>
tritonadm operation list
state reads setting_up while the install runs, then approved. The
machine reboots into its local boot tree, and its agent registers. A machine
that returns to awaiting_setup records the reason in last_setup_error.
Read it with tritonadm cn show <CN> --json.
Repeat this step for every declared machine that will hold a control-plane seat. Do this before you converge. The other machines can enroll later.
Step 4: Converge
When the machines that will hold seats are approved, run this on the
founder:
tritonadm setup converge
Convergence drives the observed state toward the committed intent: ClickHouse, DNS and certificate re-proof, object storage, the booter, and the boot policy. Every step is re-entrant, so you can run the command more than once. It is also the forward path for a genesis that stopped after the pivot. This step turns a single-seat FoundationDB into a three-seat cluster.
converge needs the release channel, and genesis does not record it. If the
command stops with resolve the release channel for converge, set the
upstream once:
tritonadm config set channel.upstream_url https://tritoncloud.nyc3.digitaloceanspaces.com/channels/edge.json
The same setting lets tritonadm channel refresh mirror the upstream into
the cluster later.
Step 5: Check the result
tritonadm fdb status
tritonadm intent show
tritonadm operation list
tritonadm cn list
fdb status reports the declared seat count, quorum, and fault tolerance.
operation list is a summary. For anything that looks wrong, read the saga
with tritonadm operation show <OPERATION> --json. Walk steps to the
first step that is not succeeded.
Next steps
- Updates and channels to keep the fleet current.
- Enroll a compute node covers the enrollment state machines in full, including a machine that already runs SmartOS.
- Compute node lifecycle explains the states.
tritonadm cnreference for everycn bootandcn setupflag.