镜像构建:Windows Cloud Image
Windows Cloud 镜像构建
Ubuntu
和Debian
等常见Linux
系统都有官方自带cloud-init
的cloud image
可供下载使用,但是Windows
系统在微软中心只找到了ISO
镜像的下载路径。当需要在pve
等常见虚拟化环境中部署Windows
服务器的时候,无论是virtio
的驱动,还是iso
安装漫长的等待时间都是个问题,所以需要构建cloud image
来方便快捷的进行部署
构建工具
工具使用的是提供给OpenStack
的构建工具:
构建出来的镜像可以在各种虚拟化环境中部署和运行。
环境准备
- 一台开启了
Hyper-V
的Windows
宿主机,用于构建镜像。 - 一个
Windows Server
的部署镜像,这里以Windows2022
为例。 Windows
虚拟机的virtio
驱动,可以在这里下载到最新的iso
。
注意事项
- 镜像的构建本身不会污染宿主机环境,但是需要在宿主机中启用
Hyper-V
,以便于创建虚拟机。(启用教程网上很多,不做阐述) - 启用了
Hyper-V
以后,为了尽可能构建稳定独立的镜像环境,需要在Hyper-V
中创建一个额外的网卡,用于单独构建虚拟机。
Hyper-V 添加网卡
通过
Windows
的搜索功能打开Hyper-V
管理器根据下面的流程创建一个虚拟交换机
配置虚拟交换机属性
等待应用更改结束后就可以退出
Hyper-V
管理器了
挂载虚拟光驱
只要双击打开下载好的Windows2022
的iso
文件,Windows
就会自动对虚拟光驱进行挂载了。这里假设我挂载以后的盘符为D:\
构建流程
首先在
Windows
宿主机上克隆构建工具的仓库1
git clone https://github.com/cloudbase/windows-imaging-tools.git
以管理员权限执行
Powershell
,并进入刚刚clone
的仓库目录下为当前的
Powershell
临时加载镜像构建需要的模块1
2
3Import-Module .\WinImageBuilder.psm1
Import-Module .\Config.psm1
Import-Module .\UnattendResources\ini.psm1指定配置文件的目录,并初始化对应的文件内容
1
2$ConfigFilePath = ".\config.ini"
New-WindowsImageConfig -ConfigFilePath $ConfigFilePath(可跳过)快速初始化配置文件
1
2
3Set-IniFileValue -Path (Resolve-Path $ConfigFilePath) -Section "DEFAULT" `
-Key "wim_file_path" `
-Value "D:\Sources\install.wim" # 这里的D:\是指虚拟光驱挂载到了D:\因为有一些具体的参数还需要调整,因此这一步可以在下一步手动修改
config
的时候进行手动完善刚刚通过命令行创建的
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
就按需填写即可执行构建命令,等待镜像构建成功即可
1
New-WindowsOnlineImage -ConfigFilePath $ConfigFilePath
镜像构建的过程中,会有一段时间
Powershell
一直输出查询日志,这个时候可以去Hyper-V管理器那边查看创建好的虚拟机中的构建状态,如果出现了报错的话直接将虚拟机删除,重新调整配置文件再构建即可。理论上来说整个构建流程都可以无人值守完成,构建成功了一次以后配置文件和路径在确定的情况下可以保留用于下一次的构建
构建成功后,生成的对应镜像会存放于
config.ini
中的image_path
配置目录下。
补充说明
整个构建流程对
Windows
宿主机一般而言不会有环境污染的问题。在构建完成以后,只需要删掉创建的Hyper-V
虚拟交换机就可以恢复初始环境。如果在构建用虚拟机构建过程中出现问题,只需要删掉对应的虚拟机和虚拟机对应的磁盘文件即可。如果是在加载驱动的过程中手动中止了构建,也只需要将挂载的虚拟目录弹出或删除,然后从头开始整个流程即可。
如果构建成功的话,虚拟机会自动关机并重启,这段时间可能会存在一段时间黑屏情况,不用太在意,等待一段时间以后
Powershell
会接收到虚拟机的配置信息,从而开始镜像的打包流程。