- An organization administrator creates a one-shot enrollment blob on the Hub.
- A worker-cluster administrator passes that blob to the worker bootstrap.
Prerequisites
You need:- A Konduktor organization and tenant namespace created by Trainy
- An Authentik account with access to the Hub and organization-admin access to that tenant namespace
- The Google Cloud CLI and
gke-gcloud-auth-plugin kubectl- Helm v3.17.1 or newer
- Cluster-admin access to the worker cluster
- The
konduktorCLI - Outbound HTTPS and WebSocket access from the worker to the Hub endpoints
WORKLOAD_NAMESPACES must match the
namespace list configured on the Konduktor organization. Do not add unrelated
worker-local namespaces: Konduktor does not manage their LocalQueues.
Get scoped access to the Hub
Trainy does not distribute a static Hub kubeconfig. Human access uses Authentik and Google Workforce Identity Federation:- Authentik verifies your identity and group memberships.
- Google exchanges that identity for a short-lived Workforce credential.
gcloudwrites a kubeconfig that uses the federated credential.- Kubernetes RBAC grants access in the tenant namespaces associated with that identity’s organization-admin group memberships.
konduktor-hub-users, which permits discovery of and connection to the Hub- Your organization’s administrator group, which grants Kubernetes access in the organization’s tenant namespace
CLOUDSDK_CONFIG makes the Hub context’s exec plugin use this isolated
Workforce identity. If you run a Hub command from another terminal, export the
same CLOUDSDK_CONFIG there and unset the three credential override variables
before running it.
If your contexts live in a non-default kubeconfig, also pass
--kubeconfig /absolute/path/to/config immediately after konduktor, and use
the same path with kubectl --kubeconfig. Command-local --kubeconfig remains
supported for compatibility, but the root form keeps the target selection in
one consistent place. For example:
yes; the cluster-scoped Organization
check must print no. These checks do not prove that the account lacks access
to every other tenant namespace. If namespace isolation must be audited, ask
your organization owner or Trainy to confirm that the account has no unintended
organization-admin group memberships.
Enroll a new cluster
Confirm both Kubernetes targets
yes. Organization administrators do not
need permission to create Organization objects. Confirm that Helm reports
v3.17.1 or newer before creating the one-shot enrollment.Create the one-shot bootstrap blob
--org, endpoint overrides, or a CA bundle for
the hosted Hub.Bootstrap the worker
Wait for readiness
True:Remove the bootstrap secret
shred cannot guarantee physical overwriting on every filesystem, including
copy-on-write, journaled, snapshotted, and remote filesystems. The fallback
rm only unlinks the file. Use your organization’s approved secret-deletion
procedure when unlinking is not sufficient.Enroll a cluster without stopping existing workloads
Enrollment does not require draining the worker. The worker agent upgrades Kueue and JobSet in place to the versions selected by the organization, and a cordon prevents new Hub dispatch while that configuration converges. The cordon does not suspend or delete work already running on the cluster. Use this procedure for a worker that already runs Kueue workloads:Record the running workload invariants
Pause new Hub submissions
Bootstrap, then immediately cordon Hub dispatch
WorkerCluster appears,
run this from another trusted terminal that uses the same isolated
CLOUDSDK_CONFIG and Hub context:DispatchReady remains False while the worker is cordoned. Existing
worker-local workloads continue running. Keep organization submissions
paused; the post-registration cordon alone cannot guarantee that there was
no new-dispatch window.Wait for dependency convergence
Resolve existing Kueue object ownership
WorkerConfigured reports:Verify the old work, then enable dispatch
WorkerConfigured=True at the current WorkerCluster
generation and DispatchReady=True.Run a canary through the Hub
user-queue, then
verify that it completes and its logs are available through Konduktor.If the organization has several dispatch-ready workers, a normal canary
proves the pool, not one particular member. To prove exact routing,
coordinate a short cordon of the other pool members, submit the canary, and
uncordon them immediately afterward. Cordoning affects only new dispatch.Resume organization submissions
Adopt existing Kueue and DWS objects
Thegke-dws preset manages this complete graph:
ResourceFlavor/default-flavorClusterQueue/cluster-queueAdmissionCheck/dws-provProvisioningRequestConfig/dws-configLocalQueue/user-queuein every organization workload namespace
WORKLOAD_NAMESPACES:
gke-dws preset. After confirming they match, assign the cluster-scoped
objects to this WorkerCluster without recreating them:
WorkerConfigured=True before uncordoning. Recheck every cluster- and
namespace-scoped UID to confirm that adoption updated the existing objects
rather than replacing them.
Troubleshooting
Registered=False
Check whether the one-shot enrollment was redeemed:
status.usedAt means the worker did not complete registration. Check
the bootstrap output and worker access to the Hub API.
Connected=False
Check the worker agent and outbound access to the Hub tunnel:
WorkerConfigured=False
Read the condition message from konduktor cluster status. An adoption refusal
requires the review described above. Other failures usually identify the Kueue
object or API that did not apply.
DispatchReady=False
Confirm the worker is connected, configured at the current generation, and not
cordoned. DispatchReady becomes True only after the Hub’s MultiKueue member
is active.
Observability says NoTrafficYet
ObservabilityIngestHealthy=Unknown does not make the four enrollment
conditions false. Run a canary long enough for logs and metrics to be scraped,
then verify both through the Hub. A worker using the gateway transport can have
queryable telemetry while the tunnel-traffic health condition still reports
NoTrafficYet.
Decommission or move a worker
Stop new Hub dispatch before maintenance:worker reset leaves customer workloads, Kueue and JobSet objects, cert-manager,
and a possibly shared VictoriaMetrics operator in place. Enrolling the cluster
again requires a new one-shot bootstrap command.