为 HPC Pack IaaS 计算节点创建自定义 VM 映像

本文介绍如何创建自己的自定义 VM 映像,为 HPC Pack 2016 群集部署 IaaS 计算节点。

创建自定义 VM 映像的方法有两种不同的方法,一种用于 HPC Pack 2016 Update 3 和 HPC Pack 2019,另一种用于 HPC Pack 2016 RTM、HPC Pack 2016 Update 1 和 HPC Pack 2016 Update 2。 应根据头节点的 HPC Pack 版本选择正确的方法。

注释

HPC Pack Update 3 VM 映像与 HPC Pack Update 2(及更早版本)VM 映像之间的差异是 HPC Pack 计算节点和 Windows Management Framework 5.1 必须在后者中预安装。

小窍门

还可以使用 Azure 映像生成器 功能自动创建自定义 VM 映像。

为 HPC Pack 2016 Update 3 和 HPC Pack 2019 创建自定义 VM 映像

步骤 1:在 Azure 中创建虚拟机

Azure 门户中,创建具有以下作系统之一的 Azure 虚拟机: Windows Server 2012、Windows Server 2012 R2、Windows Server 2016、Windows Server 2019

步骤 2:在虚拟机中安装和配置自己的应用程序

登录到虚拟机,并安装和配置自己的应用程序。

步骤 3:使用 Sysprep 通用化虚拟机

详细链接: 在创建映像之前通用化 VM

  1. 登录到 Windows 虚拟机。
  2. 以管理员身份打开“命令提示符”窗口。
  3. 删除 panther 目录 (C:\Windows\Panther)。
  4. 然后将目录更改为 %windir%\system32\sysprep,然后运行:sysprep.exe /oobe /generalize /mode:vm /shutdown

Sysprep 完成通用化 VM 后,VM 将关闭。 不要重新启动 VM。

Sysprep 完成运行后,将虚拟机的状态设置为“通用化”。

Set-AzVm -ResourceGroupName $rgName -Name $vmName -Generalized

步骤 4:创建 VM 映像

打开 Azure 门户,从虚拟机列表中查找虚拟机。 在虚拟机的“ 概述 ”页上,单击“ 捕获 ”以从虚拟机创建托管映像。

  1. 打开 Azure 门户
  2. 在左侧菜单中,单击“虚拟机”,找到虚拟机。
  3. 在虚拟机的 “概述 ”页上的上部菜单中,单击“ 捕获”。
  4. “名称”中,键入要用于图像的名称。
  5. 资源组 中,选择“ 新建 ”并键入名称,或选择“ 使用现有 ”并从下拉列表中选择要使用的资源组。
  6. 创建映像后,选择“自动删除此虚拟机”。
  7. 单击“ 创建 ”以创建 VM 映像。

为 HPC Pack 2016 Update 2 创建自定义 VM 映像(或更早版本)

步骤 1:使用 HPC Pack 2016 Update 2 创建或选择 Azure IaaS 计算节点(或更早版本)

可以创建 Azure 虚拟机,并在其上手动安装正确的 HPC Pack 2016 计算节点版本,或选择现有 HPC Pack 2016 群集中当前运行的 Azure IaaS 计算节点。

如果未在 IaaS 计算节点中安装 Windows Management Framework (WMF) 5.1 ,请下载并安装它。

步骤 2:在 Azure IaaS 计算节点中安装和配置自己的应用程序

登录到虚拟机,并安装和配置自己的应用程序。

步骤 3:从虚拟机卸载 VM 扩展

Azure 门户中,找到相应的 Azure 虚拟机,单击“ 扩展”,卸载所有 VM 扩展(如果有)。

步骤 4:从计算节点清除群集特定信息

登录到 Azure IaaS 计算节点,以管理员身份打开 Windows PowerShell 控制台,并运行以下 PowerShell 脚本以清除群集特定信息。

# Step 1. Stop all the HPC services and change StartupType to Disabled
$hpcServices = @("HpcManagement", "HpcNodeManager", "msmpi", "HpcMonitoringClient", "HpcSoaDiagMon")
foreach($svc in $hpcServices)
{
    Stop-Service -Name $svc -Force -ErrorAction SilentlyContinue
    Set-Service -Name $svc -StartupType Disabled
}

# Step 2: Remove HPC logs and temp files from this node
$datadir = [System.Environment]::GetEnvironmentVariable("CCP_DATA", [System.EnvironmentVariableTarget]::Machine)
$logFilesPath = [System.IO.Path]::Combine($datadir, "LogFiles")
if(Test-Path $logFilesPath -PathType Container)
{
    Get-ChildItem -Path $logFilesPath | select -ExpandProperty FullName | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
}
Get-ChildItem -Path C:\Windows\Temp  | select -ExpandProperty FullName | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
Get-ChildItem -Path $env:TEMP | select -ExpandProperty FullName | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue

# Step 3: Remove CustomData.bin if it exists
Remove-Item "$env:SYSTEMDRIVE\AzureData\CustomData.bin" -Force -ErrorAction SilentlyContinue

# Step 4: Remove the HPC communication certificate
$thumbprint = Get-ItemPropertyValue -Path HKLM:\SOFTWARE\Microsoft\HPC -Name SSLThumbPrint
Remove-Item Cert:\LocalMachine\My\$thumbprint -ErrorAction SilentlyContinue
Remove-Item Cert:\LocalMachine\Root\$thumbprint -ErrorAction SilentlyContinue

# Step 5: Clear the information of the current HPC cluster
Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\HPC -Name ClusterConnectionString -Value ""
Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\HPC -Name SSLThumbPrint -Value ""
Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\HPC -Name NonDomainRole -Value 0 -Type DWord
if(Test-Path HKLM:\SOFTWARE\Wow6432Node\Microsoft\HPC)
{
    Set-ItemProperty -Path HKLM:\SOFTWARE\Wow6432Node\Microsoft\HPC -Name ClusterConnectionString -Value ""
    Set-ItemProperty -Path HKLM:\SOFTWARE\Wow6432Node\Microsoft\HPC -Name SSLThumbPrint -Value ""
    Set-ItemProperty -Path HKLM:\SOFTWARE\Wow6432Node\Microsoft\HPC -Name NonDomainRole -Value 0 -Type DWord
}

[Environment]::SetEnvironmentVariable("CCP_SCHEDULER", "", [System.EnvironmentVariableTarget]::Machine)
[Environment]::SetEnvironmentVariable("CCP_CLUSTERCONNECTIONSTRING", "", [System.EnvironmentVariableTarget]::Machine)

步骤 5:使用 Sysprep 通用化虚拟机

详细链接: 在创建映像之前通用化 VM

  1. 登录到 Windows 虚拟机。
  2. 以管理员身份打开“命令提示符”窗口。
  3. 删除 panther 目录 (C:\Windows\Panther)。
  4. 然后将目录更改为 %windir%\system32\sysprep,然后运行:sysprep.exe /oobe /generalize /mode:vm /shutdown

Sysprep 完成通用化 VM 后,VM 将关闭。 不要重新启动 VM。

Sysprep 完成运行后,将虚拟机的状态设置为“通用化”。

Set-AzVm -ResourceGroupName $rgName -Name $vmName -Generalized

步骤 6:创建 VM 映像

打开 Azure 门户,从虚拟机列表中查找虚拟机。 在虚拟机的“ 概述 ”页上,单击“ 捕获 ”以从虚拟机创建托管映像。

  1. 打开 Azure 门户
  2. 在左侧菜单中,单击“虚拟机”,找到虚拟机。
  3. 在虚拟机的 “概述 ”页上的上部菜单中,单击“ 捕获”。
  4. “名称”中,键入要用于图像的名称。
  5. 资源组 中,选择“ 新建 ”并键入名称,或选择“ 使用现有 ”并从下拉列表中选择要使用的资源组。
  6. 创建映像后,选择“自动删除此虚拟机”。
  7. 单击“ 创建 ”以创建 VM 映像。