Workload profile migration
Workload profiles are platform-owned declarations on the singleton
TauCluster/cluster. They replace the removed file-based TopologyPolicy
catalog. The controller resolves referenced queues and scheduling objects into
status; TauGrid reads only that status as the single source of truth, rather than
falling back to a compiled catalog or a local policy file.
Migrate the catalog
Translate each supported workload shape into spec.workloadProfiles. Keep live
quota, capacity, ResourceFlavor selectors, and topology object names out of the
declaration: those identities are observations in status.
apiVersion: tau.azure.com/v1alpha1
kind: TauCluster
metadata:
name: cluster
spec:
workloadProfiles:
- name: research.training.1x
description: One-GPU training through the shared queue.
applicability:
teams: [research]
lanes: [training]
namespaces: [research-workloads]
gpusPerWorker: 1
workerCount: 1
mode: fixed
placement: independent
defaultLocalQueue: jobqueue
executionTarget: singleCluster
priorities:
workloadPriorityClassName: taugrid-default
podPriorityClassName: taugrid-default
The controller chart’s tauCluster.workloadProfiles value is the canonical
default catalog. Helm lists replace rather than merge, so a site override must
supply the complete reviewed catalog. The chart synchronization test keeps the
checked-in Helm, Kustomize, and controller sample declarations identical.
Delete old policy ConfigMaps, volume mounts, environment variables, and files only after every submitter uses a ready TauCluster profile. There is no compatibility fallback.
Readiness is fail closed
TauGrid accepts a profile set only when all of the following are true:
status.workloadProfiles.observedGenerationequalsmetadata.generation.- the
WorkloadProfilesReadycondition isTruefor that generation; - the published
profileSetHashis non-empty and matches the normalized resolved profiles; - the selected profile’s
Readycondition isTruefor that generation; and - namespace, team, and lane applicability authorize the caller.
Missing, stale, drifted, forbidden, ambiguous, or unready data stops rendering.
TauGrid stamps successful output with
tau.azure.com/tau-cluster-generation,
tau.azure.com/workload-profile-set-hash, and
tau.azure.com/workload-profile. These annotations identify the observed
revision only; confirm quota or capacity availability with a separate check.
Connected and offline rendering
A normal run, server dry-run, or apply reads the connected cluster:
tau run --config tau.yaml --dry-run=server
Client rendering is still connected unless an explicit snapshot is configured. Export only a ready revision:
tau cluster profiles export --context my-cluster \
--output profiles.snapshot.yaml
Then set policy.workload_profile_snapshot: profiles.snapshot.yaml and provide
explicit policy.namespace, policy.team, and policy.lane. Snapshot input is
accepted only with --dry-run=client; it cannot authorize server dry-run or
apply. Treat snapshots as immutable review artifacts and re-export after a
TauCluster revision.
MultiKueue readiness and ownership
The multiKueue execution target has one deterministic profile contract:
- the standard distribution installs MultiKueue controller support;
TauCluster.status.conditions[MultiKueueReady]reports a current, active AdmissionCheck, referenced MultiKueueConfig, and active worker;- the catalog includes a ready profile with
executionTarget: multiKueue, a dedicated LocalQueue, and the ordinary team, namespace, and lane applicability required by the operator; and - profile selection resolves that profile explicitly through
policy.profileor implicitly as the unique ready, applicable profile.
Failure of readiness or profile resolution stops dispatch. A MultiKueue profile
uses the same fail-closed applicability and ambiguity rules as every other
execution target. The supported boundary is TauGrid-rendered workloads whose kind
and dependencies are configured on the manager and every eligible worker.
Direct kubectl apply, hand-written Workloads, and objects mutated after TauGrid
renders them are outside this contract.
The platform owner owns worker credentials, least-privilege access, distribution and rotation, queue isolation, namespace and ServiceAccount parity, image pull identity, storage reachability, and revocation. This constrained supported capability remains Alpha until release evidence covers an environment/version matrix, manager-to-worker E2E, negative authorization and credential tests, operational enablement, credential rotation/revocation, drain, and rollback.
Drain and roll back
Before changing queue bindings, profile scope, or execution target:
- stop new submissions and set affected ClusterQueues to
HoldAndDrain; - cancel pending owners and wait for pending, reserving, and admitted counts to reach zero;
- export the current TauCluster object and ready profile snapshot;
- apply the new catalog and wait for the new generation and every selected profile to become Ready; then run connected server-dry-run checks; and
- restore admission.
Rollback by draining again, restoring the previous catalog, waiting for its new generation to become Ready, removing the MultiKueue profile and routing objects, then revoking unused worker credentials. Running pods stay pinned to their original placement when a profile changes. Removing profile authorization blocks new TauGrid submissions only. Continue status, log, cancellation, and cleanup operations until every manager and worker object is terminal, since active remote workloads still require active management. Controller status is an observation rather than a reservation: queues, credentials, storage, nodes, and capacity can change between readiness, render, admission, and scheduling.