你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:使用 Azure PowerShell 创建和管理虚拟机规模集

利用虚拟机规模集,可以部署和管理一组虚拟机。 在虚拟机规模集的整个生命周期内,可能需要运行一个或多个管理任务。 本教程介绍如何执行下列操作:

  • 创建资源组
  • 创建虚拟机规模集
  • 扩大和缩小
  • 停止、启动和重启 VM 实例

如果没有 Azure 订阅,请在开始之前创建一个免费帐户

Azure Cloud Shell

Azure 托管 Azure Cloud Shell(一个可通过浏览器使用的交互式 shell 环境)。 可以将 Bash 或 PowerShell 与 Cloud Shell 配合使用来使用 Azure 服务。 可以使用 Cloud Shell 预安装的命令来运行本文中的代码,而不必在本地环境中安装任何内容。

若要启动 Azure Cloud Shell,请执行以下操作:

选项 示例/链接
选择代码或命令块右上角的“试用”。 选择“试用”不会自动将代码或命令复制到 Cloud Shell。 Screenshot that shows an example of Try It for Azure Cloud Shell.
转到 https://shell.azure.com 或选择启动 Cloud Shell 按钮可在浏览器中打开 Cloud Shell。 Button to launch Azure Cloud Shell.
选择 Azure 门户右上角菜单栏上的 Cloud Shell 按钮。 Screenshot that shows the Cloud Shell button in the Azure portal

若要使用 Azure Cloud Shell,请执行以下操作:

  1. 启动 Cloud Shell。

  2. 选择代码块(或命令块)上的“复制”按钮以复制代码或命令。

  3. 在 Windows 和 Linux 上选择 Ctrl+Shift+V,或在 macOS 上选择 Cmd+Shift+V 将代码或命令粘贴到 Cloud Shell 会话中。

  4. 选择“Enter”运行代码或命令。

创建资源组

Azure 资源组是在其中部署和管理 Azure 资源的逻辑容器。 必须在创建虚拟机规模集前创建资源组。 使用 New-AzResourceGroup 命令创建资源组。 在此示例中,在“EastUS”区域中创建了名为“myResourceGroup”的资源组。

New-AzResourceGroup -ResourceGroupName "myResourceGroup" -Location "EastUS"

在本教程中,此资源组名称是在创建或修改规模集时指定的。

创建虚拟机规模集

首先,使用 Get-Credential 设置 VM 实例的管理员用户名和密码:

$cred = Get-Credential

现在,使用 New-AzVmss 创建虚拟机规模集。 若要将流量分配到单独的 VM 实例,则还要创建负载均衡器。 负载均衡器包含的规则可在 TCP 端口 80 上分配流量,并允许 TCP 端口 3389 上的远程桌面流量,以及 TCP 端口 5985 上的 PowerShell 远程流量:

重要

从 2023 年 11 月开始,使用 PowerShell 和 Azure CLI 创建的 VM 规模集将默认为灵活业务流程模式(如果未指定业务流程模式)。 若要详细了解此更改以及你应采取哪些操作,请访问针对 VMSS PowerShell/CLI 客户的中断性变更 - Microsoft 社区中心

New-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -VMScaleSetName "myScaleSet" `
  -OrchestrationMode "Flexible" `
  -Location "EastUS" `
  -Credential $cred

创建和配置所有的规模集资源和 VM 实例需要几分钟时间。 若要将流量分配到单独的 VM 实例,则还要创建负载均衡器。

查看规模集中的 VM 实例

若要在规模集中查看 VM 实例的列表,请使用 Get-AzVM,如下所示:

Get-AzVM -ResourceGroupName "myResourceGroup"

以下示例输出显示了规模集中的两个 VM 实例:

ResourceGroupName                Name Location          VmSize  OsType      ProvisioningState 
-----------------                ---- --------          ------  ------       ----------------- 
myResourceGroup   myScaleSet_instance1   eastus Standard_DS1_v2 Windows         Succeeded     
myResourceGroup   myScaleSet_instance2   eastus Standard_DS1_v2 Windows         Succeeded     

若要查看有关特定 VM 实例的其他信息,请使用 Get-AzVM 并指定 VM 名称。

Get-AzVM -ResourceGroupName "myResourceGroup" -name "myScaleSet_instance1" 
ResourceGroupName      : myresourcegroup
Id                     : /subscriptions/resourceGroups/myresourcegroup/providers/Microsoft.Compute/virtualMachines/myScaleSet_instance1
VmId                   : d27b5fde-d469-4087-b08f-87d0bd8df786
Name                   : myScaleSet_instance1
Type                   : Microsoft.Compute/virtualMachines
Location               : eastus
Tags                   : {}
HardwareProfile        : {VmSize}
NetworkProfile         : {NetworkInterfaces}
OSProfile              : {ComputerName, AdminUsername, WindowsConfiguration, Secrets, AllowExtensionOperations, RequireGuestProvisionSignal}
ProvisioningState      : Succeeded
StorageProfile         : {ImageReference, OsDisk, DataDisks}
VirtualMachineScaleSet : {Id}
TimeCreated            : 11/16/2022 11:02:02 PM

创建特定 VM 实例大小的规模集

在教程开头创建规模集时,为 VM 实例提供了默认 VM SKU Standard_D1_v2。 可以使用 -VMSize 参数指定不同 VM 实例大小,以便指定 VM 实例大小 Standard_F1。

New-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -VMScaleSetName "myScaleSet" `
  -OrchestrationMode "Flexible" `
  -VMSize "Standard_F1" `
  -Location "EastUS" `
  -Credential $cred

更改规模集的容量

在创建规模集时,默认部署了两个 VM 实例。 若要增加或减少规模集中的 VM 实例数,可以手动更改容量。 规模集会创建或删除所需数量的 VM 实例,然后配置分发流量所需的负载均衡器。

首先,使用 Get-AzVmss 创建的规模集对象,然后为 sku.capacity 指定新的值。 若要应用容量更改,请使用 Update-AzVmss。 以下示例将规模集中 VM 实例的数目设置为 3

# Get current scale set
$vmss = Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"

# Set and update the capacity of your scale set
$vmss.sku.capacity = 3
Update-AzVmss -ResourceGroupName "myResourceGroup" -Name "myScaleSet" -VirtualMachineScaleSet $vmss 

更新规模集容量需要花费数分钟。 若要查看规模集中当前包含的实例数,请使用 Get-Az

Get-AzVm -ResourceGroupName "myResourceGroup" 

以下示例输出显示规模集的容量现在为 3

ResourceGroupName                Name Location          VmSize  OsType    ProvisioningState 
-----------------                ---- --------          ------  ------    ----------------- 
myResourceGroup   myScaleSet_instance1   eastus Standard_DS1_v2 Windows       Succeeded     
myResourceGroup   myScaleSet_instance2   eastus Standard_DS1_v2 Windows       Succeeded     
myResourceGroup   myScaleSet_instance3   eastus Standard_DS1_v2 Windows       Succeeded   

停止和解除分配规模集中的 VM 实例

若要停止单个 VM 实例,请使用 Stop-AzVm 并指定实例名称。

Stop-AzVM -ResourceGroupName "myResourceGroup" -name "myScaleSet_instance1"

默认情况下,将取消分配已停止的 VM,这些 VM 不会产生计算费用。 若要在停止 VM 后保持预配状态,请将 -StayProvisioned 参数添加到上面的命令中。 保持预配状态的已停止 VM 会产生常规计算费用。

启动规模集中的 VM 实例

若要启动规模集中的所有 VM,请使用 Start-AzVmss

Start-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" 

若要启动规模集中的单个 VM 实例,请使用 Start-AzVM 并指定实例名称。

Start-AzVM -ResourceGroupName "myResourceGroup" -name "myScaleSet_instance1"

重启规模集中的 VM 实例

若要重启规模集中的所有 VM,请使用 Restart-AzVmss

Restart-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"

若要重启单个实例,请使用 [Restart-AzVM] 并指定实例名称。

Restart-AzVM -ResourceGroupName "myResourceGroup" -name "myScaleSet_instance1"

清理资源

删除资源组时,也会删除其中包含的所有资源,例如 VM 实例、虚拟网络和磁盘。 使用 -Force 参数将确认你希望删除资源,不会再通过其他提示进行询问。 -AsJob 参数会使光标返回提示符处,无需等待操作完成。

Remove-AzResourceGroup -Name "myResourceGroup" -Force -AsJob

后续步骤

本教程介绍了如何使用 Azure PowerShell 执行一些基本的规模集创建和管理任务:

  • 创建资源组
  • 创建规模集
  • 查看和使用特定 VM 大小
  • 手动缩放规模集
  • 执行常见的规模集管理任务,例如停止、启动和重启规模集

请继续学习下一教程,了解如何连接到规模集实例。