Use multiple Virtual Machine sizes with Instance Mix (Preview)
Important
Instance Mix for Virtual Machine Scale Sets with Flexible Orchestration Mode is currently in preview. Previews are made available to you on the condition that you agree to the supplemental terms of use. Some aspects of this feature may change prior to general availability (GA).
Instance Mix enables you to specify multiple different Virtual Machine (VM) sizes in your Virtual Machine Scale Set with Flexible Orchestration Mode, and an allocation strategy to further optimize your deployments.
Instance Mix is best suited for workloads that are flexible in compute requirements and can be run on various different sized VMs. Using Instance Mix you can:
- Deploy a heterogeneous mix of VM sizes in a single scale set. You can view max scale set instance counts in the documentation.
- Optimize your deployments for cost or capacity through allocation strategies.
- Continue to make use of scale set features, like Spot Priority Mix, Autoscale, or Upgrade Policies.
- Spread a heterogeneous mix of VMs across Availability Zones and Fault Domains for high availability and reliability.
Enroll in the Preview
Register for the FlexVMScaleSetSkuProfileEnabled
feature flag using the az feature register command:
az feature register --namespace "Microsoft.Compute" --name "FlexVMScaleSetSkuProfileEnabled"
It takes a few moments for the feature to register. Verify the registration status by using the az feature show command:
az feature show --namespace "Microsoft.Compute" --name "FlexVMScaleSetSkuProfileEnabled"
Changes to existing scale set properties
sku.tier
The sku.tier
property is currently an optional scale set property and should be set to null
for Instance Mix scenarios.
sku.capacity
The sku.capacity
property continues to represent the overall size of the scale set in terms of the total number of VMs.
scaleInPolicy
The optional scale-in property isn't needed for scale set deployments using Instance Mix. During scaling in events, the scale set utilizes the allocation strategy to inform the decision on which VMs should be scaled in. For example, when you use LowestPrice
, the scale set scales in by removing the more expensive VMs first.
New scale set properties
skuProfile
The skuProfile
property represents the umbrella property for all properties related to Instance Mix, including VM sizes and allocation strategy.
vmSizes
The vmSizes
property is where you specify the specific VM sizes that you're using as part of your scale set deployment with Instance Mix.
allocationStrategy
Instance Mix introduces the ability to set allocation strategies for your scale set. The allocationStrategy
property is where you specify which allocation strategy you'd like to use for your Instance Flexible scale set deployments. There are two options for allocation strategies, lowestPrice
and capacityOptimized
. Allocation strategies apply to both Spot and Standard VMs.
lowestPrice (default)
This allocation strategy is focused on workloads where cost and cost-optimization are most important. When evaluating what VM split to use, Azure looks at the lowest priced VMs of the VM sizes specified. Azure also considers capacity as part of this allocation strategy. The scale set deploys as many of the lowest priced VMs as it can, depending on available capacity, before moving on to the next lowest priced VM size specified. lowestPrice
is the default allocation strategy.
capacityOptimized
This allocation strategy is focused on workloads where attaining capacity is the primary concern. When evaluating what VM size split to deploy in the scale set, Azure looks only at the underlying capacity available. It doesn't take price into account when determining what VMs to deploy. Using capacityOptimized
can result in the scale set deploying the most expensive, but most readily available VMs.
Prioritized
This allocation strategy allows you to specify a priority ranking to the VM sizes specified. Note: ranking is optional, but if provided, it must be within the range of the vmSizes
list size. Ranks can be duplicated across sizes, meaning the sizes have the same priority. Ranks don't need to be in sequential order.
Cost
Following the scale set cost model, usage of Instance Mix is free. You continue to only pay for the underlying resources, like the VM, disk, and networking.
Limitations
- Instance Mix is currently available in the following regions: West US, West US2, East US, and East US2.
- Instance Mix is only available for scale sets using Flexible Orchestration Mode.
- Instance Mix is currently only available through ARM template and the Azure portal.
- You must have quota for the VM sizes you're requesting with Instance Mix.
- You can specify up to five VM sizes with Instance Mix at this time.
- Existing scale sets can't be updated to use Instance Mix.
- VM sizes can't be changed once the scale set is deployed.
- For REST API deployments, you must have an existing virtual network inside of the resource group that you're deploying your scale set with Instance Mix in.
Deploy a scale set using Instance Mix
The following example can be used to deploy a scale set using Instance Mix:
To deploy an Instance Flexible scale set through REST API, use a PUT
call to and include the following sections in your request body:
PUT https://management.azure.com/subscriptions/{YourSubscriptionId}/resourceGroups/{YourResourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{youScaleSetName}?api-version=2023-09-01
In the request body, ensure sku.name
is set to Mix:
"sku": {
"name": "Mix",
"capacity": {TotalNumberVMs}
},
Ensure you reference your existing subnet:
"subnet": {
"id": "/subscriptions/{YourSubscriptionId}/resourceGroups/{YourResourceGroupName}/providers/Microsoft.Network/virtualNetworks/{YourVnetName}/subnets/default"
},
Lastly, be sure to specify the skuProfile
with up to five VM sizes. This sample uses three:
"skuProfile": {
"vmSizes": [
{
"name": "Standard_D8s_v5"
},
{
"name": "Standard_E16s_v5"
},
{
"name": "Standard_D2s_v5"
}
],
"allocationStrategy": "lowestPrice"
},
When using the prioritized
allocation strategy, you can specify the priority ranking of the vmSizes
specified:
"skuProfile": {
"vmSizes": [
{
"name": "Standard_D8s_v5", "rank": 1
},
{
"name": "Standard_E16s_v5", "rank": 2
},
{
"name": "Standard_D2s_v5", "rank": 1
}
],
"allocationStrategy": "Prioritized"
},
Troubleshooting
Error Code | Error Message | Troubleshooting options |
---|---|---|
SkuProfileAllocationStrategyInvalid | Sku Profile’s Allocation Strategy is invalid. | Ensure that you're using either CapacityOptimized or LowestPrice as the allocationStrategy |
SkuProfileVMSizesCannotBeNullOrEmpty | Sku Profile VM Sizes cannot be null or empty. Please provide a valid list of VM Sizes and retry. | Provide at least one VM size in the skuProfile . |
SkuProfileHasTooManyVMSizesInRequest | Too many VM Sizes were specified in the request. Please provide no more than 5 VM Sizes. | At this time, you can specify up to five VM sizes with Instance Mix. |
SkuProfileVMSizesCannotHaveDuplicates | Sku Profile contains duplicate VM Size: {duplicateVmSize}. Please remove any duplicates and retry. | Check the VM SKUs listed in the skuProfile and remove the duplicate VM size. |
SkuProfileUpdateNotAllowed | Virtual Machine Scale Sets with Sku Profile property cannot be updated. | At this time, you can't update the skuProfile of a scale set using Instance Mix. |
SkuProfileScenarioNotSupported | {propertyName} is not supported on Virtual Machine Scale Sets with Sku Profile | Instance Mix doesn’t support certain scenarios today, like Azure Dedicated Host (properties.hostGroup ), Capacity Reservations (properties.virtualMachineProfile.capacityReservation ), and StandbyPools (properties.standbyPoolProfile ). Adjust the template to ensure you’re not using unsupported properties. |
SkuNameMustBeMixIfSkuProfileIsSpecified | Sku name is {skuNameValue}. Virtual Machine Scale Sets with Sku Profile must have the Sku name property set to "Mix" | Ensure that the sku.name property is set to "Mix" . |
SkuTierMustNotBeSetIfSkuProfileIsSpecified | Sku tier is {skuTierValue}. Virtual Machine Scale Sets with Sku Profile must not have the Sku tier property set. | sku.tier is an optional property for scale sets. With Instance Mix, sku.tier must be set to null or not specified. |
InvalidParameter | The value of parameter skuProfile is invalid. | Your subscription isn't registered for the Instance Mix feature. Follow the enrollment instructions to register for the Preview. |
FleetRPInternalError | An unexpected error occurred while computing the desired sku split. | Instance Mix isn't supported in this region yet. Deploy only in supported regions. |
FAQs
Can I use Spot and Standard VMs with Instance Mix?
Yes, you can use both Spot and Standard VMs in your scale set deployments using Instance Mix. To do so, use Spot Priority Mix to define a percentage split of Spot and Standard VMs.
My region doesn't support Instance Mix today. Will it support Instance Mix in the future?
Instance Mix is rolling out to all Azure regions during Public Preview. Instance Mix is currently available in the following regions: West US, West US2, East US, and East US2.