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

Azure VM 映像生成器概述

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

通过使用标准化虚拟机 (VM) 映像,组织可以更轻松地迁移到云,并帮助确保部署中的一致性。 映像通常包括预定义的安全性、配置设置,以及必需的软件。 设置自己的映像管道需要时间、基础结构和许多其他细节。 使用 Azure VM 映像生成器,只需创建一个描述映像的配置,将其提交给该服务,即可生成映像并进行分发。

使用 Azure VM 映像生成器,可以将现有的映像自定义管道迁移到 Azure,同时继续使用现有的脚本、命令和进程。 可以将核心应用程序集成到 VM 映像中,以便 VM 可以在创建映像后占用工作负荷。 甚至可以添加配置来生成 Azure 虚拟桌面映像,将其用作虚拟硬盘 (VHD),以便在 Azure Stack 中使用或轻松导出。

使用 Azure VM 映像生成器,可以从 Microsoft Azure 市场或现有的自定义映像开始使用 Windows 或 Linux 映像,并添加自己的自定义项。 在 Azure Compute Gallery(以前称为“共享映像库”)中,还可以指定要在其中托管生成的映像的位置(作为托管映像或 VHD)。

功能

尽管可以手动或使用其他工具创建自定义 VM 映像,但此过程可能比较繁琐且不可靠。 Azure VM 映像生成器是在 HashiCorp Packer 上生成的,它可以提供托管服务的优势。

简易性

若要降低创建 VM 映像的复杂性,Azure VM 映像生成器:

  • 不再需要使用复杂的工具、过程和手动步骤来创建 VM 映像。 Azure VM 映像生成器提取所有这些详细信息并隐藏特定于 Azure 的要求,例如需要通用化映像 (Sysprep)。 它使更高级的用户能够替代此类要求。

  • 可以与现有的映像生成管道集成,以实现即点即用体验。 为此,可以从管道调用 Azure VM 映像生成器或使用 Azure VM 映像生成器服务 DevOps 任务(预览版)

  • 可以从各种源提取自定义数据,从而无需从一个位置收集所有自定义数据。

  • 可以与计算库集成,该库创建一个映像管理系统,用于全局分发、复制、版本和缩放映像。 此外,还可以将生成的相同映像分发为 VHD,或者分发为一个或多个托管映像,而无需从头开始重新生成。

基础结构即代码

使用 Azure VM 映像生成器时,无需管理长期基础结构(例如,保留自定义数据的存储帐户)或暂时性基础结构(例如用于生成映像的临时 VM)。

Azure VM 映像生成器将 VM 映像生成项目存储为 Azure 资源。 此功能消除了维护脱机定义的需求,以及意外删除或更新导致的环境偏移风险。

安全性

为了帮助确保映像安全,Azure VM 映像生成器:

  • 使你能够创建基线映像(即最低安全性和公司配置)并允许其他部门进一步自定义它们。 通过使用 Azure VM 映像生成器,可以使用源映像的最新修补版本快速重建一个黄金映像,从而保持这些映像的安全性和合规性。 使用 Azure VM 映像生成器还可以更轻松地生成可满足 Azure Windows 基线条件的映像。 有关详细信息,请参阅 Azure VM 映像生成器 - Windows 基线模板

  • 无需公开访问自定义项目即可提取自定义项目。 Azure VM 映像生成器可以使用 Azure 托管标识提取这些资源,可以根据需要使用 Azure 基于角色的访问控制 (Azure RBAC) 严格限制此标识的权限。 可以同时保留项目机密,并防止未经授权的篡改。

  • 自定义项目、暂时性计算和存储资源的副本,以及生成的映像均安全地存储在订阅中,由 Azure RBAC 控制对它们的访问。 此级别的安全性也适用于用于创建自定义映像的生成 VM,有助于防止自定义脚本和文件复制到未知订阅中的未知 VM。 此外,还可以使用生成 VM 的隔离 VM 产品/服务来实现与其他客户工作负载的高度隔离。

  • 使你能够将 Azure VM 映像生成器连接到现有虚拟网络,以便可以与现有配置服务器通信,例如 DSC(所需的状态配置请求服务器)、Chef 和 Puppet、文件共享或任何其他可路由的服务器和服务。

  • 可以配置为将用户分配的标识分配给 Azure VM 映像生成器生成 VM(该 VM 由订阅中的 Azure VM 映像生成器服务创建,并用于构建和自定义映像)。 然后,你可以在自定义时使用这些标识来访问你的订阅中的 Azure 资源(包括机密)。 不需要为 Azure VM 映像生成器分配对这些资源的直接访问权限。

区域

Azure VM 映像生成器服务在以下区域可用:

注意

你仍然可以在这些区域外部分发映像。

  • 美国东部
  • 美国东部 2
  • 美国中西部
  • 美国西部
  • 美国西部 2
  • 美国西部 3
  • 美国中南部
  • 北欧
  • 西欧
  • 东南亚
  • Australia Southeast
  • 澳大利亚东部
  • 英国南部
  • 英国西部
  • 巴西南部
  • 加拿大中部
  • 印度中部
  • 美国中部
  • 法国中部
  • 德国中西部
  • 日本东部
  • 美国中北部
  • 挪威东部
  • 瑞士北部
  • Jio 印度西部
  • 阿拉伯联合酋长国北部
  • 东亚
  • 韩国中部
  • 南非北部
  • USGov 亚利桑那州(公共预览版)
  • USGov 弗吉尼亚州(公共预览版)

注册功能 Microsoft.VirtualMachineImages/FairfaxPublicPreview,以访问 Fairfax 区域中的 Azure VM 映像生成器公共预览版(USGov 亚利桑那州和 USGov 弗吉尼亚州)。 为此,请运行以下命令:

Register-AzProviderPreviewFeature -ProviderNamespace Microsoft.VirtualMachineImages -Name FairfaxPublicPreview

OS 支持

Azure VM 映像生成器支持以下 Microsoft Azure 市场市场基本操作系统映像:

  • Ubuntu 18.04
  • Ubuntu 16.04
  • RHEL 7.6、7.7
  • CentOS 7.6、7.7
  • SLES 12 SP4
  • SLES 15、SLES 15 SP1
  • Windows 10 RS5 Enterprise/Enterprise 多会话/Professional
  • Windows 2016
  • Windows 2019
  • CBL-Mariner

重要

这些操作系统已经过测试,现在可以与 Azure VM 映像生成器一起工作。 但是,Azure VM 映像生成器应可与市场中的任何 Linux 或 Windows 映像一起工作。

工作原理

Azure VM 映像生成器是一种完全托管的 Azure 服务,可通过 Azure 资源提供程序进行访问。 资源提供程序通过指定源映像、要执行的自定义项以及要分发新映像的位置来配置它。 下图演示了高级工作流:

显示了源 (Windows/Linux)、自定义项(Shell、PowerShell、Windows 重新启动和更新、添加文件)和使用 Azure Compute Gallery 进行全局分发的 Azure VM 映像生成器流程图

可以使用 Azure PowerShell、Azure CLI 或 Azure 资源管理器模板或使用 Azure VM 映像生成器 DevOps 任务传递模板配置。 将配置提交到服务时,Azure 会创建 映像模板资源。 创建映像模板资源后,订阅中会显示创建的暂存资源组,格式为:IT_\<DestinationResourceGroup>_\<TemplateName>_\(GUID)。 暂存资源组包含 ScriptURI 属性中 File、Shell、PowerShell 自定义中引用的文件和脚本。

若要运行生成,请在 Azure VM 映像生成器模板资源上调用 Run。 然后,该服务为生成部署其他资源,例如 VM、网络、磁盘和网络适配器。

如果在不使用现有虚拟网络的情况下生成映像,Azure VM 映像生成器还会部署公共 IP 和网络安全组,并且它通过使用 Secure Shell (SSH) 或 Windows 远程管理 (WinRM) 协议连接到生成 VM。

如果选择现有虚拟网络,该服务将通过 Azure 专用链接部署,并且不需要公共 IP 地址。 有关详细信息,请参阅 Azure VM 映像生成器网络概述

生成完成后,将删除除暂存资源组和存储帐户以外的所有资源。 可以通过删除映像模板资源来删除它们,也可以将其保留到位以再次运行生成。

有关多个示例,分步指南、配置模板和解决方案,请转到 Azure VM 映像生成器 GitHub 存储库

移动支持

映像模板资源不可变,其中包含指向资源和暂存资源组的链接。 因此,此资源类型不支持移动。

如果要移动映像模板资源,请确保具有配置模板的副本,或者如果没有副本,请从资源中提取现有配置。 然后,使用新名称在新资源组中创建新的映像模板资源,并删除以前的映像模板资源。

权限

注册 Azure VM 映像生成器服务时,将授予服务创建、管理和删除临时资源组的权限,该资源组前缀为 IT_*。 你有权将其添加到映像生成所需的任何资源。 发生这种情况是因为成功注册后,订阅中提供了 Azure VM 映像生成器服务主体名称。

若要允许 Azure VM 映像生成器将映像分发到托管映像或 Azure Compute Gallery,则需要创建一个拥有读取和写入映像权限的 Azure 用户分配的标识。 如果要访问 Azure 存储,则需要具有读取专用或公共容器的权限。

在 API 2021-10-01 及更高版本中,Azure VM 映像生成器支持将 Azure 用户分配的标识添加到生成 VM,以便实现需要在订阅中使用 Azure Key Vault 等服务进行身份验证的方案。

有关权限的详细信息,请参阅

成本

使用 Azure VM 映像生成器创建、生成和存储映像时,会产生一些计算、网络和存储成本。 这些成本类似于手动创建自定义映像时产生的成本。 资源按 Azure 费率收费。

在映像创建过程中,会下载文件并将其存储在 IT_<DestinationResourceGroup>_<TemplateName> 资源组中,这会产生较低的存储成本。 如果不想保留这些文件,在生成映像后删除映像模板。

Azure VM 映像生成器使用 Gen1 映像的默认标准 D1v2 VM 大小、Gen2 映像的标准 D2ds V4 以及 VM 所需的存储和网络来创建 VM。 这些资源在生成过程中持续存在,并在 Azure VM 映像生成器创建映像后删除。

Azure VM 映像生成器会将映像分发到所选区域,这可能会产生网络流出量费用。

Hyper-V 代系

Azure VM 映像生成器目前支持在 Azure Compute Gallery 中创建 Hyper-V Gen1 和 Gen2 映像,作为托管映像或 VHD。 请记住,分布式映像始终与提供的映像相同。

对于 Gen2 映像,确保使用的是正确的 SKU。 例如,Ubuntu Server 18.04 Gen2 映像的 SKU 为 18_04-lts-gen2。 Ubuntu Server 18.04 Gen1 映像的 SKU 为 18.04-lts。

下面介绍如何查找基于映像发布者的 SKU:

# Find all Gen2 SKUs published by Microsoft Windows Desktop
az vm image list --publisher MicrosoftWindowsDesktop --sku g2 --output table --all

# Find all Gen2 SKUs published by Canonical
az vm image list --publisher Canonical --sku gen2 --output table --all

有关支持 Gen2 的 Azure VM 映像的详细信息,请参阅 Microsoft Azure 市场中的 Gen2 VM 映像

后续步骤

若要试用 Azure VM 映像生成器,请参阅构建 LinuxWindows 映像的文章。