一、KVM安装
在win10操作系统上使用 VMware WorkStation 创建Linux虚拟机,并在此虚拟机中安装 KVM,然后使用KVM创建虚拟机
环境准备
- win10 的 CPU 必须支持虚拟化技术,并在 BIOS设置为启动
Virtualization Technology Enabled
-
VMware WorkStation 中创建Linux虚拟机 2U2G、SCSI 20G、NAT,镜像文件:CentOS-7-x86_64-Minimal-1908.iso -
安装完成后,修改虚拟化引擎的配置,即开启宿主机CPU虚拟化
4. 启动虚拟机,检查CPU特性,即验证CPU是否支持虚拟化
[root@kvm ~]
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec arat spec_ctrl intel_stibp flush_l1d arch_capabilities
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec arat spec_ctrl intel_stibp flush_l1d arch_capabilities
[root@kvm ~]
Virtualization: VT-x
[root@kvm ~]
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec arat spec_ctrl intel_stibp flush_l1d arch_capabilities
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec arat spec_ctrl intel_stibp flush_l1d arch_capabilities
以上几种均可,只要执行完后有输出,则说明虚拟化开启成功
- 查看是否加载KVM模块
[root@kvm ~]
kvm_intel 183621 0
kvm 586948 1 kvm_intel
irqbypass 13503 1 kvm
表明已经加载,如果没有加载则执行以下命令加载KVM
[root@kvm ~]
- 安装KVM相关软件包
[root@kvm ~]
[root@kvm ~]
二、使用KVM创建虚拟机
(一)使用virt-manager创建虚拟机
virt-manager主要功能:
- 定义和创建虚拟机
- 硬件管理
- 性能监视
- 虚拟机的保存和恢复、暂停和继续、关闭和启动
- 控制台
- 在线和离线迁移
启动方法:
- GNOME 桌面环境下,Applications菜单 → System Tools → Virtual Machine Manager
- 在SSH会话中输入 virt-manager
【示例】 使用virt-manager创建虚拟机并使用vnc进行连接
创建存放镜像的文件夹
[root@kvm ~]
上传镜像文件
[root@kvm iso]
CentOS-7-x86_64-Minimal-1708.iso
开启X11转发功能
[root@kvm ~]
X11Forwarding yes
[root@kvm ~]
运行 virt-manager
[root@kvm iso]
弹出如下GUI窗口
创建虚拟机
或者: 进入创建虚拟机向导界面
#选择安装方法
内存、CPU分配 磁盘分配 这里磁盘分配的大小是受宿主机磁盘大小的限制
为虚拟机命名并开始安装 此时,便开始安装
如果在安装前有其它的调整设置,需要勾选上图的 Customize configuration brfore install
此时不会直接进入安装界面,而是进入配置调整界面
根据需求进行相应的调整,比如磁盘,内存,网络设置等,
这里对 Display Spice 配置项进行说明:
Display Spice 配置中主要有两个配置项:Spice server 和 VNC server
Spice 和 VNC是一个多通道的远程桌面协议,提供与虚拟桌面设备的远程交互实现,主要应用在桌面虚拟化,支持图像,2D传输,720P视频播放。主要目标是为qemu虚拟机提供高质量的远程桌面访问,它致力于克服传统虚拟桌面的一些弊端,并且强调用户体验
如果设置了此选项,同时需要在宿主机上安装相应应用或程序,方可使用其中的某种方式访问创建好的虚拟机(客户机),对于安装前未配置此项,安装后也可在客户机虚拟机的xml配置文件中进行配置。
这里,选择使用VNC的方式:
进入安装界面
在生产环境中多使用 kickstart 回答文件进行定制化快速批量安装
在以上界面按下Tab键,输入以下内容:
ks=URI (生产环境中一般为web服务器中kickstart资源文件地址)
根据引导,进行语言选择、分区等相关设置后,进行安装
说明:一般来说虚拟(云)主机都没有swap分区,swap分区是基于硬盘的,而虚拟(云)主机的硬盘都是虚拟出来的,性能较物理硬盘差(读写速度差),所以此时使用虚拟硬盘做交换分区来虚拟内存,反而会适得其反,所以一般不会为KVM虚拟机划分swap分区。 安装完后进行重启,便可以正常登陆
配置网卡
这里是使用dhcp自动生成的ip 可以看到安装好的kvm客户机虚拟机可以与宿主虚拟机和外网互通
此时再看宿主机的网卡信息
[root@kvm ~]
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:be:42:4d brd ff:ff:ff:ff:ff:ff
inet 192.168.1.22/24 brd 192.168.1.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:febe:424d/64 scope link
valid_lft forever preferred_lft forever
3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 52:54:00:c5:79:09 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:c5:79:09 brd ff:ff:ff:ff:ff:ff
12: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master virbr0 state UNKNOWN group default qlen 1000
link/ether fe:54:00:12:90:4f brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:fe12:904f/64 scope link
valid_lft forever preferred_lft forever
可以看到此时宿主机除了自己使用的ens33网卡,又多了一个virbr0网卡
这是因为我们在宿主虚拟机上创建客户虚拟机的时候选择为NAT网络,那么便会自动生成一个virbr0这样的桥接设备 该网卡信息对应的文件为:
[root@kvm ~]
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
virsh net-edit default
or other application using the libvirt API.
-->
<network>
<name>default</name>
<uuid>c80f5bf6-317f-4c28-9f10-266d944b75ef</uuid>
<forward mode='nat'/>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:c5:79:09'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
</network>
[root@kvm ~]
Name State Autostart Persistent
----------------------------------------------------------
default active yes yes
virbr0 是一种虚拟网络接口,这是由于安装和启用了 libvirt 服务后生成的,libvirt 在服务器(host,也称宿主机)上生成一个 virtual network switch (virbr0),host 上所有的虚拟机(guests,也称客户机)通过这个 virbr0 连起来。默认情况下 virbr0 使用的是 NAT 模式(采用 IP Masquerade),所以这种情况下 guest(客户机) 通过 host (宿主机)才能访问外部。
在宿主机上安装VNC服务
[root@kvm ~]
启动 vnc 服务
[root@kvm ~]
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
[root@kvm ~]
New 'kvm:4 (root)' desktop is kvm:4
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/kvm:4.log
修改客户虚拟机配置文件
[root@kvm ~]
<graphics type='vnc' port='5910' autoport='no' listen='0.0.0.0'>
<listen type='address' address=0.0.0.0 />
</graphics>
重启libvirt服务及客户机虚拟机
[root@kvm ~]
[root@kvm ~]
[root@kvm ~]
[root@kvm ~]
tcp LISTEN 0 1 *:5910 *:* users:(("qemu-kvm",pid=86642,fd=23))
在windos上安装VNC Viewer 程序
连接配置 连接
宿主虚拟机的防火墙要放通
连接成功
(二)使用图形化界面创建虚拟机
[root@kvm ~]
[root@kvm ~]
[root@kvm ~]
其余步骤同 virt-manager 安装步骤
(三)virt-install 创建虚拟机
基于光盘的安装
[root@kvm ~]
> --name template \
> --ram=512 \
> --vcpus=1 \
> --cdrom=/home/iso/CentOS-7-x86_64-Minimal-1708.iso \
> --disk path=/var/lib/libvirt/images/template.qcow2,format=qcow2,size=5 \
> --network network=default \
> --graphics vnc,listen=0.0.0.0 \
> --os-type=linux \
> --os-variant=rhel7
> --virt-type kvm
--------------------------------------------------------------------------------------------------
[root@kvm ~]
[root@kvm images]
Formatting 'template_disk1.qcow2', fmt=qcow2 size=2147483648 encryption=off cluster_size=65536 lazy_refcounts=off
[root@kvm images]
-rw-r--r--. 1 root root 193K May 6 17:53 template_disk1.qcow2
[root@kvm images]
image: template_disk1.qcow2
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
如果是使用该磁盘镜像作为磁盘,那么上面的参数项为:
--disk path=/var/lib/libvirt/images/template_disk1.qcow2
--------------------------------------------------------------------------------------------------
因为配置了VNC,如果在宿主机上已经安装并启动了 vncserver 服务,并且在windows 上安装了vnc客户端软件,那么就可以使用windows上的vnc客户端软件使用 宿主机IP:5900 进行桌面连接(默认为5900端口),进行KVM虚拟机的后续操作系统的安装
执行后过一会会自动弹出 virt-viewer(如果未安装virt-viewer,则不会自动弹出,那么就需要使用安装的virt-manager或者配置好的 VNC 进入安装界面进行安装)安装操作系统界面,这时需要手工进行安装 如果希望安装操作系统这一步也不需要人工干预安装,则可以使用下面这种方式(基于Kickstart回答文件的安装方式)
(四)基于Kickstart安装方式
Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录典型的需要人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在安装过程中(不只局限于生成Kickstart安装文件的机器)出现要填写参数的情况,安装程序首先会去查找Kickstart生成的文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便需要安装者手工干预了。所以,如果Kickstart文件涵盖了安装过程中可能出现的所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启系统,并结束安装。
如果在安装过程中出现要填写参数的情况,安装程序首先会去查找Kickstart生成的文件,如果找到合适的参数,就采用所找到的参数,如果没有找到合适的参数,便需要安装者手工干预
[root@kvm ~]
> --name template \
> --ram=512 \
> --vcpus=1 \
> --disk path=/var/lib/libvirt/images/template.qcow2,size=5 \
> --network network=default \
> --graphics vnc,listen=0.0.0.0 \
> --os-type=linux \
> --os-variant=rhel7
> --location /iso/CentOS-7-x86_64-Minimal-1708.iso \
> --extra-args="ks=http://Web Server IP/xxx"
(五)基于PXE安装
实现原理:将手动安装的所有的详细步骤记录到一个文件中,然后有一种软件通过读取这个文件就可以实现自动化安装系统。
这个工具叫做Kickstart,kickstart是RedHat公司开源的工具,所以对Centos兼容性最好。注意Kickstart是一个项目的名称,没有这个软件。
cobbler是对kickstart的所有组件的封装。本质上就是网页版的Kickstart
PXE原理
PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站(主机)通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。
PXE的工作过程:
PXE Client 从自己的PXE网卡启动,向本网络中的DHCP服务器索取IP; DHCP 服务器返回分配给客户机的IP 以及PXE文件的放置位置(该文件一般是放在一台TFTP服务器上) ; PXE Client 向本网络中的TFTP服务器索取pxelinux.0 文件; PXE Client 取得pxelinux.0 文件后之执行该文件; 根据pxelinux.0 的执行结果,通过TFTP服务器加载内核和文件系统 ; 进入安装画面, 此时可以通过选择HTTP、FTP、NFS 方式之一进行安装;
用法:
[root@kvm ~]
> --network=birdge:br0 --pxe --graphics spice \
> --name template1 --ram=512 --vcpus=1 \
> --os-type=linux --os-variant=rhel7 \
> --disk path=/var/lib/libvirt/images/template.qcow2,size=5
但是还是需要进行后续的手动安装操作系统
所以更好的方式是将 Kickstart 和 PXE 方式结合使用
PXE+Kickstart 无人值守安装操作系统完整过程如下: PXE-Kickstart批量安装系统部署搭建
三、KVM虚拟机的几种连接方式
图形界面:
- GNOME
- vnc
- virt-manager
- virt-viewer
命令行界面:
-
ssh -
命令行版控制台:virsh console domain 需要修改KVM虚拟机的内核参数: (1)在KVM虚拟机上执行命令 grubby --update-kernel=ALL --args="console=ttyS0,115200n8" (2)重启 kvm 虚拟机 reboot (3)此时便可以在宿主机上使用 virsh console domain 命令行方式连接KVM虚拟机 (使用【ctrl】+ ] 组合键退出console界面)
|