The general availability (GA) of Azure Virtual Machine Scale Sets was announced last week at the Microsoft //Build conference. Originally announced in preview last November, VM Scale Sets are a way to manage Azure VMs as a group, providing easy deployment and management options, and simple ways to integrate with Azure autoscale and load balancing. If your machines can all be configured the same, you can reduce the overhead of managing them individually, and elastically scale your VMs to match the workload. VM Scale Sets are available at no additional cost over the compute resources being used, and are available in all regions that support Azure Resource Manager.
The real power of VM Scale Sets becomes apparent as you transition to cloud-scale application architectures. When you separate the unique and non-unique components of the application, the unique components such as control nodes can be configured with the specific resources they need, while the non-unique components can be deployed as VM Scale Sets, managed collectively and elastically scaled. The key configuration property becomes the “capacity” – how many VMs in the set, rather than individual properties.
Building out scalable architecture
When building out scalable architecture in the cloud there’s a trade-off between the level of control you have over individual infrastructure resources and the complexity of defining and placing the resources. Higher level PaaS solutions reduce infrastructure development complexity by deploying fixed architectures you can conform to and build your application around.
In many cases however, there’s a need to deploy a specific architecture without the overhead of a pre-defined PaaS solution. VM Scale Sets (VMSS) occupy a sweet spot of providing a high level of control over infrastructure, without having to correlate different resources like networking, storage and compute, or having to figure out how to balance nodes across fault and update domains. In other words control it like IaaS, scale it like PaaS.
Typically when you build out cloud infrastructure, you need to create the storage, network and compute resources and build the dependencies between them. A VM Scale Set lets you define a single compute resource, which has network, storage and extension properties. This saves you some work, and when you deploy this resource a single call goes down to the underlying fabric, allowing the Azure Compute Resource Provider to make performance and reliability optimizations on your behalf.
Key features of VM Scale Sets include:
Easy portal create experience
You can now directly create both Linux and Windows VM Scale Sets from the Azure Portal. These scale sets are automatically created with load balancer NAT rules to to enable SSH or RDP connections.
Additional portal management features are still being added for VM Scale Sets, so you’ll see more features to manage VMs in scale sets through the portal arriving soon.
Simple scaling properties
Changing the number of virtual machines in a scale set to is a simple call (e.g. through REST, SDK or command line). A scale set can vary between 0 and 100 VMs.
You can also create multiple VM Scale Sets in the same VNET or subscription. I.e. use VM Scale Set as a scaling unit, and build a larger group composed of more than one scale set. This is how higher level services such as Azure Batch build large compute pools.
It is easy to set up autoscale rules for scale sets. You can set the maximum, minimum and default number of VMs, and define trigger – action rules based on resource consumption. You can set up standard audit log and email notifications, and also define webhooks for custom notifications and actions (e.g. runbooks). Partners such as Pagerduty have added Azure support. See the recent New features for Azure Alerts and Autoscale blog post for more details.
Azure Resource manager integration
Scale Sets include the extensibility you expect from Azure Resource Manager VMs, such as VM extensions to install and configure software when VMs are deployed, and integration with other resource providers which fit into the Resource Manager deployment model.
Integrated load balancing
Azure Load Balancers, and Application Gateway integrate seamlessly with scale sets. When a scale set increases in size and a new VM is created, a matching load balancer NAT rule is generated, ensuring the VMs always have a connection path. This control over inbound connectivity makes a scale set VM inherently more secure than a standalone VM with an IP address, which requires a network security group to lock down ports.
Visual Studio support
The Azure SDK provides Azure Templates for Visual Studio to deploy standard Linux and Windows templates to deploy a scale set as part of an Azure Resource Manager project.
See Deploying Virtual Machine Scale Set Templates in Visual Studio for more information.
REST, SDK, and command line support
Built-in high availability
When you increase the number of virtual machines in a scale set, VMs are balanced across update and fault domains to ensure, maximum availability. Similarly when you scale in, VMs are removed with maximum availability in mind.
Support for manual roll out of OS image updates without downtime
If you need to update the virtual machine image without shutting down the scale set, you can update the ‘model’ (the scale set’s definition and properties) and then manually roll out an update to selected VMs.
Higher level Azure services in addition to Batch, such as the Container Service, Batch and Service Fabric also use scale sets as their underlying infrastructure in order to simplify large scale deployments and make it easier to deploy cloud scale architectures. Similarly customers such as ABB Software, Triple, Caradigm, Talk Talk TV have made good use of this technology during the preview period.
For more information
Learn more about VM Scale Sets on the following sites: