适用于: ✔️ Linux 虚拟机 ✔️ 灵活虚拟机规模集
自定义映像类似于市场映像,不同的是自定义映像的创建者是自己。 自定义映像可用于启动配置,例如预加载应用程序、应用程序配置和其他 OS 配置。 在本教程中,你将创建自己的 Azure 虚拟机自定义映像。 您将学习如何:
- 创建 Azure Compute Gallery(以前称为共享映像库)
- 创建镜像定义
- 创建映像版本
- 从映像创建 VM
- 分享图库
如果选择在本地安装并使用 CLI,本教程要求运行 Azure CLI 2.4.0 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。
注意
在可以在由世纪互联运营的 Microsoft Azure 中使用 Azure CLI 之前,请先运行 az cloud set -n AzureChinaCloud 来更改云环境。 若要切换回 Azure 公有云,请再次运行 az cloud set -n AzureCloud。
概述
Azure Compute Gallery 简化了整个组织中的自定义映像共享。 自定义映像类似于市场映像,不同的是自定义映像的创建者是自己。 自定义映像可用于启动配置,例如预加载应用程序、应用程序配置和其他 OS 配置。
使用 Azure Compute Gallery,你可以与他人共享自定义 VM 映像。 选择要共享哪些映像,要使其在哪些区域中可用,以及希望与谁共享它们。
Azure Compute Gallery 功能具有多种资源类型:
| 资源 | 说明 |
|---|---|
| 映像源 | 这是一个可用于在库中创建映像版本的资源。 映像源可以是现有的 Azure VM(通用或专用)、托管映像、快照或其他库中的映像版本。 |
| 图库 | 与 Azure 市场一样,库是用于管理及共享映像和 VM 应用程序的存储库,但你可以控制谁有权访问该库。 |
| 映像定义 | 镜像定义是在库内创建的,其中包含有关该镜像及其内部使用要求的信息。 这包括了该映像是 Windows 还是 Linux 映像、发行说明以及最低和最高内存要求。 它是某种映像类型的定义。 |
| 映像版本 | 映像版本是在使用映像库时用于创建虚拟机的版本。 可根据环境的需要创建多个映像版本。 与托管映像一样,在使用映像版本创建 VM 时,将使用映像版本来创建 VM 的新磁盘。 可以多次使用映像版本。 |
开始之前
下列步骤展示了如何将现有 VM 转换为可重用自定义映像,以便将其用于创建新 VM 实例。
若要完成本教程中的示例,必须现有一个虚拟机。 如果需要,可以参阅 CLI 快速入门来创建本教程所用的 VM。 在学习本教程期间,请根据需要替换资源名称。
创建图库
图库是用于启用映像共享功能的主要资源。
允许用于库名称的字符为大写或小写字母、数字、点和句点。 库名称中不能包含连字符。 映像库名称在你的订阅范围内必须唯一。
使用 az sig create 创建图库。 以下示例在中国北部创建一个名为myGalleryRG的资源组,以及一个名为myGallery的图库。
az group create --name myGalleryRG --location chinanorth2
az sig create --resource-group myGalleryRG --gallery-name myGallery
获取有关 VM 的信息
可以使用 az vm list 查看可用 VM 的列表。
az vm list --output table
知道 VM 的名称及其所在的资源组后,使用 az vm get-instance-view 获取 VM 的 ID。
az vm get-instance-view -g MyResourceGroup -n MyVm --query id
复制 VM 的 ID 供稍后使用。
创建映像定义
映像定义为映像创建一个逻辑分组。 这些映像定义用于管理有关在这些定义中创建的映像版本的信息。
映像定义名称可以由大写或小写字母、数字、点、短划线和句点构成。
若要详细了解可为映像定义指定的值,请参阅映像定义。
使用 az sig image-definition create 在映像库中创建映像定义。
在此示例中,映像定义名为 myImageDefinition,适用于专用化 Linux OS 映像。
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 供稍后使用。
创建映像版本
使用 az sig image-version create 从 VM 创建映像版本。
允许用于映像版本的字符为数字和句点。 数字必须在 32 位整数范围内。 格式:主版本.次版本.补丁版本。
在此示例中,映像的版本为 1.0.0, 我们将在中国 北部 2 区域中创建两个副本,一个副本位于 中国东部 2 区域,另一个副本位于 中国东部 2 区域,使用本地冗余存储。 复制区域必须包含源 VM 所在的区域。
请将此示例中的 --virtual-machine 值替换为上一步的 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" "chinaeast2=1" "chinaeast2=1=standard_lrs" \
--replica-count 2 \
--virtual-machine "/subscriptions/<Subscription ID>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM"
注意
需等待映像版本彻底生成并复制完毕,然后才能使用同一托管映像来创建另一映像版本。
创建映像版本时,还可以通过添加 --storage-account-type premium_lrs 将映像存储在高级存储中,或者通过添加 --storage-account-type standard_zrs 将映像存储在 区域冗余存储 中。
创建 VM
使用 az vm create 创建 VM,并使用 --specialized 参数来指示该映像为专用映像。
使用 --image 的映像定义 ID 从可用的最新映像版本创建 VM。 还可以通过为 --image 提供映像版本 ID,基于特定版本创建 VM。
在此示例中,我们将从 myImageDefinition 映像的最新版本创建 VM。
az group create --name myResourceGroup --location chinanorth2
az vm create --resource-group myResourceGroup \
--name myVM2 \
--image "/subscriptions/<Subscription ID>/resourceGroups/myGalleryRG/providers/Microsoft.Compute/galleries/myGallery/images/myImageDefinition" \
--specialized
共享图库
可以使用 Azure 基于角色的访问控制 (Azure RBAC) 在订阅之间共享映像。 可以在库、映像定义或映像版本级别共享映像。 任何对映像版本具有读取权限的用户,即使跨订阅,也能够使用映像版本部署 VM。
我们建议您在库级别与其他用户共享。 若要获取映像库的对象 ID,请使用 az sig show。
az sig show \
--resource-group myGalleryRG \
--gallery-name myGallery \
--query id
使用对象 ID 作为作用域,并使用电子邮件地址和 az role assignment create 为用户授予对 Azure Compute Gallery 的访问权限。 请将 <email-address> 和 <gallery iD> 替换为自己的信息。
az role assignment create \
--role "Reader" \
--assignee <email address> \
--scope <gallery ID>
有关如何使用 Azure RBAC 共享资源的详细信息,请参阅使用 Azure CLI 添加或删除 Azure 角色分配。
Azure 映像生成器
Azure 还提供一个基于 Packer 的服务:Azure VM 映像生成器。 在模板中描述你的自定义设置,然后该模板将处理映像的创建。
后续步骤
在本教程中,已创建自定义 VM 映像。 你已了解如何:
- 创建 Azure Compute Gallery
- 创建映像定义
- 创建映像版本
- 从映像创建 VM
- 分享图库
继续学习下一个教程,了解虚拟机规模集。