Hello @cargobuddy
Pls go through the suggestions.
- Customizing the NodePool YAML with your existing cluster values
When you create a new NodePool under NAP, you don't need to reinvent the wheel — you can mirror most of what your existing cluster is already using. Here's what to update:
-nodeClassRef → name: Keep this as default to reuse the AKSNodeClass that NAP already created for you. If you want different OS settings, subnet, or disk configuration, create a new AKSNodeClass first and point to that instead. You can inspect what's currently configured with:
kubectl get aksnodeclass default -o yaml
karpenter.azure.com/sku-family**: Replace with the VM family your cluster currently uses (e.g., Dfor general purpose,Efor memory-optimized,Ffor compute-optimized). You can also pin specific SKUs usingkarpenter.azure.com/sku-nameif you want exact instance types likeStandard_D4s_v5`.
topology.kubernetes.io/zone**: Add this requirement if your workloads are zone-aware. Use az account list-locations --output table to confirm available zones for your region.
limits.cpu/limits.memory`**: Set these to cap the total resources this NodePool can provision. Think of it as a safety ceiling.
consolidationPolicy**: WhenEmptyOrUnderutilized` is the recommended setting for cost efficiency — it scales down nodes when they're idle or lightly loaded.
A quick example tailored to reuse your default AKSNodeClass:
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: my-custom-pool
spec:
disruption:
consolidationPolicy: WhenEmptyOrUnderutilized
limits:
cpu: "100"
memory: 200Gi
template:
spec:
nodeClassRef:
name: default # reuses your existing AKSNodeClass
requirements:
- key: karpenter.azure.com/sku-family
operator: In
values: ["D"] # replace with your preferred VM family
- key: karpenter.sh/capacity-type
operator: In
values: ["on-demand"]
- key: kubernetes.io/arch
operator: In
values: ["amd64"]
Configure Node Pools for NAP
[https://learn.microsoft.com/en-us/azure/aks/node-auto-provisioning-node-pools](https://learn.microsoft.com/en-us/azure/aks/node-auto-provisioning-node-pools)
Configure AKSNodeClass
[https://learn.microsoft.com/en-us/azure/aks/node-auto-provisioning-aksnodeclass](https://learn.microsoft.com/en-us/azure/aks/node-auto-provisioning-aksnodeclass)
2. Using VMAS for auto-scaling — important heads-up
Unfortunately, VMAS (Virtual Machine Availability Sets) is **no longer a viable option** for AKS autoscaling. Microsoft officially retired VMAS support in AKS on **September 30, 2025**. As of that date, clusters still using Availability Sets are considered out of support, and you can no longer create new clusters with VMAS either.
If your existing cluster is still on VMAS, the recommended path is to migrate to **Virtual Machine node pools**, which is a one-command operation:
```bash
az aks update \
--name <your-cluster> \
--resource-group <your-rg> \
--migrate-vmas-to-vms
This also automatically upgrades a Basic Load Balancer to Standard if needed.
Once migrated to VM node pools, you have two solid auto-scaling options:
NAP (Node Auto Provisioning) — what you're already exploring. It's now generally available and handles right-sized node selection automatically based on pending pod pressure. Best for dynamic, mixed workloads.
Cluster Autoscaler with VM/VMSS node pools — the traditional approach, great if you want explicit control over node pool sizes:
az aks nodepool update \
--resource-group <your-rg> \
--cluster-name <your-cluster> \
--name <nodepool-name> \
--enable-cluster-autoscaler \
--min-count 1 \
--max-count 10
VMAS Deprecation on AKS
https://learn.microsoft.com/en-us/azure/aks/availability-sets-on-aks
NAP Overview
https://learn.microsoft.com/en-us/azure/aks/node-auto-provisioning
Cluster Autoscaler on AKS
https://learn.microsoft.com/en-us/azure/aks/cluster-autoscaler
Thanks,
Manish.