OpenStack自动生成Windows镜像工具

半兽人 发表于: 2023-03-01   最后更新时间: 2023-03-01 19:09:12  
{{totalSubscript}} 订阅, 925 游览

Windows OpenStack Imaging Tools 自动生成 Windows 镜像。

这些工具是一组 PowerShell 模块和脚本。

支持Windows镜像的目标环境是。

  • 带有KVM、Hyper-V、VMware和baremetal管理程序类型的OpenStack
  • 带有KVM、Hyper-V、VMware和baremetal的MAAS

生成环境需要是一个Windows环境,并启用Hyper-V虚拟化。
如果你打算在另一个system / hypervisor 上运行在线Windows设置步骤,则不需要Hyper-V虚拟化。

以下版本的Windows镜像(包括x86/x64,如果存在的话)被支持。

  • Windows Server 2008 / 2008 R2
  • Windows Server 2012 / 2012 R2
  • Windows Server 2016
  • Windows Server 2019
  • Windows Server 2022
  • Windows 7 / 8 / 8.1 / 10 / 11

要生成Windows Nano Server 2016,使用以下资源库。
https://github.com/cloudbase/cloudbase-init-offline-install

Windows镜像工具的工作流程

Windows镜像工具工作流程

创建Windows镜像的快速路径

要求:

  • 一台Windows主机,启用Hyper-V虚拟化,支持PowerShell >=v4 和Windows Assessment 和 Deployment Kit(部署工具包ADK)。
  • 一个Windows安装ISO或DVD
  • Windows兼容的驱动程序,如果目标环境需要的话
  • Git环境

生成Windows镜像的步骤

  • 克隆这个资源库
  • 挂载或提取Windows ISO文件
  • 下载和/或提取Windows兼容的驱动程序
  • 如果目标环境是MAAS或者镜像生成被配置为安装更新。
  • windows-curtin-hooks 和 WindowsUpdates git submodules 是必需的。
  • 运行git submodule update --init来获取它们
  • 导入WinImageBuilder.psm1模块
  • 使用具有适当配置文件的 New-WindowsCloudImageNew-WindowsOnlineCloudImage 方法

用于OpenStack KVM的PowerShell镜像生成示例(主机需要启用Hyper-V)。

git clone https://github.com/cloudbase/windows-openstack-imaging-tools.git
pushd windows-openstack-imaging-tools
Import-Module .\WinImageBuilder.psm1
Import-Module .\Config.psm1
Import-Module .\UnattendResources\ini.psm1
# Create a config.ini file using the built in function, then set them accordingly to your needs
$ConfigFilePath = ".\config.ini"
New-WindowsImageConfig -ConfigFilePath $ConfigFilePath

# To automate the config options setting:
Set-IniFileValue -Path (Resolve-Path $ConfigFilePath) -Section "DEFAULT" `
                                      -Key "wim_file_path" `
                                      -Value "D:\Sources\install.wim"
# Use the desired command with the config file you just created

New-WindowsOnlineImage -ConfigFilePath $ConfigFilePath

popd

镜像生成工作流程

New-WindowsCloudImage

这个命令不需要启用Hyper-V,但是生成的镜像还没有准备好被部署,因为它需要在另一个管理程序上手动启动。

当它关闭时,该镜像就可以使用了。

你可以在Examples/create-windows-cloud-image.ps1中找到一个生成原始OpenStack Ironic镜像的PowerShell例子,它也可以在KVM上使用。

New-WindowsOnlineImage

这个命令要求启用Hyper-V,如果要安装更新,需要配置一个VMSwitch用于外部网络连接。如果要安装更新的话,强烈建议使用VMSwitch的网络连接。

这个命令在内部使用New-WindowsCloudImage来生成基础镜像,并使用基础镜像启动Hyper-V实例。使用基本镜像启动一个Hyper-V实例。在Hyper-V实例关闭后。产生的VHDX被缩减到最小尺寸,并转换为所需的格式。

你可以在 Examples/create-windows-online-cloud-image.ps1 中找到一个生成原始 OpenStack Ironic 镜像的 PowerShell 示例,该镜像也可在 KVM 上使用。

常见问题 (FAQ)

镜像的生成始终不停止

  • 确保Hyper-V VMSwitch配置正确,如果你已经配置了镜像生成来安装Windows更新,它允许互联网连接。

  • 在相关的Hyper-V虚拟机中检查Logon.ps1脚本是否失败。如果脚本失败,应该有一个PowerShell窗口显示错误信息。

我用镜像启动了一个实例,得到的是一个BSOD

  • 这是可能遇到的最常见的情况,而且很容易解决。

  • 如果你在KVM hypervisor上启动,确保你为带有VirtIO驱动的ISO/folder配置了正确的路径。配置选项是 virtio_iso_path 和 virtio_base_path。

  • 在KVM hypervisor方面,确保你用--enable-kvm启动KVM vm进程。

  • 如果你在裸机上启动,确保基本的Windows安装有内置的存储驱动,或者你在drivers_path配置选项中指定了驱动文件夹的正确路径。

我用这个镜像启动了一个实例,永远在Windows加载屏幕

对于开发者而言

运行单元测试

需要在系统上安装 PowerShell Pester 包。

如果你运行的是Windows 10,它应该已经安装在你的系统上。
如果没有安装,你可以在Windows 10或更高版本上安装它。

Install-Package Pester

或者你可以从以下网站克隆它:https://github.com/pester/Pester

在一个封闭的环境中运行测试:

cmd /c 'powershell.exe -NonInteractive { Invoke-Pester }'

这将运行所有的测试而不污染你当前的shell环境。
如果你在持续集成环境中运行它,就不需要这样做。

REF

https://github.com/cloudbase/windows-imaging-tools

更新于 2023-03-01

查看OpenStack更多相关的文章或提一个关于OpenStack的问题,也可以与我们一起分享文章