SunkCluster resource, and the operators continuously work to make the running cluster match that declaration. This page explains the reconciliation model, the order in which a cluster comes up, and how to read the status conditions that report progress.
The reconciliation model
Reconciliation is the continuous loop that drives a cluster’s actual state toward the desired state you declare. TheSunkCluster resource is the desired state. Two operators reconcile it: the out-of-band operator turns your SunkCluster into managed NodePools and a generated SlurmCluster resource, and the in-cluster operator turns that SlurmCluster into the running Slurm control plane.
Because the loop is continuous, reconciliation governs the whole lifecycle, not just creation. When you change a mutable field, such as scaling a node count, the operators reconcile the difference. When a component fails, the operators work to restore it. The status conditions described later report the result of each loop.
Creation ordering
A cluster comes up in dependency order: each stage depends on the one before it. The first stage is a prerequisite you provide; the rest are reconciled for you after you apply theSunkCluster.
Until a stage’s dependency is satisfied, the stage can’t complete. For example,
NodeSets can’t report ready Pods until their NodePools have provisioned Nodes, and the SlurmCluster can’t bring up slurmctld until the control-plane Nodes exist. This dependency chain is why the status conditions described next become ready in roughly the same order.
Node provisioning is usually the longest stage. A new cluster typically takes around 40 minutes to become ready, and most of that time is the
NodePools reaching their target Node count. Once Nodes are available, the Slurm control plane and login pods come up quickly.Track progress with status conditions
TheSunkCluster reports its progress through status.conditions. Inspect them at any time. Replace [NAMESPACE] with the namespace you applied the SunkCluster to:
Ready condition is the single signal for whether the cluster is fully reconciled. It’s True only when every dependent condition is True. While the cluster is coming up for the first time, Ready reports reason: Bootstrapping and a message that lists the dependent conditions still pending, such as Waiting for conditions: NodePoolsAvailable, NodeSetsAvailable, SlurmClusterAvailable.
Each dependent condition tracks one stage of the creation ordering, so the condition that is not yet Ready tells you where the cluster is:
NodePoolsAvailablecovers theNodePoolsstage.NodeSetsAvailablecovers theNodeSetsstage.SlurmClusterAvailableaggregates theSlurmCluster, includingslurmctld, accounting, login pods, the syncer, and the scheduler.
reason, one of Ready (satisfied), InProgress (working), Bootstrapping (set on the aggregate Ready during first creation), or Error (failed). The message adds detail and usually names the specific resources still pending, such as NodePools not at target: [a192, gb200] or NodeSets not ready: [a192 (0/36 ready)].
When SlurmClusterAvailable is not True, inspect the underlying SlurmCluster to find which subcomponent is pending or failing. Use the same namespace as the SunkCluster:
SlurmCluster subcomponent conditions and the lastReadyTime field, see the SunkCluster reference.
Bootstrapping compared to a regression
The status distinguishes a cluster that has never been ready from one that was ready and then regressed. ThelastReadyTime field records the most recent time Ready became True:
- If
lastReadyTimeis unset andReadyreportsreason: Bootstrapping, the cluster is still coming up for the first time. - If
lastReadyTimeis set butReadyis nowFalse, the cluster was previously healthy and a component has regressed. The dependent condition inreason: Errororreason: InProgressindicates which one.
Ongoing reconciliation
After a cluster is ready, the operators keep reconciling it against theSunkCluster resource. Editing a mutable field, such as a node count, prompts the operators to reconcile the change: scaling a count up or down adjusts the underlying NodePool and NodeSet. Immutable fields, such as a node entry’s name and instanceType, are fixed after creation. For which fields are mutable and the effect of changing version fields, see the SunkCluster reference.
If a cluster is stuck with Ready: False, the most common cause is insufficient quota holding NodePoolsAvailable in reason: InProgress. See Troubleshoot for common failure modes and fixes.