教程:使用 Azure CLI 创建 Azure VM 的自定义映像
适用于:✔️ Linux VM ✔️ 灵活规模集
自定义映像类似于市场映像,不同的是自定义映像的创建者是自己。 自定义映像可用于启动配置,例如预加载应用程序、应用程序配置和其他 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 转换为可重用自定义映像,以便将其用于创建新 VM 实例。
若要完成本教程中的示例,必须现有一个虚拟机。 如果需要,可以参阅 CLI 快速入门来创建本教程所用的 VM。 在学习本教程期间,请根据需要替换资源名称。
创建库
库是用于启用映像共享的主要资源。
允许用于库名称的字符为大写或小写字母、数字、点和句点。 库名称不能包含短划线。 库名称在你的订阅中必须唯一。
使用 az sig create 创建库。 以下示例在“中国北部”创建一个名为“myGalleryRG”的资源组命名库,以及一个名为“myGallery”的库。
az group create --name myGalleryRG --location chinanorth
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 位整数范围内。 格式:MajorVersion.MinorVersion.Patch 。
在此示例中,映像的版本为 1.0.0,并且我们打算使用本地冗余存储在“中国北部”区域创建 2 个副本,在“中国东部区域”创建 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 "chinanorth" "chinaeast=1" "chinaeast2=1=standard_lrs" \
--replica-count 2 \
--managed-image "/subscriptions/<Subscription ID>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM"
注意
需等待映像版本彻底生成并复制完毕,然后才能使用同一托管映像来创建另一映像版本。
创建映像版本时,还可以通过添加 --storage-account-type premium_lrs
在高级存储中存储映像,或者通过添加 --storage-account-type standard_zrs
在区域冗余存储中存储映像。
创建 VM
结合 --specialized
参数使用 az vm create 创建 VM 可以指明该映像是专用映像。
使用 --image
的映像定义 ID 从可用的最新映像版本创建 VM。 还可以通过为 --image
提供映像版本 ID 从特定版本创建 VM。
在此示例中,我们将从 myImageDefinition 映像的最新版本创建 VM。
az group create --name myResourceGroup --location chinanorth
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
- 共享库
请转到下一教程,了解虚拟机规模集。