- 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 accepted WorkOS invitation to your Konduktor organization 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
Sign in to the hosted Hub and select the tenant namespace:TENANT_NS, and
exchanges its access token for a short-lived Google Workforce credential.
Google does not start another browser login. The CLI creates a Hub Kubernetes
context and makes it current after successful setup.
Your organization owner or Trainy must invite you and assign the tenant
namespace before login can configure it. Enrollment also requires permission
to create BootstrapEnrollment objects in that namespace. Signing in does not
grant that permission by itself.
Use the printed Hub context explicitly for the rest of this procedure. Each
context records its own organization-specific credential source under
~/.konduktor/auth/; another terminal can use the same kubeconfig without
exporting CLOUDSDK_CONFIG. Keep the CLI installed in the Python environment
used for login so the credential source can refresh your session. If that
environment changes, run konduktor login again.
If your contexts live in a non-default kubeconfig, pass its path before the
login command and use the same path for later commands:
kubectl --kubeconfig /absolute/path/to/config for the checks below if you
selected a non-default file.
Confirm that the federated identity can connect, has the required enrollment
permission in the intended tenant, and cannot create cluster-scoped
Organizations:
yes; the cluster-scoped Organization
check must print no. These checks do not prove that your account lacks access
to every other tenant. Ask your organization owner or Trainy to confirm your
organization memberships if you need an access audit.
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 kubeconfig and
printed 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.