VM 映像

让我们一起欢呼吧!随着最近 Microsoft Azure 运行时的发布,我们非常高兴地宣布发布 OS 映像的继承性产品:新 VM 映像。等一下…有些人可能会觉得这听起来有点耳熟。没错,一个月前在旧金山 Build 开发者大会上介绍的诸多令人兴奋的新功能中就包括这个功能。工程团队一直在为这一新功能的发布而努力,我很高兴开始发布一系列文章,介绍该功能是什么、如何使用以及所有细节和实用内容。 

用一句话概括,您可以将 VM 映像视为更全面的 Microsoft Azure 虚拟机映像。改进后的新 VM 映像含有虚拟机存储的完整定义,包括 OS 磁盘和所有数据磁盘在内。该功能可以捕捉在可重复使用单元上部署 VM 所需的磁盘属性(如主机缓存)。元数据和对应于 VHD 集的指针(每个磁盘一个 VHD)在 Azure 存储中以 page blobs 的形式存储,与 OS 映像类似,VM 映像就是这些元数据和指针的集合。

现在,您可能认为 VM 映像和 OS 映像相似。实际上您是对的!包含单个 VHD 的 VM 映像如果带有通用化的操作系统,实际上就是您现在熟悉的 OS 映像。随着时间的推移,您会发现 VM 映像将成为 Microsoft Azure 虚拟机的主流。

VM 映像有两种类型 – 通用化 VM 映像和专用化 VM 映像,每种类型都有其各自的用途。通用化 VM 映像中包含一个 OS 磁盘,顾名思义,该 OS 磁盘已经通用化(在 Windows 上您运行了 Sysprep,在 Linux 上您执行了‘waagent –deprovision’),且需要在部署时进行供应。现今的 OS 映像都是通用化的。这类 VM 映像旨在作为“模型”,快速创建类似的虚拟机,例如为您的生产应用程序横向扩展前端,或者快速构建或解除类似的开发和测试环境。 

专用化 VM 映像中包含一个已经完成供应的 OS 磁盘。它与现今磁盘的相似之处在于它是“即时可用”的,但与磁盘不同的是,VM 映像的 VHD 将在部署新虚拟机时按只读方式进行复制。专用化 VM 映像旨在作为“快照”,在一个已知良好的时间点部署 VM(例如在对开发人员计算机进行检查点操作时),或者在进行危险的任务之前,以防止该任务出错,导致虚拟机无法使用。它不应作为在同一虚拟网络中克隆多个相同虚拟机的机制使用,因为 Windows 对映像复制有 Sysprep 要求。

如何创建 VM 映像

在您设置并按需要配置虚拟机之后,您就可以将该虚拟机实例捕捉为 VM 映像。在捕捉过程中,系统会存储该虚拟机的所有相关属性和磁盘并创建后备 VHD page blobs 的副本。每个 VHD 的副本将存储在与所复制的原始 VHD 相同的存储帐户和容器中。如果您想要在 Azure 存储中找出复制后的 VHD,请使用以下命名约定搜索 page blobs:对于 OS VHD,我们使用 <VM 映像名称>-os-YYYY-MM-DD<-ZZ>;对于复制后的数据 VHD,则使用 <VM 映像名称>-datadisk-<Lun>-YYYY-MM-DD(-ZZ)。日期为 VM 映像的捕捉日期,-ZZ 为数字,仅在有冲突时添加,使名称具有唯一性。在捕捉过程中,系统不会保存内存中的状态,所以该功能不应用于替换 Microsoft Azure 当前的备份和还原选项。如果您想要了解有关备份和还原的更多信息,您可以访问 https://msdn.microsoft.com/library/azure/jj573031.aspx

如果 OS 已经通用化/取消供应,虚拟机必须先关闭,然后才能捕捉为 VM 映像。VM 捕捉为 VM 映像后,虚拟机将自动删除。如果 OS 已专用化,则可以在虚拟机运行或关闭时捕捉虚拟机。捕捉的虚拟机将保持不变。如果需要应用程序保持一致或者进行跨磁盘捕捉,我们建议您先关闭虚拟机,然后再捕捉 VM 映像。 

如何使用 VM 映像

在创建虚拟机时,您可以将 VM 映像作为新部署或现有部署的一部分进行使用。要部署新 VM,请确保虚拟机和 VM 映像的位置相同,然后只需提供 VM 映像的名称即可使用。如果 VM 映像已通用化,则同时需要提供供应信息和网络配置,与现今 OS 映像类似。部署后虚拟机的行为与其他任何使用 OS 映像或 OS 磁盘创建的 VM 相同。可以更新角色、可以附加额外的磁盘或分离现有磁盘。

如果 VM 映像已专用化,则无需提供供应信息,与现今 OS 磁盘类似。当使用 VM 映像部署虚拟机时,系统将为新 VM 创建 VHD 副本;换句话说,系统不会直接附加现有 VHD。使用专用化 VM 映像部署虚拟机后,VM 将在部署后快速启动,并且看起来像处于运行状态,因为不需要进行供应。但是,虚拟机可能仍然处于启动状态,另外还需要几分钟准备好远程桌面/SSH。虚拟机部署并运行后,其行为与其他任何使用 OS 映像或 OS 磁盘创建的 VM 相同。关于这个表述需要注意的一种情况是,将运行中的 VM 捕捉为专用化 Windows VM 映像,然后部署新的虚拟机。使用此类 VM 映像时,如果您是第一次使用远程桌面连接到新部署的 VM,可能会弹出一个对话框,提示 VM 没有正确关闭。

PowerShell

为了激发您的兴趣,让您开始使用 VM 映像,我提供了一些 PowerShell 代码段,说明如何创建和使用 VM 映像。看了这些代码片段后您可能会想要更多示例。不久后我们将就 VM 映像 PowerShell 发布全面的“如何”系列博客文章。

Save-AzureVMImage

要将名为“myVMToCapture”的现有虚拟机捕捉为名为“myAwesomeVMImage”的 VM 映像,请使用 Save-AzureVMImage commandlet:  

Save-AzureVMImage –ServiceName “myServiceName” –Name “myVMtoCapture” –OSState “Generalized” –ImageName “myAwesomeVMImage” –ImageLabel “This is my Virtual Machine Image”

 

请注意,这与您将 VM 捕捉为 OS 映像使用的 commandlet 相同。现在提供了额外的参数集,可以让您决定将 VM 捕捉为 OS 映像还是 VM 映像。OSState 参数是捕捉 VM 映像所必需的新参数。

Get-AzureVMImage

要列出映像存储库中的所有 VM 映像,请使用 Get-AzureVMImage commandlet:

Get-AzureVMImage

该 commandlet 将返回 OS 映像和 VM 映像的组合列表。OS 映像将先返回,随后返回 VM 映像。 

如果您只需要 VM 映像,您可以使用几个对于 OS 映像而言始终为 null 的属性,将 OS 映像过滤掉:

Get-AzureVMImage | where {(gm –InputObject $_ -Name DataDiskConfigurations) -ne $null} | Select -Property Label, ImageName 

New-AzureVMImage

使用 VM 映像“myAwesomeVMImage”在美国西部部署 VM

New-AzureQuickVM –Windows –Location “West US” –ServiceName “MySvc1” –Name “myVM1” –InstanceSize “Medium” –ImageName “myAwesomeVMImage” –AdminUsername “admin”–Password “adminPassword123” -WaitForBoot

 

本文翻译自:https://blogs.msdn.com/b/windowsazure/archive/2014/04/14/vm-image-blog-post.aspx