Installation

Installing Kueue to a Kubernetes Cluster

Before you begin

Make sure the following conditions are met:

  • A Kubernetes cluster with version 1.29 or newer is running. Learn how to install the Kubernetes tools.
  • The kubectl command-line tool has communication with your cluster.

Kueue publishes metrics to monitor its operators. You can scrape these metrics with Prometheus. Use kube-prometheus if you don’t have your own monitoring system.

The webhook server in kueue uses an internal cert management for provisioning certificates. If you want to use a third-party one, e.g. cert-manager, follow the cert manager guide.

Install a released version

Install by kubectl

To install a released version of Kueue in your cluster by kubectl, run the following command:

kubectl apply --server-side -f https://github.com/kubernetes-sigs/kueue/releases/download/v0.16.0/manifests.yaml

To wait for Kueue to be fully available, run:

kubectl wait deploy/kueue-controller-manager -nkueue-system --for=condition=available --timeout=5m

Install by Helm

To install a released version of Kueue in your cluster by Helm, run the following command:

helm install kueue oci://registry.k8s.io/kueue/charts/kueue \
  --version=0.16.0 \
  --namespace  kueue-system \
  --create-namespace \
  --wait --timeout 300s

You can also use the following command:

helm install kueue https://github.com/kubernetes-sigs/kueue/releases/download/v0.16.0/kueue-0.16.0.tgz \
  --namespace kueue-system \
  --create-namespace \
  --wait --timeout 300s

Add metrics scraping for prometheus-operator

To allow prometheus-operator to scrape metrics from kueue components, run the following command:

kubectl apply --server-side -f https://github.com/kubernetes-sigs/kueue/releases/download/v0.16.0/prometheus.yaml

Add API Priority and Fairness configuration for the visibility API

See Configure API Priority and Fairness for more details.

Uninstall

To uninstall a released version of Kueue from your cluster by kubectl, run the following command:

kubectl delete -f https://github.com/kubernetes-sigs/kueue/releases/download/v0.16.0/manifests.yaml

To uninstall a released version of Kueue from your cluster by Helm, run the following command:

helm uninstall kueue --namespace kueue-system

Install a custom-configured released version

To install a custom-configured released version of Kueue in your cluster, execute the following steps:

  1. Download the release’s manifests.yaml file:
wget https://github.com/kubernetes-sigs/kueue/releases/download/v0.16.0/manifests.yaml
  1. With an editor of your preference, open manifests.yaml.
  2. In the kueue-manager-config ConfigMap manifest, edit the controller_manager_config.yaml data entry. The entry represents the default KueueConfiguration. The contents of the ConfigMap are similar to the following:
apiVersion: v1
kind: ConfigMap
metadata:
  name: kueue-manager-config
  namespace: kueue-system
data:
  controller_manager_config.yaml: |
    apiVersion: config.kueue.x-k8s.io/v1beta2
    kind: Configuration
    namespace: kueue-system
    health:
      healthProbeBindAddress: :8081
    metrics:
      bindAddress: :8443
      # enableClusterQueueResources: true
    webhook:
      port: 9443
    manageJobsWithoutQueueName: true
    internalCertManagement:
      enable: true
      webhookServiceName: kueue-webhook-service
      webhookSecretName: kueue-webhook-server-cert
    waitForPodsReady:
      timeout: 10m
    integrations:
      frameworks:
      - "batch/job"

The integrations.externalFrameworks field is available in Kueue v0.7.0 and later.

  1. Apply the customized manifests to the cluster:
kubectl apply --server-side -f manifests.yaml

Install the latest development version

To install the latest development version of Kueue in your cluster, run the following command:

kubectl apply --server-side -k "github.com/kubernetes-sigs/kueue/config/default?ref=main"

The controller runs in the kueue-system namespace.

Uninstall

To uninstall Kueue, run the following command:

kubectl delete -k "github.com/kubernetes-sigs/kueue/config/default?ref=main"

Build and install from source

To build Kueue from source and install Kueue in your cluster, run the following commands:

git clone https://github.com/kubernetes-sigs/kueue.git
cd kueue
IMAGE_REGISTRY=registry.example.com/my-user make image-local-push deploy

Add metrics scraping for prometheus-operator

To allow prometheus-operator to scrape metrics from kueue components, run the following command:

make prometheus

Uninstall

To uninstall Kueue, run the following command:

make undeploy

Install via Helm

To install and configure Kueue with Helm, follow the instructions.

Change the feature gates configuration

Kueue uses a similar mechanism to configure features as described in Kubernetes Feature Gates.

You can edit the kueue-manager-config ConfigMap and add the feature gate you would like to manage, for example:

apiVersion: v1
kind: ConfigMap
  name: kueue-manager-config
  namespace: kueue-system
data:
  controller_manager_config.yaml: |
    apiVersion: config.kueue.x-k8s.io/v1beta1
    kind: Configuration
    featureGates:
      ManagedJobsNamespaceSelectorAlwaysRespected: true
  ...

After changing the ConfigMap, you need to restart the kueue-controller-manager deployment to have the change enforced, for example using: kubectl rollout restart deploy kueue-controller-manager -n kueue-system.

Alternatively, you can edit the kueue-controller-manager deployment within the kueue installation namespace and change the manager container arguments to include

--feature-gates=...,<FeatureName>=<true|false>

For example, to enable PartialAdmission, you should change the manager deployment as follows:

kind: Deployment
...
spec:
  ...
  template:
    ...
    spec:
      containers:
      - name: manager
        args:
        - --config=/controller_manager_config.yaml
        - --zap-log-level=2
+       - --feature-gates=PartialAdmission=true

Feature gates for alpha and beta features

FeatureDefaultStageSinceUntil
AdmissionFairSharingfalseAlpha0.120.15
AdmissionFairSharingtrueBeta0.15
DynamicResourceAllocationfalseAlpha0.14
ElasticJobsViaWorkloadSlicesfalseAlpha0.13
FailureRecoveryPolicyfalseAlpha0.15
FlavorFungibilitytrueBeta0.5
HierarchicalCohortstrueBeta0.11
LendingLimitfalseAlpha0.60.9
LendingLimittrueBeta0.9
LocalQueueDefaultingfalseAlpha0.100.12
LocalQueueDefaultingtrueBeta0.12
LocalQueueMetricsfalseAlpha0.10
ManagedJobsNamespaceSelectorAlwaysRespectedfalseAlpha0.130.15
ManagedJobsNamespaceSelectorAlwaysRespectedtrueBeta0.15
MultiKueuefalseAlpha0.60.9
MultiKueuetrueBeta0.9
MultiKueueAdaptersForCustomJobsfalseAlpha0.140.15
MultiKueueAdaptersForCustomJobstrueBeta0.15
MultiKueueAllowInsecureKubeconfigsfalseAlpha0.15
MultiKueueBatchJobWithManagedByfalseAlpha0.80.15
MultiKueueBatchJobWithManagedBytrueBeta0.15
MultiKueueClusterProfilefalseAlpha0.15
MultiKueueRedoAdmissionOnEvictionInWorkertrueBeta0.16
MultiKueueWaitForWorkloadAdmittedtrueBeta0.16
ObjectRetentionPoliciesfalseAlpha0.120.13
ObjectRetentionPoliciestrueBeta0.13
PartialAdmissionfalseAlpha0.40.5
PartialAdmissiontrueBeta0.5
PrioritySortingWithinCohorttrueBeta0.6
PropagateBatchJobLabelsToWorkloadtrueBeta0.15
ReclaimablePodstrueBeta0.15
SanitizePodSetstrueBeta0.13
SkipFinalizersForPodsSuspendedByParenttrueBeta0.16
TASBalancedPlacementfalseAlpha0.15
TASFailedNodeReplacementfalseAlpha0.120.14
TASFailedNodeReplacementtrueBeta0.14
TASFailedNodeReplacementFailFastfalseAlpha0.130.14
TASFailedNodeReplacementFailFasttrueBeta0.14
TASProfileLeastFreeCapacityfalseAlpha0.100.11
TASProfileMixedfalseAlpha0.100.15
TASProfileMixedtrueBeta0.15
TASReplaceNodeOnPodTerminationfalseAlpha0.130.14
TASReplaceNodeOnPodTerminationtrueBeta0.14
TLSOptionstrueBeta0.16
TopologyAwareSchedulingfalseAlpha0.90.14
TopologyAwareSchedulingtrueBeta0.14
VisibilityOnDemandfalseAlpha0.60.9
VisibilityOnDemandtrueBeta0.9
WorkloadRequestUseMergePatchfalseAlpha0.14

Feature gates for graduated or deprecated features

FeatureDefaultStageSinceUntil
TASProfileLeastFreeCapacityfalseDeprecated0.11

What’s next