Windows Azure Pack 与库项目(VM 角色)故障排除(第 2 部分)

原文链接:https://blogs.technet.com/b/privatecloud/archive/2013/11/27/troubleshooting-windows-azure-pack-and-gallery-items-part-2.aspx

大家好

接续上篇博客文章(Windows Azure包和库项故障排除(第 1 部分))继续介绍。现在,我们来谈谈使用 Windows Azure 包 (WAP) 和 Virtual Machine Manager (VMM) 配置和部署库项(VM 角色)时可能会遇到的潜在挑战。

在安装过多次 Windows Azure 包端到端解决方案后,我遇到了各种不同的挑战,我将会在下文进行说明,并针对这些问题提供解决方案。

为简化学习过程,我将会费些笔墨介绍我的环境以相关场景。

   

1 :通过 WAP 租户门户计划提供的 VM 角色

 

环境:

我的设置非常简单:一个 WAP 服务器(快速安装)、Service Provider Foundation (SPF) 服务器(安装于独立服务器上),最后还有用于管理某个 Hyper-V 服务器的 Virtual Machine Manager (VMM) 服务器。环境外观如下所示:

VMM 服务器

VMM01.fabrikam.com

SPF 服务器

SPF01.fabrikam.com

WAP 服务器

WAP01.fabrikam.com

VMM 库

\\MSSCVMMLibrary

Contoso

计划

Contoso.com 租户计划

用户帐户

Admins@contoso.com

WinOS VHD

WindowsBase2012R2.vhdx

数据 VHD

Data Disk.vhdx

版本:

1.0.0.0

 

场景:

已配置以下组件:

  • Windows      Azure 包      (WAP)
  • Service      Provider Foundation (SPF)
  • Virtual      Machine Manager (VMM)
  • Windows      Server 2012 R2 Sysprep 映像(位于 VMM 库)
  • 位于      VMM      库的数据磁盘(127      GB 动态扩展磁盘,无任何操作系统设置,稍后将在“数据磁盘”部分下进行说明)

 

在此场景中,我将会使用“Windows Server 2012 库资源中的Internet Information Server (IIS) ”,可在 WEB 平台安装程序中查找,也可以从此处直接下载。

我已经将库项下载至 WAP01 和 VMM01 服务器端 "C:\Gallery Resources"(默认情况下,称为 WS2012_IIS_VMRole_Pkg)。

我已经通过执行以下操作将 Resource Definition Package 导入 WAP:

  1. 在下载库项的服务器(例如      https://wap01.fabrikam.com:30091)上以      WAP      管理员身份启动 WAP      控制台。
  2. 单击 WAP Clouds,然后选择 Gallery
  3. 单击      Import,然后转至      "C:\Gallery Resources\WS2012_IIS_VMRole_Pkg"
  4. 选择 WS2012WebServer.resdefpkg,然后单击 OK 以导入。

 

正如先前的博客文章中所述,很多时候都没有阅读手册或者忘记执行操作。这一次没有漏掉凭据,也没有用错帐户,但问题出在设置和配置方面。

 

使用 WAP 和库项期间可能会遇到以下一些潜在问题:

  • 导入时显示库项,但不能添加至计划。
  • 填入租户门户 VM 角色输入时出现意外错误(第二个窗口)。
  • 填入租户门户 VM 角色输入时显示空白窗口(第二个窗口)。
  • VM 角色部署至VMM 时, Windows Azure 包提示出错。
  • 错误 (31371) VMM 作业日志中显示的相同系列名称 (xxx) 和版本 (y.y.y.y) 的所有等效VHD 的VHD 标签不一致。
  • 为Hyper-V 群集设置虚拟机失败。
  • 租户门户中未显示库项数据磁盘。

 

导入时显示库项,但不能添加至计划。

错误: 库项显示在 Gallery Items 下,但不能添加至计划。

原因: 库项 (Resource Definition Package) 已经导入至 Windows Azure 门户,但尚未将 Resource Extension Package导入 VMM 或者导入失败。

要验证是否因此带来挑战,请执行以下操作:

  1. 以管理员身份登录 WAP。
  2. 单击 VM      Clouds and Select Gallery。
  3. 单击库项列表。

  

2 :这时将显示 WAP 管理门户上导入的完整库列表

 

  1. 在主菜单上单击 Plans,然后选择一个计划(例如      Contoso.com      租户计划)。
  2. 选择 Virtual Machine Cloud,向下滚动至 gallery
  3. 选择 Add gallery items
  4. 对照      VM      Clouds 中的库项列表,检查列表中是否缺少任何计划。

  

3 :可添加至 Contoso 计划的库项列表

 

如上所示,对照 VM Clouds 下的库项表发现,显然并非所有库项均已添加至 Contoso 计划。

 

  1. 以管理员身份登录 VMM      服务器。
  2. 从 Start      菜单启动      Virtual Machine Manager PowerShell 提示符。
  3. 键入 Get-CloudResourceExtension |select name,然后按 Enter
  4. 验证列表中是否未显示 IIS      服务器。

   

 

解决方案: 将 IIS Webserver 资源扩展软件包导入 VMM。

我们需要将 IIS Webserver 资源扩展软件导入 VMM 资源库。

大家可以在此处了解有关如何采用端到端方式执行此操作的说明。下面我将会基于 Web 服务器库项提供一个具体示例:

  1. 以管理员身份登录      VMM      服务器。
  2. 从 Start      菜单将 Virtual Machine Manger Command Shell 启动为      "Run as Administrator"。
  3. 运行以下命令:

$libraryShare = Get-SCLibraryShare | Where-Object {$_.Name -eq 'MSSCVMMLibrary'}

$resextpkg = $Env:SystemDrive + "\GalleryResources\My-VMRole-Pkg\MyVMRole.resextpkg"

Import-CloudResourceExtension –ResourceExtensionPath $resextpkg -SharePath $libraryShare

 

使用上方标记为蓝色的环境值示例:

$libraryShare = Get-SCLibraryShare | Where-Object {$_.Name -eq 'MSSCVMMLibrary'}

$resextpkg = $Env:SystemDrive + "\Gallery Resources\WS2012_IIS_VMRole_Pkg\WS2012WebServer.resextpkg"

Import-CloudResourceExtension –ResourceExtensionPath $resextpkg -SharePath $libraryShare

 

PowerShell 输出将如下所示:

  

4 :显示Fabrikam 环境中执行的上述命令

 

  1. 运行以下命令以验证导入是否成功。

Get-CloudResourceExtension |select name

 
  

5 :显示Fabrikam 环境中执行的上述命令

注意:      验证是否已将 WS2012WebServer 添加至列表。

 

通常,我们会验证要与 VM 角色一起使用的VHD 是否配置正确,在此情况下,我们将确定如果配置不正确将会发生什么情况。

 

现在,我们返回至 WAP,确定是否可以将 IIS 服务器添加至计划。为此,请执行以下操作:

 

  1. 以管理员身份打开 WAP      管理门户。(例如      https://wap01.fabrikam.com:30091
  2. 从主菜单中选择      Plan。
  3. 选择要添加      IIS      服务器库项的计划(例如      Contoso.com      租户计划)。
  4. 选择      Virtual Machine Manager 作为计划服务。
  5. 向下滚动至      gallery,然后单击      "Add      gallery items"。
  6. 验证列表中现是否显示 Web      Server (ISS)。

  

6 :显示可添加至计划的库项列表

  1. 向计划添加新的库项并保存计划。

 

  1. 登录      WAP      租户门户,并以订阅用户身份访问刚刚使用      IIS      服务器库项进行更新的计划。(例如 admins@contoso.com @ https://wap01.fabrikam.com:30081
  2. 单击            
  3. 选择      Virtual Machine Role。
  4. 从      Gallery      中选择 Web Server,然后单击 Next。
  5. 为 IIS      服务器指定名称,然后单击 Next。
  6. 通知发生意外错误。

有关详细信息,请参阅下一故障排除项目。

 

填入租户门户 VM 角色输入时出现意外错误(第二个窗口)。

错误: 填入租户门户 VM 角色输入时出现意外错误(第二个窗口)。

原因: 库项不包含与库项所需的属性匹配的 VHD。

要重现错误,请执行以下操作:

  1. 通过订阅服务(具有访问刚刚通过      IIS      服务器库项更新的计划的权限)登录 WAP      租户门户(例如 admins@contoso.com @ https://wap01.fabrikam.com:30081
  2. 单击 New。
  3. 选择 Virtual Machine Role
  4. 选择 From Gallery
  5. 选择Web Server ,然后单击 Next
  6. 为 Web      Server 命名(例如 IIS01)。
  7. 单击      Next。

现在,您将会看到一条错误消息:Unexpected Error:

  

图7 WAP 租户门户中显示意外错误

 

解决方案: 修改 VMM 库中的一个或多个 VHD,以包含所需的库项属性。

此处的解决方案是验证 VMM 库中是否包含 VHD,并且其中包含自述文件中要求的必要库项属性。在这种情况下,系统将抛出错误,因为它找不到需要使用的版本、操作系统、系列名称和标签匹配的 VHD。

Stephen Baron 已创建过一篇优秀的博客文章,描述如何为 VHD 设置属性。

应用程序管理 – Windows Azure 包库项的虚拟硬盘需求

为简化操作,我将使用上述属性,并遵循 Stephens 博客中所述的方法执行操作。我不打算解释 Stephen 采用这种做法的原因。

先决条件在于,您已经将“Windows Server 2012 库资源中的 Internet Information Server (IIS)”下载至 c:\Gallery Items\,如“场景”部分下所述。

为此,请执行以下操作:

  1. 以管理员身份登录 VMM      服务器。
  2. 打开文件资源管理器,然后转至      "C:\Gallery Resources\WS2012_IIS_VMRole_Pkg"
  3. 打开 WS2012WebServer-Readme 文件。

注意操作系统虚拟硬盘表:

 

我们将对 VHD 使用以下值:

 

操作系统:     Windows Server 2012 R2 Standard

系列名称:        Windows Server 2012 R2 Standard

标签             WindowsServer2012, .NET3.5

版本:        1.0.0.0

 

  1. 打开      Virtual Machine Manager 控制台。
  2. 选择 Library >      [Library Name] > VHDs
  3. 选择安装      Windows      Server 2012 R2 并启用 .Net 3.5 的      VHD(例如      Win2012R2Base.vhdx)。
  4. 双击      VHD。
  5. 在      Family      中,指定 Windows Server 2012 R2 Standard(您可以在字段中键入)。
  6. 在      Release      中,指定 1.0.0.0(您可以在字段中键入)。
  7. 从      Operating      System 下拉列表中选择 Windows Server 2012 R2 Standard

现在,VHD 将如下所示:

  

8 GUI 的VHD 属性图片

 

  1. 单击 OK 以将设置保存至      VHDX      文件。

我们需要标记 VHDX 文件,此操作无法从 GUI 中完成。为此,请执行以下操作:

应将以下标记添加至 VHDX:

  • WindowsServer2012R2
  • .NET3.5

 

  1. 从 Start      菜单中启动       Virtual Machine Manager Command Prompt

运行以下命令:

$myVHD = Get-SCVirtualHardDisk | where {$_.Name –eq 'Win2012R2Base.vhdx'}

$tags = $myVHD.Tag

if ( $tags -cnotcontains "WindowsServer2012R2" ) { $tags += @("WindowsServer2012") }

Set-scvirtualharddisk –virtualharddisk $myVHD –Tag $tags

 

输出将如下所示:

  

9 :用于将标签添加至 VHD 的PowerShell 命令

由于我们还需要另外一个“标签”,我们将通过执行以下操作再此运行命令:

$tags = $myVHD.Tag

if ( $tags -cnotcontains ".NET3.5" ) { $tags += @(".NET3.5") }

Set-scvirtualharddisk –virtualharddisk $myVHD –Tag $tags

 

输出将如下所示:

  

10 :用于将标签添加至 VHD 的PowerShell 命令

 

  1. 通过运行以下命令,验证是否已添加这两个标签:

Get-SCVirtualHardDisk |where {$_.Name -eq 'Win2012R2Base.vhdx'} |select Name, FamilyName, OperatingSystem, Version, Tag

 

这将会向您显示已应用至 VMM 库 VHDX 文件的设置概述。

  

11 :运行 Get-SCVirtualHardDisk 的输出

 

现在,我们已经为 VHDX 设置了必要的属性,下面检查属性是否奏效。

 

  1. 注销 WAP      租户门户。
  2. 通过订阅服务(具有访问刚刚通过      IIS      服务器库项更新的计划的权限)登录 WAP      租户门户(例如 admins@contoso.com @ https://wap01.fabrikam.com:30081
  3. 单击 New。
  4. 选择 Virtual Machine Role
  5. 选择 From Gallery
  6. 选择Web Server,然后单击      Next。
  7. 为 Web      服务器(例如      IIS01)命名,然后单击      Next。
  8. 验证是否显示第二个输入屏幕。

  

12 WAP 管理门户中的VM 角色( Web 服务器)

 

填入租户门户 VM 角色输入时显示空白窗口(第二个窗口)

错误: 填入租户门户 VM 角色输入时显示空白窗口(第二个窗口)。

原因: 托管 VHDX 文件的 VMM 库不属于分发 VM 角色的目标 VMM Cloud。

要重现错误,请执行以下操作:

  1. 通过订阅服务(具有访问刚刚通过 IIS      服务器库项更新的计划的权限)登录 WAP      租户门户。(例如 admins@contoso.com @ https://wap01.fabrikam.com:30081
  2. 单击 New
  3. 选择 Virtual Machine Role
  4. 选择 From Gallery
  5. 选择Web Server,然后单击 Next
  6. 为 Web      服务器(例如      IIS01)命名,然后单击 Next
  7. 现在,将会看到一个空白屏幕:

  

13 WAP 租户门户中的空白WAP 表单

 

解决方案: 将库添加至 VMM Cloud

  1. 以管理员身份登录 VMM      服务器。
  2. 打开      Virtual      Machine Manager 控制台。
  3. 选择 VMs and Services
  4. 右键单击计划在 WAP      中使用的云,然后选择      Properties(例如      Contoso)。
  5. 在左侧菜单中选择 Library,然后单击 Add
  6. 选择托管      VM      角色      VHDX 文件的库(例如      MSSCMVVLibrary),然后单击 OK
  7. 关闭 VMM      控制台。
  8. 通过订阅服务(具有访问刚刚通过 IIS      服务器库项更新的计划的权限)登录 WAP      租户门户。(例如 admins@contoso.com @ https://wap01.fabrikam.com:30081)。
  9. 单击 New
  10. 选择 Virtual Machine Role
  11. 选择      From Gallery
  12. 选择Web Server,然后单击 Next。
  13. 为 Web      服务器(例如      IIS01)命名,然后单击      Next。
  14. 验证是否显示第二个输入屏幕。

  

14 WAP 租户门户的VM 角色表单

 

VM 角色部署至 VMM 时, Windows Azure 包提示出错。

错误: 将 VM 角色部署至 VMM 时,Windows Azure 包提示出错。

原因: VMM Cloud 的功能配置文件已被设置为一个或多个配置文件。

 

解决方案: 取消选中 WAP 正在对 VMM Cloud 使用的所有功能配置文件。

  1. 以管理员身份登录      VMM      服务器。
  2. 打开      Virtual Machine Manager 控制台。
  3. 选择 VMs and Services
  4. 右键单击计划在 WAP      中使用的云,然后选择      Properties(例如      Contoso)。
  5. 选择 Capability Profiles
  6. 取消选中所有功能配置文件,然后单击      OK。
  7. 重试 VM 部署操作以验证其是否正常运行。

 

VMM 作业日志中显示的相同系列名称 (xxx) 和版本 (y.y.y.y) 的所有等效 VHD VHD 标签不一致

错误: VM 角色部署失败后,VMM 中显示作业错误:错误 (31371):VMM 作业日志中显示的相同系列名称 (xxx) 和版本 (y.y.y.y) 的所有等效 VHD 的 VHD 标签不一致。

image

15 WAP 租户门户中显示的错误

 

原因: 两个 VHD 的系列和版本完全相同,但 VMM 库中显示的标签不同。

执行以下操作以验证问题。

  1. 以管理员身份登录      Virtual Machine Manager。
  2. 启动      Virtual Machine Manager 控制台。
  3. 选择      Library。
  4. 选择      Library      Servers > [Library Server name] > [Library Share] > VHDs。
  5. 查找系列、操作系统和版本相同的所有      VHD。

 

解决方案: 系列、操作系统和版本完全相同的两个 VHD 必须具有相同的标签。共有两种解决方案:第一种解决方案是使用一个 VHD,将操作系统、系列和版本相同的其他 VHD 中的标签添加至 VMM 库中的一个 VHD,然后从库中删除系列、操作系统和版本相同的其他 VHD。第二种方案是更改某个 VHD 的系列和版本,使其与库中的其他 VHD 不匹配。

 

共有两种途径可以解决这个问题:

将标签合并至某个 VHD 文件,然后从库中删除其他 VHD(首选解决方案)

 

  1. 记录从上述步骤中找到的具有类似系列和版本属性的 VHD 名称。
  2. 以管理员身份打开 Virtual Machine Manager 命令外壳。
  3. 运行以下命令以查看 VHD 标签。

Get-SCVirtualHardDisk -name '<VHD File>'} |select Name, FamilyName, OperatingSystem, Version, Tag

 

示例:

 

Get-SCVirtualHardDisk -name 'Win2012R2Base.vhdx' |select Name, FamilyName, OperatingSystem, Version, Tag

 

输出将如下所示:

  

16 VMM 库虚拟硬盘输出

 

  1. 从上述命令的 VHD 输出中查找类似的 VHD 并添加这些标签。

$myVHD = Get-SCVirtualHardDisk | where {$_.Name –eq '<VHD File>'}

$tags = $myVHD.Tag

if ( $tags -cnotcontains "<TAG1>" ) { $tags += @("<TAG1>") }

if ( $tags -cnotcontains "<TAG2>" ) { $tags += @("<TAG2>") }

Set-scvirtualharddisk –virtualharddisk $myVHD –Tag $tags

 

示例:

$myVHD = Get-SCVirtualHardDisk | where {$_.Name –eq 'Win2012R2Base.vhdx'}

$tags = $myVHD.Tag

if ( $tags -cnotcontains "SQL2012" ) { $tags += @("SQL2012") }

if ( $tags -cnotcontains ".NET4.5" ) { $tags += @(".NET4.5") }

Set-scvirtualharddisk –virtualharddisk $myVHD –Tag $tags

 

  1. 再次运行上方的 Get-SCVirtualHardDisk 命令,检查是否已应用该标签。

  

17 VMM 库虚拟硬盘输出

 

  1. 返回至 VMM 控制台中的 VMM 库。
  2. 右键单击已将标签移动至其他 VHD 的 VHD,然后单击 Delete。
  3. 关闭 VMM 控制台。
  4. 重新部署 VM 角色,以验证解决方案是否正常运行。

 

更改其中一个 VHD 的系列名称或版本。

  1. 打开系列和版本类似的其中一个 VHD。
  2. 将系列名称更改为与 VM 角色自述规范匹配的另外一个值,单击 OK 以修改 VHD。
  3. 重新部署 VM 角色,以验证解决方案是否正常运行。

 

为具有 Hyper-V 群集的VMM Cloud 设置虚拟机失败

错误: 在将 VM 角色部署至托管 Hyper-v 群集的 VMM Cloud 时,Windows Azure 包出错。

原因: 未为群集设置CreateHighlyAvailableVmRoles 属性,因此云(包含 Hyper-V 群集)的 VM 角色设置失败。

解决方案: VM 云必须包含名为 CreateHighlyAvailableVmRoles 的自定义属性并将其值设置为 true,以便将虚拟机配置为高度可用。

  1. 以管理员身份登录 VMM      服务器。
  2. 打开      Virtual Machine Manager 控制台。
  3. 选择 VMs and Services
  4. 右键单击计划在 WAP      中使用的云,然后选择      Properties(例如      Contoso)。
  5. 选择 Custom Properties选项卡。
  6. 单击 Manage Custom Properties
  7. 在      Object      Type 中,选择 Cloud
  8. 单击 Create 以创建新的属性。
  9. 将该属性命名为 CreateHighlyAvailableVmRoles ,然后单击      OK
  10. 选择该新属性,然后单击 Add
  11. 单击 OK
  12. 在属性值中,键入 true
  13. 单击 OK

 

租户门户中未显示库项数据磁盘。

错误: 部署至云后,未显示 VM 角色的数据磁盘。

  

18 WAP 租户门户中的 VM 角色表单

原因: 所需的数据 VHD 属性设置不正确。

解决方案: VMM 库中的 VHD 必须将系列名称、版本集和操作系统集设置为 None。为此,请执行以下操作:

 

  1. 打开      Virtual Machine Manager 控制台。
  2. 选择 Library >      <Library Name> > VHDs
  3. 选择将用作 VM 角色数据磁盘的 VHD(例如      Data Disk.vhdx)。
  4. 双击该 VHD。
  5. 将      Family Name 和 Release 字段设置为与 VM 角色的操作系统磁盘相同的值(例如      Windows      Server 2012 Standard、Release: 1.0.0.0)。

  

19 VMM 控制台的VHD 属性

  1. 验证数据磁盘操作系统是否设置为 None
  2. 单击 OK
  3. 关闭 VMM      控制台。
  4. 重新执行步骤以验证修复情况。

  

20 WAP 租户门户的 VM 角色表单

 

希望本文列出的这一系列可能挑战可以更有效地帮助您实施 Windows Azure 包和库项。

我要感谢 Stephen Baron 帮助整理这篇博客文章。

如有任何意见,请随时向我提出;或者,也可以向我反映您遇到的其他一些挑战。

下次再见,祝大家在使用 Windows Azure 包和库项的过程中一帆风顺。