Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The managed Kueue extension installs and manages the supported Kueue controller on Azure Kubernetes Service (AKS). It also generates ResourceFlavors for eligible user nodes and provides default workload priority classes that you can reference from your own queues and workloads.
This article shows you how to install, verify, update, and uninstall the extension by using the Azure CLI. For concepts, see Managed Kueue extension overview. To configure queues and try workload admission and preemption, see Schedule and deploy batch jobs with the managed Kueue extension.
Important
AKS preview features are available on a self-service, opt-in basis. Previews are provided "as is" and "as available," and they're excluded from the service-level agreements and limited warranty. AKS previews are partially covered by customer support on a best-effort basis. As such, these features aren't meant for production use. For more information, see the following support articles:
Prerequisites
- An AKS cluster that runs Kubernetes 1.34 or later. To create one, see Create an AKS cluster using the Azure CLI.
- A current version of the Azure CLI and the
k8s-extensionCLI extension version 1.9.3 or later. - kubectl compatible with your cluster version.
- Permissions to manage cluster extensions, retrieve cluster credentials, and read the Kubernetes resources used to verify the installation.
Limitations
- The managed extension currently supports cluster autoscaler integration. Node auto-provisioning and AKS Automatic aren't supported by this preview.
- Uninstall an existing self-hosted Kueue installation before installing the managed extension, or use a clean target cluster. Kueue is a cluster singleton; installation rejects an unmanaged controller even in another namespace. Preserve configuration and review active and queued workloads before planning an uninstall.
- Supported workload integrations include Kubernetes Job, Pod, Deployment, StatefulSet, JobSet, Ray, MPIJob, and Trainer v2 TrainJob.
- Legacy Kubeflow v1 jobs, AppWrapper, and LeaderWorkerSet aren't supported integrations in this managed preview.
Prepare your environment
Set your subscription and cluster details:
SUBSCRIPTION_ID="<subscription-id>"
RESOURCE_GROUP="<resource-group>"
CLUSTER_NAME="<aks-cluster-name>"
EXTENSION_NAME="aks-kueue"
RELEASE_TRAIN="preview"
az login
az account set --subscription "$SUBSCRIPTION_ID"
az aks get-credentials --resource-group "$RESOURCE_GROUP" --name "$CLUSTER_NAME"
az extension add --name k8s-extension --upgrade
az extension show --name k8s-extension --query version --output tsv
Register the resource providers if they aren't already registered:
az provider register --namespace Microsoft.ContainerService --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait
Uninstall the existing self-hosted Kueue
Skip this section if your cluster doesn't have a self-hosted Kueue controller. If it does, plan its uninstall before you install the managed extension.
Warning
Uninstalling self-hosted Kueue can delete its CRDs and all custom resources of those types. Before you proceed, save important configuration and workload manifests in your own source of truth. Preserve ClusterQueues, LocalQueues, ResourceFlavors, workload priority classes, and admission policies that you need to recreate. Review running and queued workloads, preserve application data, and pause GitOps reconciliation so that it doesn't reinstall the old controller.
Follow the supported uninstall procedure for the version and installation method that you used. For a Helm installation, first identify its release and namespace:
helm list --all-namespaces
After you verify the release identity and preserve the required information, uninstall that self-hosted release:
OSS_KUEUE_RELEASE="<self-hosted-release-name>"
OSS_KUEUE_NAMESPACE="<self-hosted-release-namespace>"
helm uninstall "$OSS_KUEUE_RELEASE" --namespace "$OSS_KUEUE_NAMESPACE"
For a manifest-based installation, follow the upstream uninstall instructions. Confirm that the old controller is no longer running before continuing. Don't transfer ownership of a self-hosted controller or its CRDs to the managed extension.
After you install the managed extension, restore only your customer-owned queue and workload configuration. Reference the new managed resources rather than restoring old controller manifests or creating replacements with reserved AKS names.
Install the managed Kueue extension
Check which extension versions are available for your cluster and release train:
az k8s-extension extension-types list-versions-by-cluster \
--resource-group "$RESOURCE_GROUP" \
--cluster-name "$CLUSTER_NAME" \
--cluster-type managedClusters \
--extension-type microsoft.kueue \
--release-train "$RELEASE_TRAIN" \
--output table
If no compatible version is returned, check the prerequisites and package availability before continuing.
Install the extension into the required kueue-system namespace. This example enables compatible automatic upgrades and doesn't specify an exact version:
az k8s-extension create \
--resource-group "$RESOURCE_GROUP" \
--cluster-name "$CLUSTER_NAME" \
--cluster-type managedClusters \
--name "$EXTENSION_NAME" \
--extension-type microsoft.kueue \
--scope cluster \
--release-namespace kueue-system \
--release-train "$RELEASE_TRAIN" \
--auto-upgrade-mode compatible
Don't install another Kueue controller or use direct Helm operations to configure the managed release.
Verify the extension installation
Use the same extension resource name that you used during installation:
az k8s-extension show \
--resource-group "$RESOURCE_GROUP" \
--cluster-name "$CLUSTER_NAME" \
--cluster-type managedClusters \
--name "$EXTENSION_NAME" \
--query '{name:name,version:currentVersion,provisioningState:provisioningState,extensionState:extensionState,statuses:statuses}' \
--output json
Confirm that provisioning succeeds and the extension reports availability. Then check both controller deployments and the managed Kueue APIs:
kubectl rollout status deployment/kueue-controller-manager --namespace kueue-system --timeout=5m
kubectl rollout status deployment/kueue-extension --namespace kueue-system --timeout=5m
kubectl wait --for=condition=Established \
crd/clusterqueues.kueue.x-k8s.io \
crd/localqueues.kueue.x-k8s.io \
crd/resourceflavors.kueue.x-k8s.io \
crd/workloadpriorityclasses.kueue.x-k8s.io \
crd/workloads.kueue.x-k8s.io \
--timeout=2m
If these checks fail, inspect extension status, controller events, and logs before making further changes. Don't replace managed CRDs with definitions from an upstream release. See Troubleshoot cluster extension deployment errors.
Update the managed Kueue extension
Use the version-listing command in Install the managed Kueue extension to check which versions are available for your cluster.
In the same shell session, or after you redefine the variables in Prepare your environment, enable compatible automatic upgrades for an existing extension:
az k8s-extension update \
--resource-group "$RESOURCE_GROUP" \
--cluster-name "$CLUSTER_NAME" \
--cluster-type managedClusters \
--name "$EXTENSION_NAME" \
--release-train "$RELEASE_TRAIN" \
--auto-upgrade-mode compatible \
--yes
Don't combine an exact --version with automatic upgrades. Repeat the verification checks after an update and confirm the installed version.
Uninstall the managed Kueue extension
Uninstall the extension only when you intend to stop using Kueue, not as a controller-health workaround.
Warning
Uninstalling managed Kueue deletes Kueue custom resources across the cluster, including customer-created LocalQueues, ClusterQueues, ResourceFlavors, Workloads, and other queue configuration. Cleanup also clears finalizers that block deletion. Preserve customer-owned configuration in Git or export it before uninstalling. Pause GitOps reconciliation during the planned uninstall.
Kubernetes Jobs and their pods aren't deleted when you uninstall Kueue. Running Jobs continue without Kueue management, while queued Jobs remain suspended. A later installation creates new Workloads for surviving Jobs that still have a queue label; it doesn't restore the deleted queue policy or admission state.
Use the actual extension resource name and the cluster variables from Prepare your environment. If you didn't install it in this session, discover its name with az k8s-extension list before deleting it:
az k8s-extension delete \
--resource-group "$RESOURCE_GROUP" \
--cluster-name "$CLUSTER_NAME" \
--cluster-type managedClusters \
--name "$EXTENSION_NAME" \
--yes
Before submitting queued Jobs after a new installation, restore and verify your customer-owned queue configuration. Don't delete CRDs or manually clear finalizers to bypass a failed uninstall.
For generated resource flavors, node-pool setup, queue configuration, and the low- and high-priority example, continue to Schedule and deploy batch jobs.