教程:通过 Azure PowerShell 创建和使用虚拟机规模集的自定义映像
创建规模集时,需指定部署 VM 实例时要使用的映像。 若要在部署 VM 实例之后减少任务数目,可以使用自定义 VM 映像。 在此自定义 VM 映像中可以完成全部所需的应用程序安装或配置步骤。 在规模集中创建的任何 VM 实例使用自定义 VM 映像,并随时可为应用程序流量提供服务。 本教程介绍如何执行下列操作:
- 创建 Azure Compute Gallery
- 创建映像定义
- 创建映像版本
- 从映像创建规模集
- 共享映像库
如果没有 Azure 订阅,可在开始前创建一个试用帐户。
创建并配置源 VM
首先使用 New-AzResourceGroup 创建资源组,然后使用 New-AzVM 创建 VM。 然后,此 VM 将用作映像的源。 以下示例在名为 myResourceGroup 的资源组中创建名为 myVM 的 VM:
New-AzResourceGroup -Name 'myResourceGroup' -Location 'chinanorth2'
New-AzVm `
-ResourceGroupName 'myResourceGroup' `
-Name 'myVM' `
-Location 'China North 2' `
-VirtualNetworkName 'myVnet' `
-SubnetName 'mySubnet' `
-SecurityGroupName 'myNetworkSecurityGroup' `
-PublicIpAddressName 'myPublicIpAddress' `
-OpenPorts 80,3389
存储 VM 变量
可以使用 Get-AzVM 查看资源组中可用的 VM 列表。 了解 VM 名称和资源组后,可以再次使用 Get-AzVM
来获取 VM 对象并将其存储在变量中,供稍后使用。 此示例从“myResourceGroup”资源组获取名为 myVM 的 VM,并将其分配给变量 $vm。
$sourceVM = Get-AzVM `
-Name myVM `
-ResourceGroupName myResourceGroup
创建映像库
映像库是用于启用映像共享的主要资源。 允许用于库名称的字符为大写或小写字母、数字、点和句点。 库名称不能包含短划线。 库名称在你的订阅中必须唯一。
使用 New-AzGallery 创建映像库。 以下示例在“myGalleryRG”资源组中创建名为“myGallery”的库 。
$resourceGroup = New-AzResourceGroup `
-Name 'myGalleryRG' `
-Location 'chinanorth2'
$gallery = New-AzGallery `
-GalleryName 'myGallery' `
-ResourceGroupName $resourceGroup.ResourceGroupName `
-Location $resourceGroup.Location `
-Description 'Azure Compute Gallery for my organization'
创建映像定义
映像定义为映像创建一个逻辑分组。 它们用于管理有关映像版本的信息,这些版本是在其中创建的。 映像定义名称可能包含大写或小写字母、数字、点、短划线和句点。 若要详细了解可以为映像定义指定的值,请参阅映像定义。
使用 New-AzGalleryImageDefinition 创建映像定义。 在此示例中,库映像名为 myGalleryImage,它是为专用化映像创建的。
$galleryImage = New-AzGalleryImageDefinition `
-GalleryName $gallery.Name `
-ResourceGroupName $resourceGroup.ResourceGroupName `
-Location $gallery.Location `
-Name 'myImageDefinition' `
-OsState specialized `
-OsType Windows `
-Publisher 'myPublisher' `
-Offer 'myOffer' `
-Sku 'mySKU'
创建映像版本
使用 New-AzGalleryImageVersion 从 VM 创建映像版本。
允许用于映像版本的字符为数字和句点。 数字必须在 32 位整数范围内。 格式:MajorVersion.MinorVersion.Patch 。
在此示例中,映像版本为 1.0.0,该版本被复制到“中国北部 2”和“中国北部”数据中心。 选择复制的目标区域时,需要将源区域包含为复制目标。
若要从 VM 创建映像版本,请对 -Source
使用 $vm.Id.ToString()
。
$region1 = @{Name='China North 2';ReplicaCount=1}
$region2 = @{Name='China North';ReplicaCount=2}
$targetRegions = @($region1,$region2)
New-AzGalleryImageVersion `
-GalleryImageDefinitionName $galleryImage.Name`
-GalleryImageVersionName '1.0.0' `
-GalleryName $gallery.Name `
-ResourceGroupName $resourceGroup.ResourceGroupName `
-Location $resourceGroup.Location `
-TargetRegion $targetRegions `
-Source $sourceVM.Id.ToString() `
-PublishingProfileEndOfLifeDate '2023-12-01'
可能需要一段时间才能将映像复制到所有目标区域。
从映像创建规模集
现在,请使用 New-AzVmss 来创建规模集,前者使用 -ImageName
参数来定义在上一步创建的自定义 VM 映像。 若要将流量分配到单独的 VM 实例,则还要创建负载均衡器。 负载均衡器包含的规则可在 TCP 端口 80 上分配流量,并允许 TCP 端口 3389 上的远程桌面流量,以及 TCP 端口 5985 上的 PowerShell 远程流量。 出现提示时,请针对规模集中的 VM 实例提供自己的所需管理凭据:
重要
从 2023 年 11 月开始,使用 PowerShell 和 Azure CLI 创建的 VM 规模集将默认为灵活业务流程模式(如果未指定业务流程模式)。 若要详细了解此更改以及你应采取哪些操作,请访问针对 VMSS PowerShell/CLI 客户的中断性变更 - Microsoft 社区中心
# Define variables for the scale set
$resourceGroupName = "myScaleSet"
$scaleSetName = "myScaleSet"
$location = "China North 2"
# Create a resource group
New-AzResourceGroup -ResourceGroupName $resourceGroupName -Location $location
# Create a configuration
$vmssConfig = New-AzVmssConfig `
-Location $location `
-OrchestrationMode Flexible `
-SkuCapacity 2 `
-SkuName "Standard_D2s_v3"
# Reference the image version
Set-AzVmssStorageProfile $vmssConfig `
-OsDiskCreateOption "FromImage" `
-ImageReferenceId $galleryImage.Id
# Create the scale set
New-AzVmss `
-ResourceGroupName $resourceGroupName `
-Name $scaleSetName `
-VirtualMachineScaleSet $vmssConfig
创建和配置所有的规模集资源和 VM 需要几分钟时间。
共享库
我们建议你在映像库级别共享访问权限。 使用电子邮件地址和 Get-AzADUser cmdlet 获取用户的对象 ID,然后使用 New-AzRoleAssignment 为用户授予对库的访问权限。 请将此示例中的示例电子邮件地址 alinne_montes@contoso.com 替换为你自己的信息。
# Get the object ID for the user
$user = Get-AzADUser -StartsWith alinne_montes@contoso.com
# Grant access to the user for our gallery
New-AzRoleAssignment `
-ObjectId $user.Id `
-RoleDefinitionName Reader `
-ResourceName $gallery.Name `
-ResourceType Microsoft.Compute/galleries `
-ResourceGroupName $resourceGroup.ResourceGroupName
清理资源
不再需要时,可以使用 Remove-AzResourceGroup cmdlet 删除资源组和所有相关资源:
# Delete the gallery
Remove-AzResourceGroup -Name myGalleryRG
# Delete the scale set resource group
Remove-AzResourceGroup -Name myResoureceGroup
后续步骤
本教程介绍了如何通过 Azure PowerShell 创建和使用规模集的自定义 VM 映像:
- 创建 Azure Compute Gallery
- 创建映像定义
- 创建映像版本
- 从映像创建规模集
- 共享映像库
请继续学习下一教程,了解如何将应用程序部署到规模集。