In general, virtual machines scale sets provide auto scalability based on the need. With the normal scale sets, you can have a deployment of 0-100 VMs. But if you have requirements to deploy large scale set of more than 100 VMs then you can opt for large virtual machine scale sets. The basic difference between two is placement group. Placement group in virtual machine scale set is nothing but kind of availability set that maintains its own fault and update domains. This placement groups in virtual machine scale sets have been defined by a parameter “singlePlacementGroup” that has two values either “true” or “false”, if this value is set to “true” then scale set will have a single placement group and the number of virtual machine can be between 0-100, and if the value of “singlePlacementGroup” parameter has been set to “false” then scale set will have multiple placement groups and the number of virtual machine can be between 0-1000.
There is one most important consideration for large VM scale sets i.e. storage. If you choose to go with large VM scale sets then you use managed disks and don’t define your own storage accounts. In VM scale sets, if you don’t go with managed disk then you require multiple storage account i.e. 1 for every 20 VMs but in case of large scale sets you leverage managed disks that simplifies your overhead of managing multiple storage accounts.
Let see how to do it.
Login to the Azure portal and search for “scale” in the azure market place and select the “Virtual machine scale set”.
In the Virtual machine scale set panel, select “Create” to create a new Virtual machine scale set.
In the “create virtual machine scale set” fill the basics information.
Virtual machine scale set name = Enter the scale set name for your virtual machine scale set deployment.
Operating system disk image = Select the operating disk image from drop-down.
Subscription = select your subscription.
Resource group = Create a new resource group or select the existing one.
Location = Select the Azure region from drop-down.
User name = Enter the username that will be used for virtual machines.
Password = Enter the password for the user name.
Confirm password = Re-enter the password to confirm.
Scroll down and fill the required details under “Instances and Load Balancer”.
Instance count = Enter to VMs count between 0 – 100. If you enter any number more than 100 and up to 1000, all the configuration settings will be disable except instance size. As explained above, large-scale sets with more than 100 VMs use managed disk by default and deployment of these large-scale sets take place across multiple placement groups.
Instance size = Select the VM size based on your requirement.
Enable scaling beyond 100 instances = By default “No”, if you select “Yes” then rest of the settings will be disabled as described under instance count. Select “Yes” for large Virtual Machines Scale Sets.
Autoscale = By default disabled but if you enable this feature then you need to define the conditions for the auto scaling.
If Autoscale enabled, fill the required details.
Minimum number of VMs = Enter the minimum number of VMs that required in this scale set.
Maximum number of VMs = Enter the maximum number of VMs that required in this scale set.
CPU threshold (%) = Enter the cpu threshold after that VM will be added.
Number of VMs to increase by = Enter the number of VMs that will added when your running VMs reach defined cpu threshold.
CPU threshold (%) = Enter the cpu threshold after that VM will be removed.
Number of VMs to decrease by = Enter the number of VMs that will removed when your running VMs reach defined cpu threshold.
Once filled all the details, click on create to start the deployment process.
Apart from these configuration settings, you need to consider following while planning for large VM scale sets.
Limit of 1000 VMs only applicable if you use Azure Marketplace images otherwise you can scale up to 300 VMs if you use your own customize image.
When designing network for large VM scale sets using a single subnet, make sure that your subnet has enough IP addresses for all the VMs. As a best practice, reserve 20% more ip addresses than what you need to support large scale sets.
Azure Load Balancer Standard SKU work with large scale sets because of multiple placement group while scale sets with 100 VMs can leverage basic Load Balancer.
Layer 7 load balancers and application gateways don’t need any specific configuration for large scale sets.
Make sure you are defining fault domain for the VMs that should not be in same fault domain, by default VMs will be speeded across fault and update domain in a specific placement group but that doesn’t mean that two VMs (for ex: these two VMs are required all the times) will not be deployed on same hardware. Use Azure resource explorer and go to the instance view of scale set and verify the fault domain and placement group Ids for the specific VMs.
Make sure you have enough vCPU quota to support large number of VMs in a large VM scale set, otherwise request to increase your vCPU quota.
You can convert your Virtual Machine Scale Set from a single placement group (1-100 VMs) to multiple placement group (1-1000 VMs) using Azure Resource Explorer but not vice-versa. You may not get the option to upgrade to large VM scale sets if you are using old version of the Microsoft.Compute API.