openstack 制作Windows server 2016镜像

运行环境

  • 系统环境:centos7.9
  • qemu-kvm版本:1.5.3

镜像软件准备

关于virtio: kvm因为使用了硬件虚拟化,所以其cpu方面的运行效率是很高的。不过,kvm在I/O虚拟化方面,传统的方式是利用QEMU纯软件的方式来模拟I/O设备, 这样每次虚机发起I/O请求的时候,KVM内核模块会捕获这次请求,然后处理后将其放入I/O共享页,并通知用户空间中运行的QEMU程序。 QEMU获得I/O操作,交由硬件模拟代码(Emulation)来模拟出本次I/O操作之后,将结果放回I/O共享页,同时通知KVM内核模块读取I/O共享页的操作结果,把结果返回给虚机。 由于这种方式每次I/O操作经过的路径很复杂,其效率很低。所以就提出了virtio这种方案,virtio其实就是一个运行于Hypervisor之上的api接口, 让客户机知道自己运行于虚拟化环境中,进行I/O操作的时候通过virtio与Hypervisor通信,从而是虚机有更好的性能。

CloudBase-init简介

cloudbase-init 是 Windows 和其他系统的云初始化程序,可以设置主机名、创建用户、设置静态ip、设置密码等。对应的linux初始化程序是cloudinit,都是开源的Python项目。官方文档:http://cloudbase-init.readthedocs.io/en/latest/index.html

实现功能:

  • 初始化ip
  • 初始化主机名
  • 初始化用户
  • 自动扩展磁盘

配置文件路径: C:\Program Files or C:\Program Files (x86) as Cloudbase Solutions\Cloudbase-Init目录中. 其中目录结构如下所示:

  • bin - 可执行文件和其他二进制文件.
  • conf - 配置文件
  • log - cloudbase-init相关日志.
  • LocalScripts - 用户提供的脚本

安装完成之后, cloudbase-init 作为一个使用服务和通过插件去执行的两个步骤的服务, 通过这种方式去支持所有的配置. 根据平台不同的插件可能需要重启.

安装kvm环境

安装准备

kvm虚拟化技术需要硬件的支持,首先检查服务器(或其它)是否支持虚拟化。执行下面命令只要有输出代表都支持虚拟化

# egrep -o '(vmx|svm)' /proc/cpuinfo
vmx
vmx

安装kvm 

[root@localhost iso]# yum -y install qemu-kvm libvirt libvirt-bin virt-install qemu virt-manager bridge-utils
[root@localhost iso]# systemctl start libvirtd

查看kvm是否安装成功

[root@localhost iso]# rpm -qi qemu-kvm
Name        : qemu-kvm
Epoch       : 10
Version     : 1.5.3
Release     : 175.el7_9.6
Architecture: x86_64
Install Date: Mon 09 Oct 2023 11:11:50 AM CST
Group       : Development/Tools
Size        : 6023263
License     : GPLv2 and GPLv2+ and CC-BY
Signature   : RSA/SHA256, Thu 19 May 2022 09:40:39 PM CST, Key ID 24c6a8a7f4a80eb5
Source RPM  : qemu-kvm-1.5.3-175.el7_9.6.src.rpm
Build Date  : Thu 19 May 2022 09:28:45 PM CST
Build Host  : x86-02.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://www.qemu.org/
Summary     : QEMU is a machine emulator and virtualizer
Description :
qemu-kvm is an open source virtualizer that provides hardware
emulation for the KVM hypervisor. qemu-kvm acts as a virtual
machine monitor together with the KVM kernel modules, and emulates the
hardware for a full system such as a PC and its associated peripherals.

验证KVM内核是否加载成功

[root@localhost iso]# lsmod | grep kvm
kvm_intel             188740  0 
kvm                   637289  1 kvm_intel
irqbypass              13503  1 kvm     #输出为此内容则为成功。

若KVM内核没加载执行下面命令加载:

解决方法 直接执行下面两条命令:

# modprobe kvm  
# modprobe kvm-intel ( or kvm-amd )

确认libvirtld后台服务是否启动

[root@localhost iso]# systemctl status libvirtd.service
● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2023-10-18 10:56:26 CST; 27min ago
     Docs: man:libvirtd(8)
           https://libvirt.org
 Main PID: 1082 (libvirtd)
    Tasks: 19 (limit: 32768)
   CGroup: /system.slice/libvirtd.service
           ├─1082 /usr/sbin/libvirtd
           ├─1621 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
           └─1622 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper

Oct 18 10:56:27 localhost.localdomain dnsmasq[1607]: listening on virbr0(#3): 192.168.122.1
Oct 18 10:56:27 localhost.localdomain dnsmasq[1621]: started, version 2.76 cachesize 150
Oct 18 10:56:27 localhost.localdomain dnsmasq[1621]: compile time options: IPv6 GNU-getopt DBus no-i18n IDN DHCP DHCPv6 no-Lua TFTP no-conntrack ips... inotify
Oct 18 10:56:27 localhost.localdomain dnsmasq-dhcp[1621]: DHCP, IP range 192.168.122.2 -- 192.168.122.254, lease time 1h
Oct 18 10:56:27 localhost.localdomain dnsmasq-dhcp[1621]: DHCP, sockets bound exclusively to interface virbr0
Oct 18 10:56:27 localhost.localdomain dnsmasq[1621]: reading /etc/resolv.conf
Oct 18 10:56:27 localhost.localdomain dnsmasq[1621]: using nameserver 192.168.91.2#53
Oct 18 10:56:27 localhost.localdomain dnsmasq[1621]: read /etc/hosts - 2 addresses
Oct 18 10:56:27 localhost.localdomain dnsmasq[1621]: read /var/lib/libvirt/dnsmasq/default.addnhosts - 0 addresses
Oct 18 10:56:27 localhost.localdomain dnsmasq-dhcp[1621]: read /var/lib/libvirt/dnsmasq/default.hostsfile
Hint: Some lines were ellipsized, use -l to show in full.

使用kvm制作镜像

创建虚拟机

  • 创建存储系统镜像文件的目录,将Windows系统镜像及virtio镜像放到此目录
[root@localhost iso]# mkdir /data/iso
[root@localhost iso]# ll
total 6575084
-rw-r--r-- 1 qemu qemu 6176450560 Oct  9 11:28 cn_windows_server_2016_x64_dvd_9718765.iso
-rw-r--r-- 1 qemu qemu  556431360 Dec 14  2021 virtio-win-0.1.208.iso
  • 创建虚拟机磁盘文件存放目录
  • 使用qemu-img命令创建一个qcow2格式的虚拟机磁盘文件
[root@localhost iso]# mkdir /data/kvm
[root@localhost iso]# qemu-img create -f qcow2 /data/kvm/windows2016.qcow2 15G
Formatting '/data/kvm/windows2016.qcow2', fmt=qcow2 size=16106127360 encryption=off cluster_size=65536 lazy_refcounts=off 
[root@localhost iso]# 
ll /data/kvm/
total 5740232
-rw-r--r-- 1 root root     197120 Oct 18 11:32 windows2016.qcow2
[root@localhost iso]# 
  • 使用virt-install命令创建虚拟机
[root@localhost iso]# virt-install --name win_server_2016 --ram 4096 --vcpus 4 --network network=default,model=virtio --disk path=/data/kvm/windows2016.qcow2,format=qcow2,device=disk,bus=virtio --cdrom /data/iso/cn_windows_server_2016_x64_dvd_9718765.iso --disk path=/data/iso/virtio-win-0.1.208.iso,device=cdrom --graphics vnc,listen=0.0.0.0 --os-type windows --os-variant win2k16
WARNING  Unable to connect to graphical console: virt-viewer not installed. Please install the 'virt-viewer' package.
WARNING  No console to launch for the guest, defaulting to --wait -1

Starting install...
Domain installation still in progress. Waiting for installation to complete.

创建的虚拟机启动不了,磁盘启动顺序出现问题,加载顺序错误,导致加载不了,原因是是虚拟机的.xml文件中系统镜像iso标记成了hdb,而驱动文件的iso标记成了hda

[root@localhost iso]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 2     win_server_2016                running
[root@localhost iso]# virsh destroy win_server_2016
Domain win_server_2016 destroyed             #停止虚拟机

[root@localhost iso]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     win_server_2016                shut off

[root@localhost iso]# virsh edit win_server_2016
#修改启动顺序添加<boot dev='cdrom'/>
  <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
    <boot dev='cdrom'/>
    <boot dev='hd'/>
  </os>
#..................................
#修改Windows镜像和virtio镜像顺序,镜像iso改成hda,而驱动文件的iso改成hdb
      <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/data/iso/virtio-win-0.1.208.iso'/>
      <target dev='hdb' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/data/iso/cn_windows_server_2016_x64_dvd_9718765.iso'/>
      <target dev='hda' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>

[root@localhost iso]# virsh start win_server_2016
Domain win_server_2016 started

[root@localhost iso]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 3     win_server_2016                running

[root@localhost iso]#

调出kvm图形化界面

使用 virt-manager 、virt-viewer 或者VNC客户端(realVNC)连接VM启动 Windows 安装

[root@localhost iso]# virt-manager

按照顺序安装windows系统

加载VirtIO Driver,安装磁盘驱动

选择系统对应版本驱动,然后继续安装。一旦安装完成,VM 将重新启动。

出现提示时设置管理员定义密码

找到 “设备管理器-->以太网设备” 更新网卡驱动(需要选择virtio驱动盘)

安装cloudbase-init

允许 Cloudbase-Init 在实例期间运行脚本 启动时,将 PowerShell 执行策略设置为无限制:

C:\powershell C:\Set-ExecutionPolicy Unrestricted

下载并安装Cloudbase-Init ,在配置选项窗口中, 更改以下设置:

  • 用户名:Administrator
  • 用于日志记录的串行端口:COM1
  • Use metadata password 选项取消勾选

安装完成后,在完成 Cloudbase - 初始化安装向导窗口中, 选中运行系统准备复选框,然后单击完成。

在Cloudbase-Init安装路径下的配置文件“C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\cloudbase-init.conf”中执行以下操作:

1、在配置文件最后一行,增加配置项“netbios_host_name_compatibility=false”,使Windows系统的hostname长度支持到63个字符。

2、选择密码注入方式首次登录时,系统默认强制用户修改登录密码,若用户根据个人意愿,不需要修改首次登录使用的密码时,可关闭此功能。

操作方法:增加配置项“first_logon_behaviour=no”。(实际过程还是需要修改该密码)

在cloudbase-init.conf删除以下三行文件,镜像启动后会直接进入以下界面:

username=Admin

groups=Administrators

inject_user_password=true

OpenStack导入镜像

新创建的镜像磁盘文件比较大需要使用qemu-img命令压缩文件,压缩之后大概6G左右,然后传到OpenStac控制节点(在此操作前可以将镜像启动修改密码再压缩作为初始镜像,避免openstack中作为基础镜像创建虚拟机后还需要再次修改密码)

[root@localhost kvm]# qemu-img convert -c -O qcow2 windows2016.qcow2 Windows_server_2016_x64.qcow2
[root@localhost kvm]# ll -h
total 19G
-rw-r--r-- 1 root root  15G Oct 20 15:32 windows2016.qcow2
-rw-r--r-- 1 root root 5.8G Oct 20 15:41 Windows_server_2016_x64.qcow2

在OpenStack控制节点上使用glance命令导入到OpenStack镜像池中

[root@cn2-test-opctr1 ~]# glance image-create --name "windows_server_2016" --file Windows_server_2016_x64.qcow2 --disk-format qcow2 --container-format bare --visibility public --progress
[=============================>] 100%
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | be58055d8b8a7c60c13599cb713d0d2e     |
| container_format | bare                                 |
| created_at       | 2023-10-20T08:08:37Z                 |
| disk_format      | qcow2                                |
| id               | 64779f9b-b4cf-447a-a164-6db5656dae3e |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | windows_server_2016                  |
| owner            | 316945b648aa4b77a155f4ff9ea936e5     |
| protected        | False                                |
| size             | 6503596032                           |
| status           | active                               |
| tags             | []                                   |
| updated_at       | 2023-10-20T08:10:13Z                 |
| virtual_size     | None                                 |
| visibility       | public                               |
+------------------+--------------------------------------+

查看镜像

[root@cn2-test-opctr1 ~]# glance image-list
+--------------------------------------+------------------------+
| ID                                   | Name                   |
+--------------------------------------+------------------------+
| 64779f9b-b4cf-447a-a164-6db5656dae3e | windows_server_2016_v5 |
+--------------------------------------+------------------------+

使用上传的镜像就可以创建Windows虚拟机了

VirtIO驱动官网下载地址:https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/

openstack 官方文档:https://docs.openstack.org/image-guide/windows-image.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值