Genesis on the founder
tritonadm setup bootstrap turns the founder into a working control plane in
one run. It installs the signed zone images. It creates the founder
FoundationDB and tritond zones. It installs the global-zone agent and
creates the operator credentials. It approves the founder as a compute node
and imports the answers document as the committed cluster intent. It starts
the DNS server and requests the first certificate when the answers document
declares them. Then it performs the founder pivot. When the run completes,
the founder runs triton-fdb1, triton-tritond1, and tritonagent, and the
CLI points at the new tritond.
Before you start, confirm all of the following:
- Every item under Requirements is true. Node zero is prepared, the networks reach their gateways, the parent zone delegates to the cluster, and the answers document validates.
tritonadmis installed on the founder. See Install the tritonadm CLI.- You are root in the founder's global zone.
- You run under
screenortmux, or you redirect the output to a log file. Genesis takes tens of minutes. Most of that time is zone image downloads.
Preview the plan
Always run the dry run first. It changes nothing. It is the only step where you can read the whole plan before the control plane commits it. On the founder, as root:
tritonadm setup bootstrap --answers <ANSWERS_FILE> --channel edge --dry-run
The preview is what genesis will build. Read these sections in order:
| Section | Check |
|---|---|
NODE | The founder matched the declaration you expect, and the section names the key that matched. machine shows the observed serial. Compare it with the declared serial. |
NETWORKS | The address map for each network. The founder's own address is not inside a declared range. |
CONTROL PLANE | The seat proposal and its failure domains. The genesis and target FoundationDB mechanisms. |
EXTERNAL DNS | The exact parent-zone records to create. Create them now if you have not. |
IMPACT | What genesis preserves, creates, and destroys. Genesis adopts an existing zones pool and never rebuilds it. |
FINDINGS | Everything that validation flagged. Any error-severity finding stops the run. |
The preview ends with two fingerprints. The answers words identify the
document. The confirm words identify this plan against these facts. A
changed plan changes the words.
To validate a document off-node, capture the founder's facts once. Then
resolve the document against that snapshot with --facts <FACTS_FILE>. With
--dry-run the run needs no addresses.
Run genesis
The founder pivot at the end of genesis deletes the founder tritond zone
and decommissions triton-fdb0. A failed pivot fails the whole run and
reports that genesis is not complete. To recover, correct the cause and run
setup bootstrap again. The command refuses to run again after a completed
pivot.
On the founder, as root:
tritonadm setup bootstrap --answers <ANSWERS_FILE> --channel edge --timeout 0
--timeout 0 removes the time limit on each API call. Image downloads and
health gates are slow. A client timeout in the middle of a step is harder to
diagnose than a long wait.
You can run genesis again after an interruption at any point before the
pivot. After the pivot, the forward path is tritonadm setup converge.
Two flags let the run continue past a failed check. Both produce a degraded install instead of a working one. Prefer to correct the cause.
| Flag | Effect |
|---|---|
--force-skip-dns-preflight | Continue past a failed delegation check. DNS and certificates do not work until the delegation matches the plan. The reconciler enables them when it does. |
--force-skip-cert-gate | Continue when ACME did not issue a certificate inside the wait budget. The cluster starts without TLS until the certificate reconciler succeeds on its own. |
--insecure-issuer accepts a plaintext single sign-on issuer for an answers
document with no dns block. The issuer cannot change after a realm is
seeded. Without a DNS name, the issuer is lost with the founder zone, and SSO
cannot be recovered. Use this flag for labs that you will discard only.
What bootstrap does, in order
- Resolves the answers document against the founder's facts and prints the plan.
- Fetches the channel manifest and verifies its minisign signature against
the publisher key compiled into
tritonadm, or reads--image-dir. - Installs the
triton-platformimage and createstriton-fdb0. Then runs FoundationDB genesis. - Creates
triton-tritond, gated onhttp://<TRITOND_IP>:8080/v1/health. - Installs
tritonagentin the global zone and writes its endpoint to/opt/triton/tritonagent/etc/agent.env. - Reads the one-time root password from the
tritondzone and writes/root/triton-root-passwordat mode0600. Then signs the CLI in with that password. - Approves the founder as a compute node and imports the answers document as the committed cluster intent.
- Starts the DNS server and requests the first certificate, when the answers document declares them.
- Performs the founder pivot.
The founder pivot
The founder starts as a cluster of one: triton-fdb0 and triton-tritond.
Genesis builds a second pair, triton-fdb1 and triton-tritond1. It moves
the FoundationDB coordinator to the second pair, retires the first pair, and
points the CLI and the node agent at the second pair.
The pivot proves that the control plane can rearrange its own store before
anything depends on it. A bootstrap that cannot do this must not hand over
the system. For that reason a failed pivot fails the install instead of
leaving a cluster that looks complete. If you see
D6 founder pivot failed — genesis is NOT complete, see
Troubleshooting an install.
Save the root credential
Genesis writes the one-time root password to /root/triton-root-password
with endpoint, username, and password lines. The global zone's /root
does not survive a reboot, so this file is a handoff, not storage. Move it
into your secret store and delete it. The password stays valid after the
pivot, because the replacement tritond serves the same
FoundationDB-backed user state.
Sign in
Genesis points the CLI at the post-pivot tritond. If the founder's global
zone cannot yet resolve the cluster's own DNS names, genesis uses a plaintext
host-local address instead and reports that. This is expected before the
delegation works.
To sign in from another host, or if the automatic configuration reported a
warning, run this on any host with tritonadm:
printf '%s' '<ROOT_PASSWORD>' | tritonadm configure \
--endpoint http://<TRITOND_IP>:8080 --username root --password-stdin
Then create a long-lived key and stop using the stored root token:
tritonadm api-key create --description "operator key"
Check that the control plane answers
On the founder, as root:
tritonadm whoami
tritonadm fdb status
tritonadm cn list
tritonadm intent show
fdb status reports redundancy, coordinators, and fault tolerance. cn list
shows the founder as an approved compute node. intent show prints the
fingerprint words of the committed answers document. They match the preview.
tritonadm fdb status reaches FoundationDB through tritond. When
tritond is unreachable, add --break-glass to read the FoundationDB zone
directly over zlogin from the global zone. --zone selects the zone alias.
Start over
tritonadm setup destroy removes what setup created on this host. By
default it prints the plan and prompts for confirmation. --yes skips the
prompt. It does not destroy the zones pool, because setup adopted that
pool and did not create it.
Next steps
- Enroll compute nodes and converge is the next phase.
- Troubleshooting an install for a genesis that stops.
tritonadm setupreference for every flag onbootstrap,converge,apply, anddestroy.