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

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

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

如果没有 Azure 订阅,可在开始前创建一个试用帐户

先决条件

  • 如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI

    • 如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录

    • 出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展

    • 运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade

本文需要 Azure CLI 2.0.29 或更高版本。

创建资源组

Azure 资源组是在其中部署和管理 Azure 资源的逻辑容器。 必须在创建虚拟机规模集前创建资源组。 使用“az group create”命令创建资源组。 本示例在 chinanorth2 区域中创建名为 myResourceGroup 的资源组 。

az group create --name myResourceGroup --location chinanorth2

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

创建规模集

重要

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

请使用 az vmss create 命令创建虚拟机规模集。 以下示例创建名为“myScaleSet”的规模集,并生成 SSH 密钥(如果不存在):

az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --orchestration-mode flexible \
  --image <SKU image> \
  --admin-username azureuser \
  --generate-ssh-keys

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

查看有关规模集中 VM 实例的信息

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

az vm list --resource-group myResourceGroup --output table

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

Name                 ResourceGroup    Location    Zones
-------------------  ---------------  ----------  -------
myScaleSet_instance1  myResourceGroup  chinanorth2
myScaleSet_instance2  myResourceGroup  chinanorth2

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

az vm show --resource-group myResourceGroup --name myScaleSet_instance1
{
  "hardwareProfile": {
    "vmSize": "Standard_DS1_v2",
  },
  "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myScaleSet_instance1",
  "location": "chinanorth2",
  "name": "myScaleSet_instance1",
  "networkProfile": {
    "networkInterfaces": [
      {
        "deleteOption": "Delete",
        "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/mysca2215Nic-0396c71c",
        "primary": true,
        "resourceGroup": "myResourceGroup"
      }
    ]
  },
  "osProfile": {
    "adminUsername": "azureuser",
    "allowExtensionOperations": true,
    "computerName": "myScaleSN30BP1",
    "linuxConfiguration": {
      "disablePasswordAuthentication": true,
      "enableVmAgentPlatformUpdates": false,
      "patchSettings": {
        "assessmentMode": "ImageDefault",
        "patchMode": "ImageDefault"
      },
      "provisionVmAgent": true,
      "ssh": {
        "publicKeys": [
          {
            "keyData": "ssh-rsa",
            "path": "/home/azureuser/.ssh/authorized_keys"
          }
        ]
      }
    },
    "requireGuestProvisionSignal": true,
    "secrets": [],
  },
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroup",
  "storageProfile": {
    "dataDisks": [],
    "imageReference": {
      "exactVersion": "XXXXX",
      "offer": "myOffer",
      "publisher": "myPublisher",
      "sku": "mySKU",
      "version": "latest"
    },
    "osDisk": {
      "caching": "ReadWrite",
      "createOption": "FromImage",
      "deleteOption": "Delete",
      "diskSizeGb": 30,
      "managedDisk": {
        "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/myScaleSet_instance1_disk1",
        "resourceGroup": "myResourceGroup",
        "storageAccountType": "Premium_LRS"
      },
      "name": "myScaleSet_instance1_disk1",
      "osType": "Linux",
    }
  },
  "tags": {},
  "timeCreated": "2022-11-16T20:32:15.024581+00:00",
  "type": "Microsoft.Compute/virtualMachines",
  "virtualMachineScaleSet": {
    "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet",
    "resourceGroup": "myResourceGroup"
  },
}

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

在教程开头创建规模集时,为 VM 实例提供了默认 VM SKU Standard_D1_v2。 可以根据 az vm list-sizes 的输出指定其他 VM 实例大小。 以下示例会使用 --vm-sku 参数创建一个规模集,以便指定 VM 实例大小 Standard_F1。 由于只需数分钟即可创建和配置所有的规模集资源和 VM 实例,因此不需部署以下规模集:

az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --orchestration-mode flexible \
  --image <SKU image> \
  --vm-sku Standard_F1 \
  --admin-user azureuser \
  --generate-ssh-keys

更改规模集的容量

在教程开头创建规模集时,默认部署了两个 VM 实例。 可以使用 az vmss create 来指定 --instance-count 参数,以便更改通过规模集创建的实例数。 若要增加或减少现有规模集中的 VM 实例数,可以手动更改容量。 规模集会创建或删除所需数量的 VM 实例,然后配置分发流量所需的负载均衡器。

若要手动增加或减少规模集中 VM 实例的数目,请使用 az vmss scale。 以下示例将规模集中 VM 实例的数目设置为 3

az vmss scale \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --new-capacity 3

更新规模集容量需要花费数分钟。 若要查看规模集中目前包含的实例数,请使用 az vm list 并对关联资源组进行查询。

az vm list --resource-group myResourceGroup --output table
Name                 ResourceGroup    Location    Zones
-------------------  ---------------  ----------  -------
myScaleSet_instance1  myResourceGroup  chinanorth2
myScaleSet_instance2  myResourceGroup  chinanorth2
myScaleSet_instance3  myResourceGroup  chinanorth2

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

若要停止规模集中的所有 VM 实例,请使用 az vmss stop

az vmss stop \
  --resource-group myResourceGroup \
  --name myScaleSet

若要停止规模集中的单个 VM 实例,请使用 az vm stop 并指定实例名称。

az vm stop \
  --resource-group myResourceGroup \
  --name myScaleSet_instance1

已停止的 VM 实例会保留已分配状态,且会继续产生计算费用。 如果希望解除分配 VM 实例并且只产生存储费用,请使用 az vm deallocate 并指定要解除分配的实例名称。

az vm deallocate \
  --resource-group myResourceGroup \
  --name myScaleSet_instance1

启动规模集中的 VM 实例

若要启动规模集中的所有 VM 实例,请使用 az vmss start

az vmss start \
  --resource-group myResourceGroup \
  --name myScaleSet

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

az vm start \
  --resource-group myResourceGroup \
  --name myScaleSet_instance1

重启规模集中的 VM 实例

若要重启规模集中的所有 VM 实例,请使用 az vmss restart

az vmss restart \
  --resource-group myResourceGroup \
  --name myScaleSet

若要重启规模集中的单个 VM 实例,请使用 az vm restart 并指定实例名称。

az vm restart \
  --resource-group myResourceGroup \
  --name myScaleSet_instance1

清理资源

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

az group delete --name myResourceGroup --no-wait --yes

后续步骤

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

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

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