kvm是目前主流的全虚拟化架构,是基于硬件的完全虚拟化。当前集成在Linux 的各个主要发行版本中,使用 Linux 自身的调度器进行管理。
一:KVM 服务环境安装
1、检测当前环境是否支持KVM安装
KVM 是基于 x86 虚拟化扩展(Intel VT 或者 AMD-V) 技术的虚拟机软件,所以查看 CPU 是否支持 VT 技术,就可以判断是否支持KVM。有返回结果,如果结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的。
# cat /proc/cpuinfo | egrep 'vmx|svm'
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb invpcid_single intel_pt ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear spec_ctrl intel_stibp flush_l1d
......
2、通过 yum 安装 kvm 基础包和管理工具
# yum install qemu* virt* kvm* -y
qemu-kvm # KVM基础模块
qemu-kvm-tools # KVM调试工具,可不安装
virt-install # 构建虚拟机的命令行工具
qemu-img # qemu组件,创建磁盘、启动虚拟机等
bridge-utils # 网络支持工具
libvirt # 虚拟机管理工具
virt-manager # 图形界面管理虚拟机
libguestfs-tools # 用来管理虚拟机磁盘格式
# 查看KVM模块是否被正确加载
# lsmod | grep kvm
kvm_intel 188688 8
kvm 636965 1 kvm_intel
irqbypass 13503 5 kvm
3、kvm服务开启
# systemctl start libvirtd.service
# systemctl enable libvirtd.service
# systemctl status libvirtd
● libvirtd.service - Virtualization daemon
Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-11-06 15:38:37 CST; 1 weeks 5 days ago
Docs: man:libvirtd(8)
https://libvirt.org
Main PID: 25082 (libvirtd)
Tasks: 20 (limit: 32768)
CGroup: /system.slice/libvirtd.service
├─25082 /usr/sbin/libvirtd
├─25175 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
└─25176 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
......
二、KVM虚拟机网络模式
1、在libvirt中运行KVM网络有两种方法:NAT和Bridge,默认是NAT。
关于两种模式的说明如下:
- NAT模式:也是用户模式,数据包由NAT方式通过主机的接口进行传送,可以访问外网,但是无法从外部访问虚拟机网络,所以一般不会用到。
- Bridge:也就是桥接模式,这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持,一般有线网卡都支持。
2、以桥接为例对宿主网卡进行配置
# 物理网卡
# vim /etc/sysconfig/network-scripts/ifcfg-enp1s0
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO=none
NM_CONTROLLED=no
DEFROUTE="yes"
NAME="enp1s0"
DEVICE="enp1s0"
BRIDGE=br0
# 桥接网卡
# vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.178
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
DNS2=8.8.8.8
3、配置路由转发
# vim /etc/sysctl.conf
# Controls IP packet forwarding
net.ipv4.ip_forward = 0
修改为
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
# sysctl -p
三、安装KVM主机
1、安装虚拟机有文本和命令行两种方式,本次以命令行方式进行安装
# virt-install --virt-type=kvm --name vm1 --ram=512 --vcpus=2 --location=/data/iso/CentOS-6.9-x86_64-bin-DVD1.iso --disk path=/data/kvm/vm1.qcow2,size=20 --network bridge=br0 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"
# virsh console vm1 # 本地console连接上vm1 虚拟机可进入到内部,比如配置网卡信息
2、virt-install 常用参数说明
--name name
--ram 以M为单位指定分配给虚拟机的内存大小
--vcpus 分配给虚拟机的核数
--disk 指定作为客户机存储的媒介 size以G为单位的存储
--location 客户虚拟机kernel+initrd 安装源,选择本地镜像路径
--network 虚拟机网络配置
# 其中子选项,bridge=br0 指定桥接网卡的名称
--graphics none 指定没有控制台被分配给客户机
--extra-args 根据不同的安装方式设置不同的额外选项
四、虚拟机克隆
1、虚拟机克隆
- 图形克隆
通过 virt-manager --> 选择clone --> 右键点kvm1 --> 修改克隆后的名字或其它参数 --> 点clone
- 文本克隆
# 拷贝配置文件和磁盘文件
# cp /etc/libvirt/qemu/vm1.xml /etc/libvirt/qemu/kvm2.xml
# cp /data/kvm/vm1.img /data/kvm/kvm2.img
# 修改拷贝的配置文件
# vim /etc/libvirt/qemu/kvm2.xml
''' 以下三个地方都需要修改
虚拟机名称
虚拟机镜像路径
虚拟机mac地址
'''
# 保存后,使用virsh list --all查看不到的,需要define一下
# virsh define /etc/libvirt/qemu/kvm2.xml
- 命令行克隆
# 暂停原始虚拟机
# virsh shutdown vm1
# virt-clone -o vm1 -n vm2 -f /data/kvm/vm2.qcow2 -m 00:00:00:00:00:01
# virt-clone -o vm1 -n vm2 --file /data/kvm/vm2.qcow2 --nonsparse
2、virt-clone 常用参数说明
--version 查看版本
-h,--help 查看帮助信息
--connect=URI 连接到虚拟机管理程序 libvirt 的URI
-o 原始虚拟机名称 原始虚拟机名称,必须为关闭或者暂停状态。
-n 新虚拟机名称 –name 新虚拟机名称。
--auto-clone 从原来的虚拟机配置自动生成克隆名称和存储路径。
-u NEW_UUID,--uuid=NEW_UUID 克隆虚拟机的新的UUID,默认值是一个随机生成的UUID。
-m NEW_MAC,--mac=NEW_MAC 设置一个新的mac地址,默认为随机生成 MAC。
-f NEW_DISKFILE, --file=NEW_DISKFILE 为新客户机使用新的磁盘镜像文件地址。
--force-copy=TARGET 强制复制设备。
--nonsparse 不使用稀疏文件复制磁盘映像
五、虚拟机迁移
- 冷迁移
# 虚拟机vm1是开启状态
# 保存当前的运行状态
# virsh save vm1 /etc/libvirt/qemu/vm1.xml.save
Domain vm1 saved to /etc/libvirt/qemu/vm1.xml.save
# scp或者rsync把相关的文件都拷贝到被迁移的宿主机
# scp /etc/libvirt/qemu/vm1.xml.save 172.16.2.136:/etc/libvirt/qemu/
# scp /etc/libvirt/qemu/vm1.xml 172.16.2.136:/etc/libvirt/qemu/
# scp /var/lib/libvirt/images/vm1.img 172.16.2.136:/var/lib/libvirt/images/
# 到136(也就是迁移的目标宿主机)上操作
# virsh define /etc/libvirt/qemu/vm1.xml --define一下,然后就可以用virsh list --all查看到
# virsh restore /etc/libvirt/qemu/vm1.xml.save
六、virsh 基础命令
# virt-top 显示虚拟机内存和cpu的使用情况
# virt-df vm1 显示虚拟机分区信息
# virsh list --all 列出所有虚拟机
# virsh dominfo vm1 显示虚拟机信息
# virsh start vm1 启动虚拟机
# virsh shutdown vm1 关闭虚拟机(shutodwn)
# virsh destroy vm1 强制断电关机
# virsh undefine vm1 删除虚拟机
# virsh autostart vm1 设置虚拟机(kvm-1)跟随系统自启
# virsh autostart --disable vm1 关闭虚拟开启自启
# virsh console vm1 通过控制窗口登录虚拟机