文章 44
评论 0
浏览 14958
虚拟化技术之KVM

虚拟化技术之KVM

二、虚拟化技术之KVM

KVM 是Kernel-based Virtual Machine的简称,是⼀个开源的系统虚拟化 模块,⾃Linux 2.6.20之后集成在Linux的各个主要发⾏版本中,KVM⽬前 已成为学术界的主流 VMM (virtual machine monitor,虚拟机监视器,也称为(hypervisor)之⼀。

KVM (for Kernel-based Virtual Machine) is a full virtualization solution for Linux on x86 hardware containing virtualization extensions (Intel VT or AMD-V).It consists of a loadable kernel module, kvm.ko, that provides the core virtualization infrastructure and a processor specific module, kvm-intel.ko or kvm-amd.ko.

KVM(基于内核的虚拟机)是针对Linux的完全虚拟化解决⽅案,它在x86硬件上包含虚拟化扩展(Intel VT或AMD-V)。 它由提供核⼼虚拟化基础架构的可加载内核模块kvm.ko和处理器特定模块kvm-intel.ko或kvm-amd.ko组成。

image-20210408114459361

#kvm定义
https://www.redhat.com/zh/topics/virtualization/what-is-KVM

#红帽基于KVM对虚拟机的最⼤资源⽀持及限制
https://access.redhat.com/articles/rhel-kvm-limits
#红帽虚拟化⼊⻔指南
https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/virtualization_getting_started_guide/index

#KVM 官⽹
https://www.linux-kvm.org/page/Virtio

#libvirt
https://libvirt.org/

KVM结构图:

image-20210408115231052

⽬前在各⼤公有云⼚商新购买的虚拟机基本运⾏在KVM环境下,就连早期 ⼀直使⽤Xen的AWS也在2017年开始逐渐转换到KVM环境,以下是AWS基 于KVM技术提供的最新实例部分性能。

Instance NamevCPUsRAMEBS BandwidthNetwork Bandwidth
c5.large24 GiBUp to 2.25 GbpsUp to 10 Gbps
c5.xlarge48 GiBUp to 2.25 GbpsUp to 10 Gbps
c5.2xlarge816 GiBUp to 2.25 GbpsUp to 10 Gbps

KVM的虚拟化需要硬件⽀持(如Intel VT技术或者AMD V技术),是基于硬 件的完全虚拟化,⽽Xen早期则是基于软件模拟的半虚拟化,新版本则是⽀ 持基于硬件⽀持的完全虚拟化,但Xen本⾝有⾃⼰的进程调度器,存储管理 模块等,所以代码较为庞⼤,⼴为流传的商业系统虚拟化软件VMware ESXI系列是Full-Virtualization,IBM⽂档:http://www.ibm.com/developerworks/cn/linux/l-using-kvm/

Guest:客⼾机系统,包括CPU(vCPU)、内存、驱动(Console、⽹卡、I/O设备驱动等),被KVM置于⼀种受限制的CPU模式下运⾏。

KVM:运⾏在内核空间,提供 CPU 和内存的虚级化,以及客⼾机的 I/O拦截,Guest的部分I/O被KVM拦截后,交给QEMU处理。

Qemu:纯软件实现的虚拟化模拟器,⼏乎可以模拟任何硬件设备,我们最熟悉的就是能够模拟⼀台能够独⽴运⾏操作系统的虚拟机,虚拟机认为⾃⼰和硬件打交道,但其实是和 Qemu 模拟出来的硬件打交道,Qemu 将这些指令转译给真正的硬件,正因为 Qemu 是纯软件实现的,所有的指令都要经 Qemu 过⼀⼿,性能⾮常低,所以,在⽣产环境中,⼤多数的做法都是配合 KVM 来完成虚拟化⼯作,KVM完成复杂及要求⽐较⾼的设备虚拟化,⽽Qemu完成像⿏标、键盘等设备的虚拟化。

2.1 宿主机环境准备

KVM需要宿主机CPU必须⽀持虚拟化功能,因此如果是在vmware workstation上使⽤虚拟机做宿主机,那么必须要在虚拟机配置界⾯的处理 器选项中开启虚拟机化功能。KVM

2.1.1 CPU开启虚拟化

image-20210408151800293

2.1.2 CPU指令集

2.1.2.1 X86/x86_64 架构

主导桌⾯与服务器芯⽚市场

1968年Intel成⽴,x86架构就是Intel研发的,并且在后来授权给AMD使⽤。
2003年AMD推出64位处理器,并授权给Intel使⽤。

2.1.2.2 ARM 架构

⼿机:华为 ⼩⽶ 三星 苹果
pad:华为 ⼩⽶ 三星 苹果
机顶盒:各电视机顶盒
华为泰⼭服务器-鲲鹏系列ARM系列CPU

2.1.2.3 POWER 架构

由IBM设计,POWER系列微处理器在不少IBM服务器、超级计算机、⼩型计算机及⼯作站中,⼴泛使⽤。

2.1.2.4 RISC-V 架构

https://riscv.org/

当前CPU的两⼤架构是CISC(复杂指令集)和RISC(精简指令集),x86是CISC的代表架构,占领了95%以上的桌⾯计算机和服务器市场。Arm作为 RISC的⼀种,在智能⼿机、可穿戴设备等移动处理器市场占领主要地位, 针对物联⽹、5G、AI新兴领域的应⽤,RISC-V和MIPS两⼤精简指令集架构再次登上历史舞台。

RISC-V:1980年加州⼤学伯克利分校(Berkeley)的David Patterson(⼤卫·帕特森)教授主导了Berkeley RISC项⽬并设计了其第⼀代的处理器RISCI,2010年,Krste Asanovic(克斯特·阿萨诺维奇)教授带领的团队⼤约花了四年时间,设计和开发了⼀套完整的新的指令集,这个新的指令集叫做RISC-V,这是Berkeley从RISC I开始设计的第五代指令集架构,V还代表了变化(variation)和向量(vectors),RISC-V架构使⽤BSD开源协议给予使⽤者很⼤⾃由,允许使⽤者修改和重新发布开源代码,也允许基于开源代码开发商业软件发布和销售。

MIPS是⼀种RISC处理器,它最早是在80年代初期由斯坦福(Stanford)⼤学John L. Hennessy(约翰·亨利斯)教授领导的研究⼩组研制出来的,MIPS是出现最早的商业RISC架构芯⽚之⼀,2018年3⽉21⽇美国计算机协会(ACM)宣布将2017年度的图灵奖颁给了芯⽚界的两位⼤师:曾任斯坦福⼤学校⻓的JohnL. Hennessy和曾任加州⼤学伯克利分校教授的David A. Patterson。

MIPS计算机系统公司创建于1984年,最初的⽬的是将斯坦福⼤学MIPS CPU⼩组的研究成功商业化,商⽤MIPS CPU 增强了内存管理硬件,并于1985年末作为R2000⾯世,其后⼜相继推出了R3000、R4000、R10000等多款处理器。

2.1.2.5 验证开启虚拟化

[15:26:28 root@centos8 ~]#grep -E "vmx|svm" /proc/cpuinfo |wc -l
4

2.1.3 安装KVM工具包

**Ubuntu **

https://ubuntu.com/server/docs/virtualization-libvirt


**CentOS **

[16:02:48 root@centos8 ~]#yum update
[15:32:58 root@centos8 ~]#yum install -y qemu-kvm  libvirt libvirt-client virt-manager virt-install
[15:39:07 root@centos8 ~]#systemctl start libvirtd
# ifconfig virbr0 #验证是否⽣成NAT⽹卡virbr0
[15:39:24 root@centos8 ~]#ifconfig virbr0
virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:8c:03:2f  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[15:39:33 root@centos8 ~]#grep "192.168.122.1" /etc/libvirt/ -R
/etc/libvirt/qemu/networks/autostart/default.xml:  <ip address='192.168.122.1' netmask='255.255.255.0'>
/etc/libvirt/qemu/networks/default.xml:  <ip address='192.168.122.1' netmask='255.255.255.0'>

2.2 创建NAT网络虚拟机

KVM管理工具

libvirt
#使⽤最多的KVM虚拟化管理⼯具和应⽤程序接⼝,即通过libvirt调⽤KVM创建虚拟机,libvirt是KVM通⽤的访问API,其不但能管理KVM,还能管理VMware、Xen、Hyper-V、virtualBox等虚拟化⽅案。

virsh:
#是⼀个常⽤的管理KVM虚拟化的命令⾏⼯具,常⽤于管理运⾏在单个宿主机上的虚拟机,virsh是⼀个使⽤C语⾔编写调⽤libvirt API的虚拟化管理命令⾏⼯具。

virt-manager:
#virt-manager是⼀个虚拟化管理图形软件,其底层也是调⽤libvirt API来完成对虚拟机的操作,包括虚拟机的创建、删除、启动、停⽌以及⼀些简单的监控功能等。

openstack:
#openstack是⼀个开源的虚拟化编排⼯具,常⽤于构建⼤规模的虚拟化环境,⽤于管理成千上万虚拟机的创建、启动、删除等整个⽣命周期。

libvirt结构图

image-20210408154356947

2.2.1 创建磁盘

[15:40:18 root@centos8 ~]#ll /var/lib/libvirt/images/  #默认保存虚拟机磁盘的路径
total 0

#创建⼀个格式为raw⼤⼩为2G的裸磁盘
[16:02:48 root@centos8 ~]#qemu-img create -f raw /var/lib/libvirt/images/centos7-x86.raw 2G
Formatting '/var/lib/libvirt/images/centos7-x86.raw', fmt=raw size=2147483648

#创建⼀个格式为raw⼤⼩为10G的稀疏格式磁盘
[16:03:21 root@centos8 ~]#qemu-img create -f qcow2 /var/lib/libvirt/images/centos7-x86.qcow2 10G
Formatting '/var/lib/libvirt/images/centos7-x86.qcow2', fmt=qcow2 size=10737418240 cluster_size=65536 lazy_refcounts=off refcount_bits=16

[16:04:18 root@centos8 ~]#ll -h /var/lib/libvirt/images/
total 200K
-rw-r--r-- 1 root root 193K Apr  8 16:04 centos7-x86.qcow2
-rw-r--r-- 1 root root 2.0G Apr  8 16:03 centos7-x86.raw

2.2.2 virsh-install命令使用帮助

[16:04:46 root@centos8 ~]#virt-install --help
usage: virt-install --name NAME --memory MB STORAGE INSTALL [options]

#使⽤指定安装介质新建虚拟机。
optional arguments:
 --connect URI         #使⽤ libvirt URI 连接到 hypervisor
 
#通⽤选项:
 -n NAME, --name NAME  #客⼾端事件名称
 --memory MEMORY       #配置虚拟机内存分配。例如::--memory 512,maxmemory=1024
 --vcpus VCPUS         #为虚拟机配置的 vcpus 数。例如:
 --cpu CPU             #CPU 型号及功能。例如:
 --metadata METADATA   #配置虚拟机元数据。例如:

#安装⽅法选项:
--cdrom CDROM    #光驱安装介质
-l  LOCATION, --location LOCATION #安装源(例如:nfs:host:/path、http://host/path
--pxe      #使⽤ PXE 协议从⽹络引导
--import   #在磁盘映像中构建虚拟机
--livecd   #将光驱介质视为 Live CD
-x EXTRA_ARGS, --extra-args EXTRA_ARGS #附加到使⽤ --location 引导的内核的参数
--initrd-inject INITRD_INJECT #使⽤ --location 为 initrd的root添加给定⽂件
--os-variant DISTRO_VARIANT #在其中安装 OS 变体的虚拟机,⽐如'fedora18'、'rhel6'、'winxp' 等等。
--boot BOOT #配置虚拟机引导设置。例如:--boot hd,cdrom,menu=on --boot init=/sbin/init 
--idmap IDMAP  #为LXC容器启⽤⽤⼾名称空间。例如:--idmap

#设备选项:
--disk DISK   #使⽤不同选项指定存储。例如:--disk size=10 (new 10GiB image indefault location)
-w NETWORK, --network NETWORK #配置虚拟机⽹络接⼝。

#虚拟化平台选项:
-v, --hvm  #客⼾端应该是⼀个全虚拟客⼾端
-p, --paravirt #这个客⼾端⼀个是⼀个半虚拟客⼾端
--container    #这台虚拟机需要⼀个容器客⼾端
--virt-type HV_TYPE #要使⽤的管理程序名称(kvm、qemu、xen等等)
--arch ARCH   #模拟的 CPU 构架
--machine MACHINE #要模拟的机器类型

2.2.3 创建NAT网络虚拟机

创建⼀台虚拟机,并使⽤默认的NAT⽹络,可以使虚拟机连接外⽹。

2.2.3.1 上传镜像并安装Centos 7.X虚拟机

#提前上传安装镜像
[16:28:03 root@centos8 ~]#ll /data/ios/CentOS-7-x86_64-Minimal-2009.iso 
-rw-r--r-- 1 root root 1020264448 Apr  8 16:22 /data/ios/CentOS-7-x86_64-Minimal-2009.iso

#创建qcow2格式磁盘
[16:28:15 root@centos8 ~]#qemu-img create -f qcow2 /var/lib/libvirt/images/centos7.qcow2 10G

# 创建默认⽹络虚拟机
[16:29:26 root@centos8 ~]#virt-install --virt-type kvm --name centos7 --ram 1024 --vcpus 2 --cdrom=/data/ios/CentOS-7-x86_64-Minimal-2009.iso --disk path=/var/lib/libvirt/images/centos7.qcow2  --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole 
WARNING  No operating system detected, VM performance may suffer. Specify an OS with --os-variant for optimal results.

Starting install...
Domain installation still in progress. You can reconnect to 
the console to complete the installation process.

2.2.3.2 通过VNC客户端连并安装虚拟机

image-20210408165647201

[16:49:38 root@centos8 ~]#virsh list --all  #第⼀次需要⼿动开启虚拟机
 Id   Name      State
--------------------------
 -    centos7   shut off

[17:05:20 root@centos8 ~]#virsh start centos7 
Domain centos7 started

2.2.3.4 登录到虚拟机

image-20210408170659685

2.2.3.5 通过virt-manager管理虚拟机

[16:50:38 root@centos8 ~]#virt-manager

image-20210408170805067

2.2.3.6 虚拟机查看详情

image-20210408170847749

2.2.3.7 配置虚拟机网卡

image-20210408170938576

2.2.3.8 验证IP地址

安装net-tools命令,并查看本机的当前IP地址是多少,⽬前⾃动获取到的IP 地址是NAT分配的192.168.122.x地址段,此ip地址可以从出外⽹访问但是 ⽆法从外⽹主从访问到此虚拟机上的相关服务。

2.2.3.9 在宿主机验证虚拟机进程

[17:05:34 root@centos8 ~]#ps -ef | grep qemu
qemu       80926       1 17 17:05 ?        00:00:50 /usr/libexec/qemu-kvm -name guest=centos7,debug-threads=on -S -object secret,id=masterKey0,format=raw,file=/var/lib/libvirt/qemu/domain-4-centos7/master-key.aes -machine pc-i440fx-rhel7.6.0,accel=kvm,usb=off,dump-guest-core=off -cpu Skylake-Client-IBRS,ss=on,hypervisor=on,tsc-adjust=on,clflushopt=on,umip=on,md-clear=on,stibp=on,arch-capabilities=on,ssbd=on,xsaves=on,ibpb=on,amd-ssbd=on,rsba=on,skip-l1dfl-vmentry=on,pschange-mc-no=on,hle=off,erms=off,rtm=off,mpx=off -m 1024 -overcommit mem-lock=off -smp 2,sockets=2,cores=1,threads=1 -uuid c7185222-dc9b-4a43-8c3d-49a3b76913fe -no-user-config -nodefaults -chardev socket,id=charmonitor,fd=36,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=delay -no-hpet -no-shutdown -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x4.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x4.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x4.0x2 -blockdev {"driver":"file","filename":"/var/lib/libvirt/images/centos7.qcow2","node-name":"libvirt-2-storage","auto-read-only":true,"discard":"unmap"} -blockdev {"node-name":"libvirt-2-format","read-only":false,"driver":"qcow2","file":"libvirt-2-storage","backing":null} -device ide-hd,bus=ide.0,unit=0,drive=libvirt-2-format,id=ide0-0-0,bootindex=1 -device ide-cd,bus=ide.0,unit=1,id=ide0-0-1 -netdev tap,fd=39,id=hostnet0 -device e1000,netdev=hostnet0,id=net0,mac=52:54:00:27:7d:b7,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -device usb-tablet,id=input0,bus=usb.0,port=1 -vnc 0.0.0.0:0 -device qxl-vga,id=video0,ram_size=67108864,vram_size=67108864,vram64_size_mb=0,vgamem_mb=16,max_outputs=1,bus=pci.0,addr=0x2 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny -msg timestamp=on

2.2.4 创建bridge网络虚拟机

桥接⽹络可以让运⾏在宿主机上的虚拟机使⽤和宿主机同⽹段IP,并且可以 从外部直接访问到虚拟机,⽬前企业中⼤部分场景都使⽤桥接⽹络。

2.2.4.1 创建br0桥接网卡

Ubuntu 18.04创建桥接⽹卡

# cat /etc/netplan/01-netcfg.yaml
# This file describes the network interfaces available on
your system
# For more information, see netplan(5).
network:
	version: 2
	renderer: networkd
	ethernets:
		eth0:
			dhcp4: no
			dhcp6: no
	bridges:
		br0:
			dhcp4: no
			dhcp6: no
			addresses: [172.18.0.20/16]
			gateway4: 172.18.0.1
			nameservers:
				addresses: [223.6.6.6]
			interfaces:
				- eth0

Centos 创建桥接⽹卡

[17:20:32 root@centos8 network-scripts]#nmcli connection reload
[17:20:22 root@centos8 network-scripts]#pwd
/etc/sysconfig/network-scripts
[17:20:24 root@centos8 network-scripts]#cat ifcfg-eth1
TYPE="Ethernet"
BOOTPROTO="static"
NAME="eth1"
DEVICE="eth1"
ONBOOT="yes"
BRIDGE=br0
[17:20:29 root@centos8 network-scripts]#cat ifcfg-br0 
TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=10.0.0.81
NETMASK=255.255.0.0
GATEWAY=10.0.0.1
DNS1=10.0.0.1
[17:20:32 root@centos8 network-scripts]#nmcli connection reload
[17:20:47 root@centos8 network-scripts]#ifconfig br0
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.81  netmask 255.255.0.0  broadcast 10.0.255.255
        inet6 fe80::b8e2:29ff:fe5e:dfce  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:7b:a8:c3  txqueuelen 1000  (Ethernet)
        RX packets 80  bytes 22698 (22.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5  bytes 334 (334.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2.2.4.2 上传镜像并安装虚拟机

#创建系统磁盘:
[17:22:30 root@centos8 network-scripts]#qemu-img create -f qcow2 /var/lib/libvirt/images/centos7-2.qcow2 10G
Formatting '/var/lib/libvirt/images/centos7-2.qcow2', fmt=qcow2 size=10737418240 cluster_size=65536 lazy_refcounts=off refcount_bits=16

#创建基于桥接⽹络的虚拟机
[17:23:07 root@centos8 network-scripts]#virt-install --virt-type kvm --name centos7-bridge --ram 1024 --vcpus 2 --cdrom=/data/ios/CentOS-7-x86_64-Minimal-2009.iso --disk path=/var/lib/libvirt/images/centos7-2.qcow2 --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

image-20210408173418910

2.2.4.3 验证虚拟机桥接网络通信

image-20210408174400200

2.2.4.4 从外部ssh虚拟机

[17:46:58 root@centos8 network-scripts]#ssh 10.0.0.131
The authenticity of host '10.0.0.131 (10.0.0.131)' can't be established.
ECDSA key fingerprint is SHA256:aWfCWaBt1mvugBEHug3/IflRqlxxKu1XNZGwS92R0uY.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.0.0.131' (ECDSA) to the list of known hosts.
root@10.0.0.131's password: 
Last login: Thu Apr  8 17:48:43 2021 from 10.0.0.1
[root@localhost ~]# yum install -y piutils
[root@localhost ~]# lspci 
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
00:02.0 VGA compatible controller: Red Hat, Inc. QXL paravirtual graphic card (rev 04)
00:04.0 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)
00:04.1 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)
00:04.2 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)
00:04.7 USB controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03)
00:05.0 Unclassified device [00ff]: Red Hat, Inc. Virtio memory balloon
00:06.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 03) #virtio为半虚拟化驱动

2.2.5 安装Windows Server虚拟机

virtio 是⼀种 I/O 半虚拟化解决⽅案,是⼀套通⽤ I/O 设备虚拟化的程序, 是对半虚拟化 Hypervisor 中的⼀组通⽤ I/O 设备的抽象,提供了⼀套上层 应⽤与各 Hypervisor 虚拟化设备(KVM,Xen,VMware等)之间的通信 框架和编程接⼝,减少跨平台所带来的兼容性问题,⼤⼤提⾼驱动程序开 发效率,windows 系统需要单独安装virtio驱动,linux系统⾃带virtio驱动。

image-20210408180950542

Virtio 使⽤ virtqueue 来实现 I/O 机制,每个 virtqueue 就是⼀个 承载⼤量数据的队列,具体使⽤多少个队列取决于需求,例如,virtio⽹络驱 动程序(virtio-net)使⽤两个队列(⼀个⽤于接受,另⼀个⽤于发送),⽽ virtio块驱动程序(virtio-blk)仅使⽤⼀个队列。

image-20210408181007642

实现IO虚拟化主要有三种⽅式:全虚拟化、半虚拟化和透传,全虚拟化 Guest OS不会感知到⾃⼰是虚拟机,也⽆需修改Guest OS,但是它的效率 ⽐较低,半虚拟化Guest OS知道⾃⼰是虚拟机,通过Frontend/Backend 驱动模拟实现IO虚拟化,透传就是直接分配物理设备给VM⽤,但是需要解决单个硬件在多个虚拟机共享使⽤的问题。

2.2.5.1 安装windows server 2016

# 创建windows 虚拟机:
# virtio下载地址:
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/
#验证镜像
[18:20:00 root@centos8 ios]#tree /data/
/data/
└── ios
    ├── CentOS-7-x86_64-Minimal-2009.iso
    ├── cn_windows_server_2008_r2_standard_enterprise_datacenter_and_web_with_sp1_vl_build_x64_dvd_617396.iso
    ├── cn_windows_server_2016_x64_dvd_9718765.iso
    ├── virtio-win-0.1.141_amd64.vfd
    ├── virtio-win-0.1.185_amd64.vfd
    └── virtio-win-0.1.189_amd64.vfd
#创建磁盘
[18:43:00 root@centos8 ios]#qemu-img create -f qcow2 /var/lib/libvirt/images/win-2008.qcow2 100G
Formatting '/var/lib/libvirt/images/win-2008.qcow2', fmt=qcow2 size=107374182400 cluster_size=65536 lazy_refcounts=off refcount_bits=16

#开始安装
[18:48:21 root@centos8 ios]#virt-install --virt-type kvm --name win_2008 --ram 1024 --vcpus=2 --os-type=windows --cdrom=/data/ios/cn_windows_server_2008_r2_standard_enterprise_datacenter_and_web_with_sp1_vl_build_x64_dvd_617396.iso --disk path=/var/lib/libvirt/images/win-2008.qcow2  --disk path=/data/ios/virtio-win-0.1.141_amd64.vfd,device=floppy --network bridge=br0,model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole 
WARNING  OS name 'windows' is deprecated, using 'winxp' instead. This alias will be removed in the future.

Starting install...
Domain installation still in progress. You can reconnect to 
the console to complete the installation process.

2.2.5.2 安装过程

找不到安装磁盘,需要单独加载相应的驱动:

image-20210408185213814

浏览驱动:

image-20210408185227113

从指定系统版本加载驱动

image-20210408185242016

将⽹络驱动和块设备驱动都加载⼀遍:

image-20210408185252417

2.2.5.3 验证Windows virtio驱动

image-20210408191032076

2.2.6 安装Windows win10虚拟机

#创建磁盘文件
[19:13:13 root@centos8 ios]#qemu-img create -f qcow2 /var/lib/libvirt/images/win10.qcow2 100G
Formatting '/var/lib/libvirt/images/win10.qcow2', fmt=qcow2 size=107374182400 cluster_size=65536 lazy_refcounts=off refcount_bits=16
#安装
[19:13:31 root@centos8 ios]#virt-install --virt-type kvm --name win10 --ram 1024 --vcpus 2 --os-type=windows --cdrom=/data/ios/cn_windows_10_business_editions_version_1909_updated_jan_2020_x64_dvd_b3e1f3a6.iso --disk path=/var/lib/libvirt/images/win10.qcow2,format=qcow2,bus=virtio --disk path=/data/ios/virtio-win-0.1.189_amd64.vfd,device=floppy --network bridge=br0,model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole 
WARNING  OS name 'windows' is deprecated, using 'winxp' instead. This alias will be removed in the future.

Starting install...
Domain installation still in progress. You can reconnect to 
the console to complete the installation process.

2.2.7 虚拟机管理命令virsh

# virsh list #列出当前开机的
# virsh list --inactive #列出关闭的虚拟机
# virsh list --all #列出所有
# virsh shutdown CentOS-7-x86_64 #正常关机
# virsh start CentOS-7-x86_64 #正常开机
# virsh destroy centos7 #强制停⽌/关机
# virsh undefine Win_2008_r2-x86_64 #强制删除
# virsh autostart centos7 #设置当前虚拟机开机⾃启动

2.2.8 快速创建虚拟机

[root@s2 ~]# cd /var/lib/libvirt/images/
# cp centos1.qcow2 centos1-bak.qcow2
# cp centos1-bak.qcow2 centos2.qcow2
# virt-install --virt-type kvm \
--name centos2 \
--ram 1024 \
--vcpus 2 \
--cdrom=/usr/local/src/CentOS-7-x86_64-Minimal-1908.iso \
--disk path=/var/lib/libvirt/images/centos2.qcow2 \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole #虚拟机不要开始安装过程,即虚拟机启动后⽴即强制关系重新启动即可进⼊到虚拟机系统

标题:虚拟化技术之KVM
作者:Carey
地址:HTTPS://zhangzhuo.ltd/articles/2021/05/17/1621240978066.html

生而为人

取消