Add Kueue and Cluster Autoscaler on AKS example#5867
Conversation
- End-to-end example: gate batch jobs with Kueue and let the AKS cluster autoscaler provision capacity via ProvisioningRequest before admission - Three modules: infrastructure, Kueue queues + provisioning AdmissionCheck, and a suspended Job that triggers an atomic scale-up - Manifests validated on a live AKS cluster Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
@AaronLiChen please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.
Contributor License AgreementContribution License AgreementThis Contribution License Agreement (“Agreement”) is agreed to by the party signing below (“You”),
|
There was a problem hiding this comment.
Pull request overview
Adds a new AKS example (examples/kueue-and-cas-on-aks) that demonstrates using Kueue admission control together with the AKS cluster autoscaler via the ProvisioningRequest flow, organized as a three-module walkthrough.
Changes:
- Added top-level documentation explaining the Kueue + CAS “provision-first” architecture and a quick start.
- Added Module 1/2/3 READMEs that walk through infrastructure provisioning, queue/gate setup, and workload submission/observation.
- Added Kubernetes manifests for the namespace, Kueue queueing resources (ResourceFlavor, AdmissionCheck, ProvisioningRequestConfig, ClusterQueue, LocalQueue), and a sample suspended Job.
Reviewed changes
Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| examples/kueue-and-cas-on-aks/README.md | Introduces the scenario, architecture diagram, modules, and end-to-end quick start/cleanup. |
| examples/kueue-and-cas-on-aks/1-infrastructure/README.md | Provides AKS + node pool provisioning steps and installs Kueue via Helm. |
| examples/kueue-and-cas-on-aks/2-kueue-queues/README.md | Explains and applies the queue + ProvisioningRequest gate configuration. |
| examples/kueue-and-cas-on-aks/2-kueue-queues/manifests/00-namespace.yaml | Creates the example namespace for queues/workload. |
| examples/kueue-and-cas-on-aks/2-kueue-queues/manifests/10-resource-flavor.yaml | Pins Kueue quota to the autoscaling node pool via agentpool=scalepool. |
| examples/kueue-and-cas-on-aks/2-kueue-queues/manifests/20-provisioning.yaml | Defines the AdmissionCheck + ProvisioningRequestConfig and connects them to the queues. |
| examples/kueue-and-cas-on-aks/3-workload/README.md | Walks through submitting and observing the workload/admission/scale-up flow. |
| examples/kueue-and-cas-on-aks/3-workload/manifests/job.yaml | Adds a suspended Job manifest intended to trigger scale-up via ProvisioningRequest. |
| - name: worker | ||
| image: mcr.microsoft.com/oss/v2/kubernetes/pause:3.6 | ||
| resources: | ||
| requests: | ||
| cpu: "1800m" | ||
| memory: "256Mi" |
Instead of a separate kueue-and-cas-on-aks directory, integrate the ProvisioningRequest + cluster autoscaler demo into the existing kueue-and-ray-on-aks example: - Module 2: add manifests/40-autoscale-queue.yaml (scalepool ResourceFlavor + ProvisioningRequestConfig + AdmissionCheck + ClusterQueue + LocalQueue) as a third, independent queue configuration, with a new "Autoscale queue" section. - Module 3: add cas-batch-job/ (plain batch Job routed through the autoscale queue) demonstrating provision-first scale-up without the Ray runtime. - Update top-level, Module 2, and Module 3 READMEs to document the CAS path. - Remove the standalone examples/kueue-and-cas-on-aks/ directory. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.
Comments suppressed due to low confidence (1)
examples/kueue-and-ray-on-aks/3-workloads/cas-batch-job/manifests/job.yaml:45
- The Job uses the
pauseimage, which never exits, so the Job will not reachComplete/COMPLETIONS 3/3as described in the READMEs. Use an image/command that terminates successfully so the example can complete end-to-end.
image: mcr.microsoft.com/oss/v2/kubernetes/pause:3.6
resources:
requests:
cpu: "1800m"
memory: "256Mi"
| # Upper bound Kueue will admit before asking CAS to grow the pool. | ||
| # Size to the pool's max-count × per-node cores (e.g. 5 × 4 = 20). | ||
| nominalQuota: "100" | ||
| - name: memory | ||
| nominalQuota: 200Gi |
| | Kueue-admitted | ✓ | ✓ | ✓ | ✗ | ✓ | | ||
| | GPUs | 1 | 4 | 1 | 1 | 0 (CPU) | | ||
| | Queue label | `default` | `default` | `default` | — | `autoscale` | | ||
| | Deps | Aurora, torch, azure-storage-blob | LLaMA-Factory, azure-storage-blob | vLLM, azure-storage-blob | Aurora, azure-storage-blob | none (pause image) | |
Summary
What's included
Follows the structure of the kueue-and-ray-on-aks example. A companion how-to in the AKS docs references this directory.
Test plan