一. workstdtion
/ vsphere 制作openstack
镜像
note:
演示windows-server2016
版本 / 配置时需要至少给C盘50G
空间
前言:
因为 windows 默认不支持 virtio 驱动,而通过 openstack 管理的虚拟机是需要 virtio 驱动的,所以需要给 windows 安装驱动,包括硬盘驱动和网卡驱动另外还需要安装CloudbaseInitSetup和qemu-ga (qemu-guest-agent) https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/ 以上地址可下载最新稳定版的 virtio-win-x.x.xxx.iso 文件,该文件包含了硬盘驱动和网卡驱动以及
参考:
命令参考:
安装必备软件
1 2
| # 安装必备软件 yum install -y qemu-kvm libvirt virt-install bridge-utils
|
1
.下载Cloudbase-Init
工具 下载Cloudbase-Init
工具安装包。
根据Windows操作系统的不同位数,您需要下载不同版本的Cloudbase-Init工具安装包。
Cloudbase官网:
http://www.cloudbase.it/cloud-init-for-windows-instances/。
Cloudbase-Init分为稳定版本和Beta版本两种。 稳定版本获取路径:
64位:
https://www.cloudbase.it/downloads/CloudbaseInitSetup_Stable_x64.msi
https://cloudbase.it/downloads/CloudbaseInitSetup_0_9_11_x64.msi
https://cloudbase.it/downloads/CloudbaseInitSetup_0_9_9_x64.msi
32位:
https://www.cloudbase.it/downloads/CloudbaseInitSetup_Stable_x86.msi
Beta版本获取路径:
64位:https://www.cloudbase.it/downloads/CloudbaseInitSetup_x64.msi
32位:https://www.cloudbase.it/downloads/CloudbaseInitSetup_x86.msi
virtio-win驱动下载:
https://github.com/virtio-win/kvm-guest-drivers-windows
或
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/
windows-iso镜像下载地址:
https://msdn.itellyou.cn/
首先开启vcenter/vmware虚拟化:
注意事项: 目录建议根目录下创建一个新目录 不能在/root目录执行创建工作目录 会报错 权限错误
下载完成截图:共3
软件
2
. 网卡配置(物理机/ vmware / vcenter
创建)
1 2
| # 备份网卡 cp ifcfg-ens33 ifcfg-br0
|
修改ifcfg-ens33
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 2、BOOTPROTO="dhcp" # 改为 BOOTPROTO="static" 3、BRIDGE=br0 # 调整为网桥模式 其他不做更改 # 保留如下配置其他配置通通删除 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 BRIDGE=br0 UUID=01d75770-3b87-47e3-bbc3-bebaed2293e3 DEVICE=ens33 ONBOOT=yes
|
修改ifcfg-br0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| 1、TYPE="Ethernet" # 修改为TYPE="Bridge" 2、BOOTPROTO="dhcp" # 改为 BOOTPROTO="static" 3、NAME="ens33" # 修改为 NAME="br0" 及 DEVICE="ens33" 修改为 DEVICE="br0" 4、注释 UUID # UUID="a8d78ec6-485c-4d14-aae1-1908bc6b9a61" 5、配置静态IP IPADDR=10.0.0.20 PREFIX=24 GATEWAY=10.0.0.220 DNS1=223.5.5.5 # 完整网卡配置 ------------------------------- TYPE=Bridge PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=br0 # UUID=01d75770-3b87-47e3-bbc3-bebaed2293e3 DEVICE=br0 ONBOOT=yes IPADDR=10.0.0.20 PREFIX=24 GATEWAY=10.0.0.220 DNS1=223.5.5.5 # 重启网卡 systemctl restart network.service
|
如果采用(云主机)创建需要修改网卡( 强烈建议不要使用云主机可能会出现各种抽风现象 )配置 如下配置 如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| [root@images network-scripts]# cat ifcfg-br0 # Created by cloud-init on instance boot automatically, do not edit. # BOOTPROTO=static # 改 DEVICE=br0 # 改 HWADDR=fa:16:3e:90:a8:67 MTU=1500 ONBOOT=yes STARTMODE=auto TYPE=Bridge # 改 USERCTL=no IPADDR=10.0.0.76 # 改 PREFIX=24 # 改 GATEWAY=10.0.0.1 # 改 DNS1=223.5.5.5 # 改 #------------------------------------------------------------------------- [root@images network-scripts]# cat ifcfg-eth0 # Created by cloud-init on instance boot automatically, do not edit. # BOOTPROTO=static DEVICE=eth0 #HWADDR=fa:16:3e:90:a8:67 # 改 MTU=1500 ONBOOT=yes STARTMODE=auto TYPE=Ethernet # 改 USERCTL=no BRIDGE=br0 # 改
|
3
. 查看是否支持虚拟化 (支持)
1 2
| # 查看是否支持虚拟化 grep -E '(vmx|svm)' /proc/cpuinfo
|
4
. 创建镜像文件包
文件存放目录必须为根目录下新建一个目录 切记不能在root
目录否则会报错
各个目录存放文件概览:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| # 关于文件存放目录必须为根目录下新建一个目录 此处如下: mkdir -p /data/windows/data mkdir -p /data/windows/CloudbaseInitSetup
# /data/windows目录存放: [root@cpe-172-100-70-251 windows]# ls -lh 总用量 101M -rw-r--r--. 1 root root 101M 3月 22 13:52 CloudbaseInitSetup.iso drwxr-xr-x. 2 root root 124 3月 22 13:49 data -rw-r--r--. 1 root root 193K 3月 22 13:51 windows_server_2016_x64.qcow2
#/data/windows/data [root@cpe-172-100-70-251 data]# ll 总用量 6801916 -rw-r--r--. 1 qemu qemu 6302720000 3月 22 10:43 cn_windows_server_2016_vl_x64_dvd_11636695.iso -rw-r--r--. 1 qemu qemu 534818816 3月 22 09:18 virtio-win-0.1.229.iso
# /data/windows/CloudbaseInitSetup目录存放 -rw-r--r--. 1 root root 40M 3月 20 2017 CloudbaseInitSetup_0_9_11_x64.msi (本教程使用版本) -rw-r--r--. 1 qemu qemu 61M 3月 22 09:18 CloudbaseInitSetup_1_1_4_x64.msi (稳定版)
|
执行创建镜像文件包:
1 2 3 4 5 6 7 8
| # 创建镜像文件包 :/data/windows/ 目录执行 qemu-img create -f qcow2 windows_server_2016_x64.qcow2 50G # 将CloudbaseInitSetup_1_1_4_x64.msi 配置放在CloudbaseInitSetup.iso中 (执行目录:/data/windows/) note: 此步骤不执行通过vnc细化配置时将无法找到win2k16目录下网卡驱动 # 基于目录CloudbaseInitSetup制作iso镜像命名为CloudbaseInitSetup.iso mkisofs -o CloudbaseInitSetup.iso CloudbaseInitSetup/ # 查看镜像文件包 qemu-img info windows_server_2016_x64.qcow2
|
创建镜像虚拟机
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| # 参数 --name windows_server_2016_x64 #系统命名 --ram 4096 \ #内存大默认M --vcpu=4 \ #CPU核数 --os-type=windows \ #系统类型 --os-variant=win2k16 \ #系统版本 --disk windows_server_2016_x64.qcow2,bus=virtio \ #创建系统盘镜像 格式qcow2 总成 # windows ISO镜像路径 类型为CDROM sata盘 --disk path=/data/cn_windows_server_2016_x64_dvd_9327743.iso,device=cdrom,bus=sata \ # windows 驱动 ISO镜像 路径 类型 --disk path=/data/virtio-win-0.1.190.iso,device=cdrom,bus=sata \ --bridge=br0,model=virtio \ #网络桥接模式 --graphics vnc,listen=0.0.0.0 \ #vnc --noautoconsole # 云主机创建 # --(需要至少60G空间)-------------------------------------------------------------------------------------------- # 执行创建windows镜像 (windows2016) # workstdtion / 云主机 创建方式均可采用 (方式1) virt-install --connect qemu:///system --name windows_server_2016_x64 --vcpus=2 --memory 1024 --os-type=windows --os-variant=win2k16 \ --disk windows_server_2016_x64.qcow2,bus=virtio --disk size=50 \ --disk path=./data/cn_windows_server_2016_x64_dvd_9718765.iso,device=cdrom,size=5 \ --disk path=./data/virtio-win-0.1.229.iso,device=cdrom,bus=sata \ --bridge=br0,model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole --check all=off
# 云主机 创建(参考)(方式2) sudo virt-install --connect qemu:///system --name windows_server_2016_x64 --vcpus=2 --memory 1024 --os-type=windows --os-variant=win2k16 \ --disk windows_server_2016_x64.qcow2,bus=virtio --disk size=50 \ --disk path=./data/cn_windows_server_2016_x64_dvd_9718765.iso,device=cdrom,size=5 \ --disk path=./data/virtio-win-0.1.229.iso,device=cdrom,bus=sata \ --network network=default,model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole # ----------------------------------------------------------------------------------------------------------- # vsphere创建 # ----------------------------------------------------------------------------------------------------------- # windows2016新增驱动(本教程执行命令) 参数:bus=stat >> bus=ide virt-install --connect qemu:///system --name windows_server_2016_x64 --vcpus=2 --memory 2048 --os-type=windows --os-variant=win2k16 \ --disk windows_server_2016_x64.qcow2,bus=virtio --disk size=50 \ --disk path=./data/cn_windows_server_2016_vl_x64_dvd_11636695.iso,device=cdrom,size=5,bus=ide \ --disk path=./data/virtio-win-0.1.229.iso,device=cdrom,bus=ide \ --disk path=./CloudbaseInitSetup.iso,device=cdrom,bus=ide \ # 新增驱动 --bridge=br0,model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole --check all=off
# windows2012r2 qemu-img create -f qcow2 windows_server_2012r2_x64.qcow2 30G
mkisofs -o CloudbaseInitSetup.iso CloudbaseInitSetup/
virt-install --connect qemu:///system --name windows_server_2012r2_x64 --vcpus=2 --memory 4096 --os-type=windows --os-variant=win2k12r2 \ --disk windows_server_2012r2_x64.qcow2,bus=virtio --disk size=30 \ --disk path=./data/cn_windows_server_2012_r2_vl_x64_dvd_2979220.iso,device=cdrom,size=5,bus=ide \ --disk path=./data/virtio-win-0.1.229.iso,device=cdrom,bus=ide \ --disk path=./CloudbaseInitSetup.iso,device=cdrom,bus=ide --bridge=br0,model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole --check all=off
# windows2019 virt-install --connect qemu:///system --name windows_server_2019_x64 --vcpus=2 --memory 2048 --os-type=windows --os-variant=win2k19 \ --disk windows_server_2019_x64.qcow2,bus=virtio --disk size=50 \ --disk path=./data/cn_windows_server_2019_x64_dvd_4de40f33.iso,device=cdrom,size=5,bus=ide \ --disk path=./data/virtio-win-0.1.229.iso,device=cdrom,bus=ide \ --disk path=./CloudbaseInitSetup.iso,device=cdrom,bus=ide \ --bridge=br0,model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole --check all=off
# ----------------------------------------------------------------------------------------------------------- # 查看刚通过镜像启动的虚拟机虚拟机 / 查看--os-variant支持的类型 virsh list --all # 列出所有虚机 osinfo-query os # 查看支持的类型 virsh shutdown ubuntu # 正常关闭虚拟机 virsh undefine name # 删除虚机 virsh start name # 启动指定虚机 virsh reboot name # 重启指定虚机
[root@localhost windows]# osinfo-query os Short ID | Name | Version | ID ----------------------+----------------------------------------------------+----------+--- alpinelinux3.5 | Alpine Linux 3.5 | 3.5 | alpinelinux3.6 | Alpine Linux 3.6 | 3.6 | alpinelinux3.7 | Alpine Linux 3.7 | 3.7 | alpinelinux3.8 | Alpine Linux 3.8 | 3.8 | alt.p8 | ALT p8 StarterKits | p8 | alt.p9 | ALT p9 StarterKits | p9 |
|
参考:
出现下方回显则说明windows镜像创建成功:
5. virt-install
常用命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| # 查看刚通过镜像启动的虚拟机虚拟机 / 查看--os-variant支持的类型 virsh list # 列出正在运行的虚拟机 osinfo-query os # 查看支持的类型 # virt-install常用命令 virsh list --all # 列出所有虚机 virsh start web01 # 启动指定虚机 virsh reboot web01 # 重启指定虚机(关闭状态无法重启) virsh console name # 连接虚拟机 virsh destroy name # 拔掉电源(很少用)
virsh undefine web01 # 删除虚机文件即删除虚拟机(不会删除磁盘文件)
virsh domblklist web01 # 查看虚拟机磁盘信息 virsh dominfo web01 # 查看虚拟机配置信息 virsh domiflist web01 # 查看虚拟网卡信息 virsh dumpxml web01 # 以 xml格式查看虚拟机 virsh define file-name # 导入虚拟机 virsh edit name # 编辑虚拟机配置(一般是在刚定义完虚拟机之后)自带语法检测 virsh domrename old-name new-name # 虚拟机重命名 virsh vncdisplay web01 # 查看vnc端口 virsh autostart name # 虚拟机随机重启 virsh autostart --disable name # 取消虚拟机随机重启
# 图形界面: 通过执行名virt-manager,启动libvirt的图形界面,在图形界面下可以一步一步的创建虚拟机,管理虚拟机,还可以直接控制虚拟机的桌面。 # 命令行: virsh list # 显示本地活动虚拟机 virsh list –all # 显示本地所有的虚拟机(活动的+不活动的) virsh define ubuntu.xml # 通过配置文件定义一个虚拟机(这个虚拟机还不是活动的) virsh start ubuntu # 启动名字为ubuntu的非活动虚拟机 virsh create ubuntu.xml # 创建虚拟机(创建后,虚拟机立即执行,成为活动主机) virsh suspend ubuntu # 暂停虚拟机 virsh resume ubuntu # 启动暂停的虚拟机 virsh shutdown web01 # 正常关闭虚拟机 virsh destroy ubuntu # 强制拔掉电源关闭虚拟机(很少使用)
virsh domname 2 # 显示id号为2的虚拟机名 virsh domid ubuntu # 显示虚拟机id号 virsh domuuid ubuntu # 显示虚拟机的uuid virsh domstate ubuntu # 显示虚拟机的当前状态 virsh dumpxml ubuntu # 显示虚拟机的当前配置文件(可能和定义虚拟机时的配置不同,因为当虚拟机启动时,需要给# 虚拟机分配id号、uuid、vnc端口号等等) virsh setmem ubuntu 512000 # 给不活动虚拟机设置内存大小 virsh setvcpus ubuntu 4 # 给不活动虚拟机设置cpu个数
|
配置snat
使镜像可以访问internet
( 在宿主机执行 )
1 2 3 4 5 6 7
| # 开启 --参数: -s 172.100.70.241 # 镜像ip (或 其他虚拟机) --to-source 172.100.70.251 # 宿主机ip(或 本虚拟机) sysctl net.ipv4.ip_forward=1 sysctl -p iptables -t nat -A POSTROUTING -s 172.100.70.241 -j SNAT --to-source 172.100.70.251
|
二. vnc
细化配置 qemu-img
( 见下章 )
qemu-img
命令参考:
https://zhuanlan.zhihu.com/p/623104229
https://support.huaweicloud.com/bestpractice-ims/ims_bp_0030.html
11
.配置完成后处理镜像(压缩镜像)
参考:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # 参数 -c,表示必须压缩目标镜像(仅限qcow格式)。 -f,第一种镜像格式。 -o, options:选项,是以逗号分隔的格式特定选项列表,格式为name=value格式。使用“-o?”有关使用的格式支持的选项的概述,或参阅下面的格式说明了解详细信息。 ++++++++++++++++++++++++++++++++++ #--sparse=always稀疏拷贝,忽略全0数据 cp --sparse=always ws2012r2.qcow2 ws2012r2-new.qcow2 #--sparse=always稀疏拷贝,忽略全0数据 # raw和qcow2需要转换,这里原本用的qcow2,所以未转换。 # 案例: qemu-img convert -c -f raw -O qcow2 centos7-new.raw centos7-new.qcow2 qemu-img convert -c -O qcow2 centos7-new.qcow2 centos7-mini.qcow2 # 实际操作 qemu-img convert -c -O qcow2 windows_server_2016_x64_new.qcow2 windows_server_2016_x64_min.qcow2 ++++++++++++++++++++++++++++++++++
|
实际操作:
1 2 3 4 5 6
| # raw和qcow2需要转换,这里原本用的qcow2,所以未转换。 # 案例: qemu-img convert -c -f raw -O qcow2 centos7-new.raw centos7-new.qcow2 qemu-img convert -c -f qcow2 -o raw centos7-new.qcow2 centos7-mini.raw # 实际操作 qemu-img convert -c -f raw -O qcow2 windows_server_2016_x64_new.raw windows_server_2016_x64_min.qcow2
|
上传到openstack—skyline
:
参数:--property os_distro=windows --property os_version=2012 --property os_admin_user=Administrator
1 2 3 4
| # qcm2格式 openstack image create --disk-format qcow2 --public --property hw_qemu_guest_agent=yes --property os_distro=windows --property os_version=2012 --property os_admin_user=Administrator --file windows_server_2016_x64.qcow2 windows_server_2016_x64.qcow2 # raw格式 openstack image create --disk-format raw --public --property hw_qemu_guest_agent=yes --property os_distro=windows --property os_version=2012 --property os_admin_user=Administrator --file windows_server_2019_x64.raw windows_server_2019_x64.raw
|
使用命令行创建云主机:
1 2
| # 此命令必须要先将镜像上传到openstack openstack server create --config-drive true --image windows2016min.qcow2 --flavor 9 --password ******20! --network demo-net windows2016_test
|
注: 此时配置完成 集成可修改密码
效果:
扩展: 旧面板 windows 重置密码:
更新云主机元数据,添加change_passwd=True
, 软重启云主机。重启完之后,虚机密码为 admin_pass
指定的密码。密码重置后再将元数据 change_passwd
删掉,或者改为其他值
添加后 >> 软重启 || 软重启之后 >> 删除change_passwd=True 此时密码变为创建云主机时设置的密码即****023!
。
教程结束。