镜像构建:Windows Cloud Image

Windows Cloud 镜像构建

UbuntuDebian等常见Linux系统都有官方自带cloud-initcloud image可供下载使用,但是Windows系统在微软中心只找到了ISO镜像的下载路径。当需要在pve等常见虚拟化环境中部署Windows服务器的时候,无论是virtio的驱动,还是iso安装漫长的等待时间都是个问题,所以需要构建cloud image来方便快捷的进行部署

构建工具

工具使用的是提供给OpenStack的构建工具:

构建出来的镜像可以在各种虚拟化环境中部署和运行。

环境准备

  • 一台开启了Hyper-VWindows宿主机,用于构建镜像。
  • 一个Windows Server的部署镜像,这里以Windows2022为例。
  • Windows虚拟机的virtio驱动,可以在这里下载到最新的iso

注意事项

  1. 镜像的构建本身不会污染宿主机环境,但是需要在宿主机中启用Hyper-V,以便于创建虚拟机。(启用教程网上很多,不做阐述)
  2. 启用了Hyper-V以后,为了尽可能构建稳定独立的镜像环境,需要在Hyper-V中创建一个额外的网卡,用于单独构建虚拟机。

Hyper-V 添加网卡

  1. 通过Windows的搜索功能打开Hyper-V管理器

    Hyper-V管理器

  2. 根据下面的流程创建一个虚拟交换机

    创建虚拟交换机

  3. 配置虚拟交换机属性

    虚拟交换机属性

  4. 等待应用更改结束后就可以退出Hyper-V管理器了

挂载虚拟光驱

只要双击打开下载好的Windows2022iso文件,Windows就会自动对虚拟光驱进行挂载了。这里假设我挂载以后的盘符为D:\

构建流程

  1. 首先在Windows宿主机上克隆构建工具的仓库

    1
    git clone https://github.com/cloudbase/windows-imaging-tools.git
  2. 以管理员权限执行Powershell,并进入刚刚clone的仓库目录下

  3. 为当前的Powershell临时加载镜像构建需要的模块

    1
    2
    3
    Import-Module .\WinImageBuilder.psm1
    Import-Module .\Config.psm1
    Import-Module .\UnattendResources\ini.psm1
  4. 指定配置文件的目录,并初始化对应的文件内容

    1
    2
    $ConfigFilePath = ".\config.ini"
    New-WindowsImageConfig -ConfigFilePath $ConfigFilePath
  5. (可跳过)快速初始化配置文件

    1
    2
    3
    Set-IniFileValue -Path (Resolve-Path $ConfigFilePath) -Section "DEFAULT" `
    -Key "wim_file_path" `
    -Value "D:\Sources\install.wim" # 这里的D:\是指虚拟光驱挂载到了D:\

    因为有一些具体的参数还需要调整,因此这一步可以在下一步手动修改config的时候进行

  6. 手动完善刚刚通过命令行创建的config.ini文件,以下是一些注意事项和自己没搞明白的地方

    • image_name这个配置项需要对install.wim执行Get-WimFileImagesInfo来获取一个列表,然后选出你需要的那个镜像名字。比如对带有桌面环境的Windows Server 2022标准版而言,就是Windows Server 2022 SERVERSTANDARD
    • [vm]的配置参数是指构建用的虚拟机的参数。在构建完成后这个虚拟机会被销毁,一般不用在意。在构建失败的时候可以通过管理员密码进入虚拟机查看信息
    • [vm]external_switch中需要填入的就是我们刚刚创建好的Hyper-V虚拟网卡名字,比如按照上图中我们选用的是external,这里直接填入即可。
    • [drivers]的部分需要选择你下载的virtio镜像地址
    • time_zone这块不太清楚格式应该怎么填,无论是Asia/Shanghai还是China Standard Time,在自己构建的时候都失败了。如果出现了同样问题的小伙伴建议就默认留空试试

    其他具体是用qcow2还是vhdx就按需填写即可

  7. 执行构建命令,等待镜像构建成功即可

    1
    New-WindowsOnlineImage -ConfigFilePath $ConfigFilePath

    镜像构建的过程中,会有一段时间Powershell一直输出查询日志,这个时候可以去Hyper-V管理器那边查看创建好的虚拟机中的构建状态,如果出现了报错的话直接将虚拟机删除,重新调整配置文件再构建即可。

    理论上来说整个构建流程都可以无人值守完成,构建成功了一次以后配置文件和路径在确定的情况下可以保留用于下一次的构建

  8. 构建成功后,生成的对应镜像会存放于config.ini中的image_path配置目录下。

补充说明

  • 整个构建流程对Windows宿主机一般而言不会有环境污染的问题。在构建完成以后,只需要删掉创建的Hyper-V虚拟交换机就可以恢复初始环境。如果在构建用虚拟机构建过程中出现问题,只需要删掉对应的虚拟机和虚拟机对应的磁盘文件即可。

  • 如果是在加载驱动的过程中手动中止了构建,也只需要将挂载的虚拟目录弹出或删除,然后从头开始整个流程即可。

  • 如果构建成功的话,虚拟机会自动关机并重启,这段时间可能会存在一段时间黑屏情况,不用太在意,等待一段时间以后Powershell会接收到虚拟机的配置信息,从而开始镜像的打包流程。


镜像构建:Windows Cloud Image
https://halc.top/p/b9295ba3
作者
HalcyonAzure
发布于
2024年1月30日
许可协议