教程:通过 Azure CLI 创建和使用虚拟机规模集的自定义映像

创建规模集时,需指定部署 VM 实例时要使用的映像。 若要在部署 VM 实例之后减少任务数目,可以使用自定义 VM 映像。 在此自定义 VM 映像中可以完成全部所需的应用程序安装或配置步骤。 在规模集中创建的任何 VM 实例使用自定义 VM 映像,并随时可为应用程序流量提供服务。 本教程介绍如何执行下列操作:

  • 创建 Azure Compute Gallery
  • 创建专用化映像定义
  • 创建映像版本
  • 从专用化映像创建规模集
  • 共享映像库

如果没有 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.4.0 或更高版本。

概述

Azure Compute Gallery 简化了整个组织中的自定义映像共享。 自定义映像类似于市场映像,不同的是自定义映像的创建者是自己。 自定义映像可用于启动配置,例如预加载应用程序、应用程序配置和其他 OS 配置。

使用 Azure Compute Gallery,你可以与他人共享自定义 VM 映像。 选择要共享哪些映像,要在哪些区域中共享,以及希望与谁共享它们。

创建并配置源 VM

首先使用 az group create 创建资源组,然后使用 az vm create 创建 VM。 然后,此 VM 将用作映像的源。 以下示例在名为 myResourceGroup 的资源组中创建名为 myVM 的 VM:

az group create --name myResourceGroup --location chinanorth2

az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --image <SKU image> \
  --admin-username azureuser \
  --generate-ssh-keys

重要

az vm create 命令的输出中会显示 VM 的 ID。 请将此 ID 复制到安全的位置,以便稍后在本教程中使用。

映像库是用于启用映像共享的主要资源。

允许用于库名称的字符为大写或小写字母、数字、点和句点。 库名称不能包含短划线。 库名称在你的订阅中必须唯一。

使用 az sig create 创建一个映像库。 以下示例在“中国北部 2”创建一个名为“myGalleryRG”的资源组命名库,以及一个名为“myGallery”的库 。

az group create --name myGalleryRG --location chinanorth2
az sig create --resource-group myGalleryRG --gallery-name myGallery

创建映像定义

映像定义为映像创建一个逻辑分组。 它们用于管理有关映像版本的信息,这些版本是在其中创建的。

映像定义名称可以由大写或小写字母、数字、点、短划线和句点构成。

请确保映像定义的类型正确。 如果已通用化 VM(使用适用于 Windows 的 Sysprep,或适用于 Linux 的 waagent -deprovision),则应使用 --os-state generalized 创建通用化映像定义。 若要在不删除现有用户帐户的情况下使用 VM,请使用 --os-state specialized 创建专用化映像定义。

若要详细了解可为映像定义指定的值,请参阅映像定义

使用 az sig image-definition create 在库中创建一个映像定义。

在此示例中,映像定义名为 myImageDefinition,适用于专用化 Linux OS 映像。 若要使用 Windows OS 创建映像的定义,请使用 --os-type Windows

az sig image-definition create \
   --resource-group myGalleryRG \
   --gallery-name myGallery \
   --gallery-image-definition myImageDefinition \
   --publisher myPublisher \
   --offer myOffer \
   --sku mySKU \
   --os-type Linux \
   --os-state specialized

重要

该命令的输出中会显示映像定义的 ID。 请将此 ID 复制到安全的位置,以便稍后在本教程中使用。

创建映像版本

使用 az image gallery create-image-version 从 VM 创建映像版本。

允许用于映像版本的字符为数字和句点。 数字必须在 32 位整数范围内。 格式:MajorVersion.MinorVersion.Patch

在此示例中,映像版本为 1.0.0,我们将在“中国北部”区域中创建 1 个副本,并在“中国北部 2”区域中创建 1 个副本 。 复制区域必须包含源 VM 所在的区域。

请将此示例中的 --managed-image 值替换为上一步的 VM ID。

az sig image-version create \
   --resource-group myGalleryRG \
   --gallery-name myGallery \
   --gallery-image-definition myImageDefinition \
   --gallery-image-version 1.0.0 \
   --target-regions "chinanorth2=1" "chinanorth=1" \
   --managed-image "/subscriptions/<Subscription ID>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM"

注意

需等待映像版本彻底生成并复制完毕,然后才能使用同一托管映像来创建另一映像版本。

创建映像版本时,还可以通过添加 --storage-account-type premium_lrs 在高级存储中存储映像,或者通过添加 --storage-account-type standard_zrs区域冗余存储中存储映像。

从映像创建规模集

重要

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

使用 az vmss create 从专用化映像创建规模集。

结合 --specialized 参数使用 az vmss create 创建规模集可以指明该映像是专用映像。

使用 --image 的映像定义 ID 从可用的最新映像版本创建规模集实例。 还可以通过提供 --image 的映像版本 ID 从特定版本创建规模集实例。

从前面创建的最新 myImageDefinition 映像版本创建名为“myScaleSet”的规模集 。

az group create --name myResourceGroup --location chinanorth2
az vmss create \
   --resource-group myResourceGroup \
   --name myScaleSet \
   --orchestration-mode flexible \
   --image "/subscriptions/<Subscription ID>/resourceGroups/myGalleryRG/providers/Microsoft.Compute/galleries/myGallery/images/myImageDefinition" \
   --specialized

创建和配置所有的规模集资源和 VM 需要几分钟时间。

可以使用 Azure 基于角色的访问控制 (Azure RBAC) 在订阅之间共享映像。 可以在库、映像定义或映像版本中共享映像。 任何对映像版本具有读取权限的用户,即使跨订阅,也能够使用映像版本部署 VM。

建议在库级别与其他用户进行共享。 若要获取库的对象 ID,请使用 az sig show

az sig show \
   --resource-group myGalleryRG \
   --gallery-name myGallery \
   --query id

使用对象 ID 作为范围,并使用电子邮件地址和 az role assignment create 为用户授予对共享映像库的访问权限。 请将 <email-address><gallery iD> 替换为自己的信息。

az role assignment create \
   --role "Reader" \
   --assignee <email address> \
   --scope <gallery ID>

有关如何使用 Azure RBAC 共享资源的详细信息,请参阅使用 Azure CLI 添加或删除 Azure 角色分配

清理资源

若要删除规模集和其他资源,请使用 az group delete 删除资源组及其所有资源。 --no-wait 参数会使光标返回提示符处,无需等待操作完成。 --yes 参数将确认是否希望删除资源,而不会有额外提示。

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

后续步骤

本教程已介绍如何通过 Azure CLI 创建和使用规模集的自定义 VM 映像:

  • 创建 Azure Compute Gallery
  • 创建专用化映像定义
  • 创建映像版本
  • 从专用化映像创建规模集
  • 共享映像库

请继续学习下一教程,了解如何将应用程序部署到规模集。