Enable AKS cluster autoscaler#
Performance Efficiency · Azure Kubernetes Service · 2021_09
Use Autoscaling to ensure AKS clusters deployed with virtual machine scale sets are running efficiently with the right number of nodes for the workloads present.
Description#
In addition to perform manual scaling, AKS clusters support autoscaling. Autoscaling reduces manual intervention required to scale a cluster to keep up with application demands.
Recommendation#
Consider enabling autoscaling for AKS clusters deployed with virtual machine scale sets.
Examples#
Configure with Azure template#
To set enable autoscaling for an AKS cluster:
- Set
properties.agentPoolProfiles[*].enableAutoScaling
totrue
. - Set
properties.agentPoolProfiles[*].type
toVirtualMachineScaleSets
.
For example:
Azure Template snippet
{
"comments": "Azure Kubernetes Cluster",
"apiVersion": "2020-12-01",
"dependsOn": [
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identityName'))]"
],
"type": "Microsoft.ContainerService/managedClusters",
"location": "[parameters('location')]",
"name": "[parameters('clusterName')]",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identityName'))]": {}
}
},
"properties": {
"kubernetesVersion": "[parameters('kubernetesVersion')]",
"disableLocalAccounts": true,
"enableRBAC": true,
"dnsPrefix": "[parameters('dnsPrefix')]",
"agentPoolProfiles": [
{
"name": "system",
"osDiskSizeGB": 32,
"count": 3,
"minCount": 3,
"maxCount": 10,
"enableAutoScaling": true,
"maxPods": 50,
"vmSize": "Standard_D2s_v3",
"osType": "Linux",
"type": "VirtualMachineScaleSets",
"vnetSubnetID": "[variables('clusterSubnetId')]",
"mode": "System",
"osDiskType": "Ephemeral",
"scaleSetPriority": "Regular"
}
],
"aadProfile": {
"managed": true,
"enableAzureRBAC": true,
"adminGroupObjectIDs": "[parameters('clusterAdmins')]",
"tenantID": "[subscription().tenantId]"
},
"networkProfile": {
"networkPlugin": "azure",
"networkPolicy": "azure",
"loadBalancerSku": "Standard",
"serviceCidr": "192.168.0.0/16",
"dnsServiceIP": "192.168.0.4",
"dockerBridgeCidr": "172.17.0.1/16"
},
"autoUpgradeProfile": {
"upgradeChannel": "stable"
},
"addonProfiles": {
"azurepolicy": {
"enabled": true,
"config": {
"version": "v2"
}
},
"omsagent": {
"enabled": true,
"config": {
"logAnalyticsWorkspaceResourceID": "[parameters('workspaceId')]"
}
},
"kubeDashboard": {
"enabled": false
}
}
}
}
Configure with Azure CLI#
Enable cluster autoscaler#
Azure CLI snippet
az aks update \
--name '<name>' \
--resource-group '<resource_group>' \
--enable-cluster-autoscaler \
--min-count '<min_count>' \
--max-count '<max_count>'
Enable cluster nodepool autoscaler#
Azure CLI snippet
az aks nodepool update \
--name '<name>' \
--resource-group '<resource_group>' \
--cluster-name '<cluster_name>' \
--enable-cluster-autoscaler \
--min-count '<min_count>' \
--max-count '<max_count>'
Links#
- Autoscale with Azure compute services
- Autoscaling
- Automatically scale a cluster to meet application demands on Azure Kubernetes Service (AKS)
- Scaling options for applications in Azure Kubernetes Service (AKS)
- Azure deployment reference
Last update:
2022-12-03