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

在 Azure Compute Gallery 中存储和共享映像

适用于:✔️ Linux VM ✔️ Windows VM ✔️ 灵活规模集 ✔️ 统一规模集

映像是完整 VM(包括任何附加的数据磁盘)的副本或者只是 OS 磁盘的副本,具体取决于映像的创建方式。 从映像创建 VM 时,将使用该映像中的 VHD 副本来为新 VM 创建磁盘。 映像保留在存储中,可反复用来创建新的 VM。

如果有大量的映像需要维护,并想要使其在整个公司中可用,可将 Azure Compute Gallery 用作存储库。

使用库存储映像时,会创建多个资源类型:

资源 说明
映像源 这是可用于在库中创建“映像版本”的资源。 映像源可以是现有的 Azure VM(可以是通用或专用的)、托管映像、快照、VHD 或其他库中的映像版本。
与 Azure 市场一样,库是用于管理和共享映像和其他资源的存储库,但你可以控制谁有权访问该库。
映像定义 映像定义在库中创建,携带有关该映像以及使用该映像创建 VM 的任何要求的信息。 这包括了该映像是 Windows 还是 Linux 映像、发行说明以及最低和最高内存要求。 它是某种映像类型的定义。
映像版本 使用库时,将使用映像版本来创建 VM。 可根据环境的需要创建多个映像版本。 与托管映像一样,在使用映像版本创建 VM 时,将使用映像版本来创建 VM 的新磁盘。 可以多次使用映像版本。

演示如何在库中创建多个映像版本的示意图

映像定义

映像定义是映像版本的逻辑分组。 映像定义包含的信息涉及创建映像的原因、映像适用的 OS,以及映像的用法。 映像定义就像围绕创建特定映像计划所有详细信息。 不要从映像定义部署 VM,而要从基于该定义创建的映像版本部署 VM。

每个映像定义有三个可以组合使用的参数:发布者、产品/服务和 SKU 。 这些参数用于查找特定的映像定义。 可以拥有共享一个或两个但不是全部三个值的映像版本。 例如,以下是三个映像定义及其值:

映像定义 发布者 产品/服务 SKU
myImage1 Contoso 财务 后端
myImage2 Contoso 财务 前端
myImage3 测试 财务 前端

所有这三个映像都有唯一的一组值。 格式类似于当前在 Azure PowerShell 中为 Azure 市场映像指定发布者、套餐和 SKU,以获取最新市场映像版本的方式。 每个映像定义需要包含一组唯一的这些值。

以下参数确定了它们可包含哪些类型的映像版本:

  • 操作系统状态 - 可将 OS 状态设置为通用化或专用化。 此字段为必需字段。
  • 操作系统 - 可以是 Windows 或 Linux。 此字段为必需字段。
  • Hyper-V 代 - 指定映像是从第 1 代还是第 2 代 Hyper-V VHD 创建的。 默认值是“第 1 代”。

下面是可在映像定义上设置的其他参数,以便你可以更轻松地跟踪资源:

  • 说明 - 使用说明可以更详细地解释该映像定义为何存在。 例如,可为预装了应用程序的前端服务器创建一个映像定义。
  • EULA - 可用于指向特定于映像定义的最终用户许可协议。
  • 隐私声明和发行说明 - 将发行说明和隐私声明存储在 Azure 存储中,并提供在映像定义中用于访问它们的 URI。
  • 生命周期结束日期 - 为映像定义中的所有映像版本建立默认日期,在此日期之后不应使用该映像。 生命周期终止日期是信息性的;用户仍然可以从过期的映像和版本创建 VM。
  • 标记 - 可以在创建映像定义时添加标记。 有关标记的详细信息,请参阅使用标记来组织资源
  • 最小和最大 vCPU 与内存建议量 - 如果映像附带 vCPU 和内存建议量,则你可以将该信息附加到映像定义。
  • 不允许的磁盘类型 - 可以提供有关 VM 所需存储的信息。 例如,如果映像不适合标准 HDD 磁盘,请将其添加到禁止列表。
  • 市场映像的购买计划信息 -PurchasePlanPublisher-PurchasePlanName-PurchasePlanProduct。 若要详细了解购买计划信息,请参阅在 Azure 市场中查找映像在创建映像时提供 Azure 市场购买计划信息

映像版本

映像版本用于创建 VM。 可根据环境的需要创建多个映像版本。 使用映像版本创建 VM 时,将使用该映像版本来创建该 VM 的新磁盘。 可以多次使用映像版本。

映像版本的属性如下所示:

  • 版本号。 它用作映像版本的名称。 它始终采用以下格式:MajorVersion.MinorVersion.Patch。 如果指定在创建 VM 时使用最新版本,则依次根据版本最高的 MajorVersion、MinorVersion 和 Patch 选择最新映像。
  • 源。 源可以是 VM、托管磁盘、快照、托管映像,也可以是其他映像版本。
  • 最新版本中不包含它。 可将某个版本设为不用作最新映像版本。
  • 生命周期结束日期。 指示映像版本的生命周期终止日期。 生命周期终止日期是信息性的;用户仍然可以从过期的版本创建 VM。

通用和专用映像

Azure Compute Gallery 支持两种操作系统状态。 通常情况下,映像要求用于创建映像的 VM 在获取映像之前已通用化。 通用化是从 VM 中删除计算机和用户特定信息的过程。 对于 Linux,可以使用 waagent-deprovision-deprovision+user 参数。 对于 Windows,使用 Sysprep 工具。

专用化 VM 尚未经历删除计算机特定信息和帐户的过程。 此外,使用专用映像创建的 VM 不具有与其关联的 osProfile。 这意味着,除了某些优点外,专用化映像还存在一些限制。

  • 从专用映像创建的 VM 和规模集可以更快地启动并运行。 由于它们是从已经开始启动的源创建的,因此从这些映像创建的 VM 启动速度会更快。
  • 可用于登录到 VM 的帐户也可用于通过使用该 VM 创建的专用映像创建的任何 VM。
  • VM 具有用于创建映像的 VM 的计算机名。 应更改计算机名以避免冲突。
  • osProfile 是使用 secrets 将某些敏感信息传递给 VM 的方式。 在使用 KeyVault、WinRM,以及在 osProfile 中使用 secrets 的其他功能时,这可能会导致出现问题。 在某些情况下,可以使用托管服务标识 (MSI) 解决这些限制。

正在更新资源

创建后,可以对库资源进行一些更改。 限制如下:

Azure Compute Gallery:

  • 说明

映像定义:

  • 建议的 vCPU 数
  • 建议的内存
  • 说明
  • 生命周期终结日期

映像版本:

  • 区域副本计数
  • 目标区域数
  • 从最新版本中排除
  • 生命周期终结日期

共享

有三种主要方法可以共享 Azure Compute Gallery,具体取决于要与谁共享:

共享对象: 选项
特定人员、组或服务主体 基于角色的访问控制 (RBAC) 可让你在粒度级别与特定人员、组或服务主体共享资源。
订阅或租户 可以通过直接共享库(预览版)与订阅或租户中的所有人共享。
所有人 可以通过社区库(预览版)向所有 Azure 用户公开共享你的整个库。

浅表复制

创建映像版本时,可以将复制模式设置为浅表进行开发和测试。 浅层复制会跳过复制映像,因此映像版本准备就绪的速度要快得多。 但是,这也意味着无法从该映像版本部署大量 VM。 这类似于旧托管映像的工作方式。

如果具有非常大的映像(最多部署 32TB),则浅层复制也很有用。 由于源映像未复制,因此可以使用更大的磁盘。 但是,它们也不能同时用于部署大量 VM。

若要为浅层复制设置映像,请在 Azure CLI 中使用 --replication-mode Shallow

SDK 支持

以下 SDK 支持创建 Azure Compute Galleries:

模板

可使用模板创建 Azure Compute Gallery 资源。 有多个快速启动模板可供使用:

常见问题

若要在 Azure 门户上列出不同订阅中你有权访问的所有 Azure Compute Gallery 资源,请执行以下步骤:

  1. 打开 Azure 门户
  2. 向下滚动页面然后选择“所有资源”。
  3. 选择要列出其中的所有资源的所有订阅。
  4. 查找类型为“Azure Compute Gallery”的资源。

若要列出不同订阅中你有权访问的所有 Azure Compute Gallery 资源,请在 Azure CLI 中使用以下命令:

   az account list -otsv --query "[].id" | xargs -n 1 az sig list --subscription

有关详细信息,请参阅列出、更新和删除映像资源

是的。 根据映像的类型,可能存在 3 种场景。

应用场景 1:如果你有托管映像,则可以从该映像创建映像定义和映像版本。 有关详细信息,请参阅创建映像定义和映像版本

应用场景 2:如果你有非托管的映像,可以从该映像创建托管映像,然后从该托管映像创建映像定义和映像版本。

应用场景 3:如果本地文件系统中包含 VHD,则需要将 VHD 上传到托管映像,然后可以从该映像创建映像定义和映像版本。

  • 如果 VHD 适用于 Windows VM,请参阅上传 VHD
  • 如果 VHD 适用于 Linux VM,请参阅上传 VHD

是否可以从专用化磁盘创建映像版本?

是的,可以从专用化映像创建 VM。

不可以,无法将库映像资源移动到其他订阅中。 可以将库中的映像版本复制到其他区域,也可以从其他库复制映像

是否可以跨云(例如 Azure 中国世纪互联、Azure 德国或 Azure 政府云)复制映像版本?

无法跨云复制映像版本。

是否可以跨订阅复制映像版本?

不可以。但可以跨订阅中的区域复制映像版本,并通过 RBAC 在其他订阅中使用该版本。

是否可以跨 Azure AD 租户共享映像版本?

是的,可以使用 RBAC 跨租户共享给个人。 但若要大规模共享,请参阅使用 PowerShellCLI“跨 Azure 租户共享库映像”。

跨目标区域复制映像版本需要多长时间?

映像版本复制时间完全取决于映像的大小,以及它要复制到的区域数。 但是,作为最佳做法,我们建议缩小映像,并在相互靠近的源与目标区域之间进行复制,以获得最佳效果。 可以使用 -ReplicationStatus 标志检查复制状态。

源区域与目标区域之间的区别是什么?

源区域是创建映像版本的区域,而目标区域是存储映像版本副本的区域。 每个映像版本只能有一个源区域。 此外,在创建映像版本时,请确保将源区域位置传递为目标区域之一。

创建映像版本时如何指定源区域?

创建映像版本时,可在 CLI 中使用 --location 实参,或者在 PowerShell 中使用 -Location 形参来指定源区域。 请确保要用作基本映像来创建映像版本的托管映像,位于创建映像版本的同一位置。 此外,在创建映像版本时,请确保将源区域位置传递为目标区域之一。

如何指定要在每个区域中创建的映像版本副本数?

可通过两种方式指定要在每个区域中创建的映像版本副本数:

  1. 区域副本计数:指定要在每个区域创建的副本数。
  2. 通用副本计数:未指定区域副本计数时每个区域的默认计数。

若要指定区域副本计数,请传递位置以及要在该区域中创建的副本数:“美国中南部=2”。

如果未为每个位置指定区域副本计数,则默认副本数将是指定的通用副本计数。

若要在 Azure CLI 中指定通用副本计数,请在 az sig image-version create 命令中使用 --replica-count 实参。

是,可以这样做。 但作为最佳做法,我们建议将资源组、库、映像定义和映像版本保留在同一位置。

使用 Azure Compute Gallery 不会产生费用,不过,存储映像版本会产生存储费用,将映像版本从源区域复制到目标区域会产生网络传出费用。

创建映像时应该使用哪种 API 版本?

若要处理像库、映像定义和映像版本,建议使用 API 版本 2018-06-01。 区域冗余存储 (ZRS) 需要版本 2019-03-01 或更高版本。

应该使用哪种 API 版本来通过映像版本创建 VM 或虚拟机规模集?

若要使用映像版本部署 VM 和虚拟机规模集,我们建议使用 API 2018-04-01 或更高版本。

可以,可以将规模集映像参考从托管映像更新为 Azure Compute Gallery 映像,前提是这些映像之间的 OS 类型、Hyper-V 代次和数据磁盘布局均匹配。

疑难解答

如果对库资源执行任何操作时遇到问题,请参阅故障排除指南中的常见错误列表。

此外,你可以在 Q&A 中发布问题并使用 azure-virtual-machines-images 来标记问题。

后续步骤

了解如何使用 Azure Compute Gallery 部署映像。