创建和部署虚拟机规模集

使用虚拟机规模集可以轻松地将相同的虚拟机作为集来进行部署和管理。 规模集为超大规模应用程序提供高度可缩放且可自定义的计算层,并且它们支持 Windows 平台映像、Linux 平台映像、自定义映像和扩展。 有关规模集的详细信息,请参阅虚拟机规模集

本教程介绍如何使用 Azure 门户就创建虚拟机规模集。 有关如何使用 Azure 门户的信息,请参阅如何使用 Azure 门户创建虚拟机规模集

备注

有关 Azure 资源管理器资源的详细信息,请参阅 Azure 资源管理器与经典部署

登录 Azure

如果要使用 Azure CLI 2.0 或 Azure PowerShell 创建规模集,首先需要登录到订阅。

有关如何使用 Azure CLI 或 PowerShell 安装、设置和登录到 Azure 的详细信息,请参阅 Azure CLI 2.0 入门Azure PowerShell cmdlet 入门

备注

请先运行 az cloud set -n AzureChinaCloud 更改云环境,然后才能在 Azure 中国世纪互联中使用 Azure CLI。 若要切换回 Azure 公有云,请再次运行 az cloud set -n AzureCloud

az login
Login-AzureRmAccount -EnvironmentName AzureChinaCloud

创建资源组

首先需要创建虚拟机规模集所关联的资源组。

az group create --location chinanorth --name MyResourceGroup1
New-AzureRmResourceGroup -Location chinanorth -Name MyResourceGroup1

从 Azure CLI 创建

使用 Azure CLI,只需最少的工作量就可创建虚拟机规模集。 如果省略默认值,则将提供它们。 例如,如果未指定任何虚拟网络信息,将创建一个虚拟网络。 如果省略以下部分,则会创建它们:

  • 负载均衡器
  • 虚拟网络
  • 公共 IP 地址

选择要用于虚拟机规模集的虚拟机映像时,有几个选择:

  • URN
    资源的标识符:
    Win2012R2Datacenter

  • URN 别名
    URN 的友好名称:
    MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:latest

  • 自定义资源 ID
    Azure 资源的路径:
    /subscriptions/subscription-guid/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/images/MyImage

  • Web 资源
    HTTP URI 的路径:
    http://contoso.blob.core.chinacloudapi.cn/vhds/osdiskimage.vhd

提示

使用 az vm image list 可获取可用映像的列表。

若要创建虚拟机规模集,必须指定以下各项:

  • 资源组
  • 名称
  • 操作系统映像
  • 身份验证信息

以下示例创建基本虚拟机规模集(此步骤可能需要几分钟)。

az vmss create --resource-group MyResourceGroup1 --name MyScaleSet --image UbuntuLTS --authentication-type password --admin-username azureuser --admin-password P@ssw0rd! --vm-sku Standard_DS1

该命令完成后,虚拟机规模集就创建好了。 可能需要获取虚拟机的 IP 地址,以便可以连接到该虚拟机。 可以使用以下命令获取有关虚拟机的大量不同信息(包括 IP 地址)。

az vmss list-instance-connection-info --resource-group MyResourceGroup1 --name MyScaleSet

从 PowerShell 创建

PowerShell 的使用比 Azure CLI 更复杂。 Azure CLI 为网络相关资源(如负载均衡器、IP 地址和虚拟网络)提供默认值,而 PowerShell 则不提供。 使用 PowerShell 引用映像也稍微复杂一些。 可以使用以下 cmdlet 获取映像:

  1. Get-AzureRMVMImagePublisher
  2. Get-AzureRMVMImageOffer
  3. Get-AzureRmVMImageSku

cmdlet 的运行结果可以按顺序通过管道传送。 以下示例演示如何获取其发布服务器包含名称 microsoft 的“中国北部”区域的所有映像。

Get-AzureRMVMImagePublisher -Location ChinaNorth | Where-Object PublisherName -Like *microsoft* | Get-AzureRMVMImageOffer | Get-AzureRmVMImageSku | Select-Object PublisherName, Offer, Skus
PublisherName              Offer          Skus
-------------              -----          ----
MicrosoftAzureSiteRecovery Process-Server Windows-2012-R2-Datacenter
MicrosoftOSTC              FreeBSD        10.3
MicrosoftOSTC              FreeBSD        11.0
MicrosoftRServer           RServer-CentOS Enterprise
MicrosoftRServer           RServer-RedHat Enterprise
MicrosoftRServer           RServer-Ubuntu Enterprise
MicrosoftRServer           RServer-WS2016 Enterprise
...

用于创建虚拟机规模集的工作流如下所示:

  1. 创建包含规模集相关信息的配置对象。
  2. 引用基本 OS 映像。
  3. 配置操作系统设置:身份验证、VM 名称前缀及用户/密码。
  4. 配置网络。
  5. 创建规模集。

此示例为安装了 Windows Server 2016 的计算机创建基本 2 实例规模集。

# Resource group name from above
$rg = "MyResourceGroup1"
$location = "ChinaNorth"

# Create a config object
$vmssConfig = New-AzureRmVmssConfig -Location $location -SkuCapacity 2 -SkuName Standard_A0  -UpgradePolicyMode Automatic

# Reference a virtual machine image from the gallery
Set-AzureRmVmssStorageProfile $vmssConfig -ImageReferencePublisher MicrosoftWindowsServer -ImageReferenceOffer WindowsServer -ImageReferenceSku 2016-Datacenter -ImageReferenceVersion latest

# Set up information for authenticating with the virtual machine
Set-AzureRmVmssOsProfile $vmssConfig -AdminUsername azureuser -AdminPassword P@ssw0rd! -ComputerNamePrefix myvmssvm

# Create the virtual network resources

## Basics
$subnet = New-AzureRmVirtualNetworkSubnetConfig -Name "my-subnet" -AddressPrefix 10.0.0.0/24
$vnet = New-AzureRmVirtualNetwork -Name "my-network" -ResourceGroupName $rg -Location $location -AddressPrefix 10.0.0.0/16 -Subnet $subnet

## Load balancer
$publicIP = New-AzureRmPublicIpAddress -Name "PublicIP" -ResourceGroupName $rg -Location $location -AllocationMethod Static -DomainNameLabel "myuniquedomain"
$frontendIP = New-AzureRmLoadBalancerFrontendIpConfig -Name "LB-Frontend" -PublicIpAddress $publicIP
$backendPool = New-AzureRmLoadBalancerBackendAddressPoolConfig -Name "LB-backend"
$probe = New-AzureRmLoadBalancerProbeConfig -Name "HealthProbe" -Protocol Tcp -Port 80 -IntervalInSeconds 15 -ProbeCount 2
$inboundNATRule1= New-AzureRmLoadBalancerRuleConfig -Name "webserver" -FrontendIpConfiguration $frontendIP -Protocol Tcp -FrontendPort 80 -BackendPort 80 -IdleTimeoutInMinutes 15 -Probe $probe -BackendAddressPool $backendPool
$inboundNATPool1 = New-AzureRmLoadBalancerInboundNatPoolConfig -Name "RDP" -FrontendIpConfigurationId $frontendIP.Id -Protocol TCP -FrontendPortRangeStart 53380 -FrontendPortRangeEnd 53390 -BackendPort 3389

New-AzureRmLoadBalancer -ResourceGroupName $rg -Name "LB1" -Location $location -FrontendIpConfiguration $frontendIP -LoadBalancingRule $inboundNATRule1 -InboundNatPool $inboundNATPool1 -BackendAddressPool $backendPool -Probe $probe

## IP address config
$ipConfig = New-AzureRmVmssIpConfig -Name "my-ipaddress" -LoadBalancerBackendAddressPoolsId $backendPool.Id -SubnetId $vnet.Subnets[0].Id -LoadBalancerInboundNatPoolsId $inboundNATPool1.Id

# Attach the virtual network to the IP object
Add-AzureRmVmssNetworkInterfaceConfiguration -VirtualMachineScaleSet $vmssConfig -Name "network-config" -Primary $true -IPConfiguration $ipConfig

# Create the scale set with the config object (this step might take a few minutes)
New-AzureRmVmss -ResourceGroupName $rg -Name "MyScaleSet1" -VirtualMachineScaleSet $vmssConfig

使用自定义虚拟机映像

如果要从自己的自定义映像创建规模集,而不是从库中引用虚拟机映像,Set-AzureRmVmssStorageProfile 命令将如下所示:

Set-AzureRmVmssStorageProfile -OsDiskCreateOption FromImage -ManagedDisk PremiumLRS -OsDiskCaching "None" -OsDiskOsType Linux -ImageReferenceId (Get-AzureRmImage -ImageName $VMImage -ResourceGroupName $rg).id

从模板创建

可使用 Azure 资源管理器模板部署虚拟机规模集。 可以创建自己的模板,也可以使用模板存储库中的模板。 可以直接将这些模板部署到 Azure 订阅。

备注

若要创建自己的模板,请创建 JSON 文本文件。 有关如何创建和自定义模板的常规信息,请参阅 Azure 资源管理器模板

GitHub 上提供了一个示例模板。 有关如何创建和使用该示例的详细信息,请参阅最小可行规模集

从 Visual Studio 创建

使用 Visual Studio,可以创建 Azure 资源组项目,并向其添加虚拟机规模集模板。 可以选择是从 GitHub 还是从 Azure Web 应用程序库将其导入。 还会生成部署 PowerShell 脚本。 有关详细信息,请参阅如何使用 Visual Studio 创建虚拟机规模集

从 Azure 门户中创建

Azure 门户提供了快速创建规模集的简便方式。 有关详细信息,请参阅如何使用 Azure 门户创建虚拟机规模集

后续步骤

详细了解数据磁盘

了解如何管理应用