让我们一起欢呼吧!随着最近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,请使用以下命名约定搜索 pageblobs:对于 OS VHD,我们使用 <VM映像名称>-os-YYYY-MM-DD<-ZZ>;对于复制后的数据 VHD,则使用 <VM映像名称>-datadisk-<Lun>-YYYY-MM-DD(-ZZ)。日期为 VM 映像的捕捉日期,-ZZ为数字,仅在有冲突时添加,使名称具有唯一性。在捕捉过程中,系统不会保存内存中的状态,所以该功能不应用于替换 Microsoft Azure当前的备份和还原选项。如果您想要了解有关备份和还原的更多信息,您可以访问http://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
New-AzureVMImage
使用VM映像“myAwesomeVMImage”在美国西部部署VM
New-AzureQuickVM–Windows–Location“West US”–ServiceName“MySvc1”–Name“myVM1” –InstanceSize“Medium”
–ImageName“myAwesomeVMImage” –AdminUsername“admin”–Password“adminPassword123”-WaitForBoot
http://blogs.msdn.com/b/windowsazure/archive/2014/04/14/vm-image-blog-post.aspx