在 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 代”。
映像定义包含映像的元数据,通过它可对支持相同功能、计划、OS 状态、OS 类型等内容的映像进行分组。 下面是可在映像定义上设置的其他参数,以便你可以更轻松地跟踪资源:
说明 - 使用说明可以更详细地解释该映像定义为何存在。 例如,你可能对预安装了应用程序的前端服务器具有映像定义。
EULA - 可用于指向特定于映像定义的最终用户许可协议。
隐私声明和发行说明 - 将发行说明和隐私声明存储在 Azure 存储中,并提供在映像定义中用于访问它们的 URI。
生命周期结束日期 - 为映像定义中的所有映像版本建立默认日期,在此日期之后不应使用该映像。 生命周期终止日期是信息性的;用户仍然可以从过期的映像和版本创建 VM。
标记 - 可以在创建映像定义时添加标记。 有关标记的详细信息,请参阅使用标记来组织资源
最小和最大 vCPU 与内存建议量 - 如果映像附带 vCPU 和内存建议量,则你可以将该信息附加到映像定义。
不允许的磁盘类型 - 可以提供有关 VM 所需存储的信息。 例如,如果映像不适合标准 HDD 磁盘,请将其添加到禁止列表。
市场映像的购买计划信息
-PurchasePlanPublisher
、-PurchasePlanName
和-PurchasePlanProduct
。 若要详细了解购买计划信息,请参阅在 Azure 市场中查找映像和在创建映像时提供 Azure 市场购买计划信息。体系结构
- x64 或 ARM64 体系结构
功能允许你根据库的类型指定映像上支持的其他功能和 SecurityType:
功能 接受的值 定义 受以下版本支持: IsHibernateSupported True、False 创建支持休眠的 VM。 专用、直接共享、社区 IsAcceleratedNetworkSupported True、False 创建启用了加速网络的 VM。 在映像定义上设置为 True
时,如果 VM 不支持加速网络,则不支持捕获这些 VM。专用、直接共享、社区 DiskControllerType ["SCSI", "NVMe"], ["SCSI"] 将此项设置为使用 SCSI 或 NVMe 磁盘类型。 只能在标记为支持 NVMe 的映像定义中捕获 NVMe VM 和磁盘。 专用、直接共享、社区 使用
features
参数指定 SecurityType 时,它会限制在 VM 上启用的安全功能。 某些类型受到限制,具体取决于存储它们的库类型:SecurityType 定义 受以下版本支持: ConfidentialVMSupported 它是不包含 VMGS Blob 的通用 Gen2 映像。 可以从此映像类型创建 Gen2 VM 或机密 VM 专用、直接共享、社区 机密 VM 只能从此映像类型创建机密 VM 私有 TrustedLaunchSupported 它是不包含 VMGS Blob 的通用 Gen2 映像。 可以从此映像类型创建 Gen2 VM 或 TrustedLaunch VM。 专用、直接共享、社区 TrustedLaunch 只能从此映像类型创建 TrustedLaunch VM 私有 TrustedLaunchAndConfidentialVmSupported 它是不包含 VMGS Blob 的通用 Gen2 映像。 可以从此映像类型创建 Gen2 VM、TrustedLaunch VM 或 ConfidentialVM。 专用、直接共享、社区 有关详细信息,请查看介绍如何添加映像定义功能和 SecurityType 的 CLI 示例或查看 PowerShell 示例。
映像版本
映像版本用于创建 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 数
- 建议的内存
- 说明
- 生命周期终结日期
- ReleaseNotes
映像版本:
- 区域副本计数
- 目标区域数
- 从最新版本中排除
- 生命周期终结日期
共享
可以使用标准的基于角色的访问控制 (RBAC) 来与用户和组共享图像。
浅表复制
创建映像版本时,可以将复制模式设置为浅表进行开发和测试。 浅层复制会跳过复制映像,因此映像版本会以更快的速度准备就绪。 但是,这也意味着无法从该映像版本部署大量 VM。 这类似于旧托管映像的工作方式。
如果具有不经常部署的大型映像(最大 32TB),则浅层复制也会非常有用。 由于源映像未复制,因此可以使用更大的磁盘。 但是,它们也不能同时用于部署大量 VM。
若要为浅层复制设置映像,请在 Azure CLI 中使用 --replication-mode Shallow
。
SDK 支持
以下 SDK 支持创建 Azure Compute Galleries:
模板
可使用模板创建 Azure Compute Gallery 资源。 有多个快速启动模板可供使用:
常见问题
- 如何列出不同订阅中的所有 Azure Compute Gallery 资源?
- 是否可以将现有映像移动到 Azure Compute Gallery?
- 是否可以从专用磁盘创建映像版本?
- 创建 Azure Compute Gallery 资源后,是否可以将其移动到其他订阅中?
- 是否可以跨云(例如由世纪互联运营的 Microsoft Azure、Azure 德国或 Azure 政府云)复制映像版本?
- 是否可以跨订阅复制映像版本?
- 是否可以跨 Microsoft Entra 租户共享映像版本?
- 跨目标区域复制映像版本需要多长时间?
- 源区域与目标区域之间的区别是什么?
- 创建映像版本时如何指定源区域?
- 如何指定要在每个区域中创建的映像版本副本数?
- 是否可以不在映像定义和映像版本的位置创建库?
- 使用 Azure Compute Gallery 会产生哪些费用?
- 创建映像时应该使用哪种 API 版本?
- 应该使用哪种 API 版本来通过映像版本创建 VM 或虚拟机规模集?
- 是否可以将使用托管映像创建的虚拟机规模集更新,以使用 Azure Compute Gallery 映像?
- 如何更新代码以使用新属性,同时确保在创建 VM 映像期间准确授予权限?
如何列出不同订阅中的所有 Azure Compute Gallery 资源?
若要在 Azure 门户上列出不同订阅中你有权访问的所有 Azure Compute Gallery 资源,请执行以下步骤:
- 打开 Azure 门户。
- 向下滚动页面然后选择“所有资源”。
- 选择要列出其中的所有资源的所有订阅。
- 查找类型为“Azure Compute Gallery”的资源。
若要列出不同订阅中你有权访问的所有 Azure Compute Gallery 资源,请在 Azure CLI 中使用以下命令:
az account list -otsv --query "[].id" | xargs -n 1 az sig list --subscription