KVM自Linux 2.6.20版本后就直接整合到Linux内核,它依托CPU虚拟化指令集实现高性能的虚拟化支持。它与Linux内核高度整合,因此在性能、安全性、兼容性、稳定性上都有很好的表现。 在KVM环境中运行的每个虚拟化操作系统都将表现为单个独立的系统进程。因此它可以很方便地与Linux系统中的安全模块进行整合(SELinux),可以灵活的实现硬件资源的管理和分配,KVM虚拟化的架构图如下:
下面开始安装,在 Centos 的光盘中,已经提供了安装 KVM 所需软件,只需要部署基于光盘镜像的本地 yum 源,直接使用 yum 安装软件即可: yum groupinstall -y “GNOME DeskTop” // 安装 GNOME 桌面环境,如果是的话,则可以省略
代码语言:javascript复制yum -y install qemu-kvm // kvm 模块
yum -y install qemu-kvm-tools // kvm 调试工具,可不安装
yum -y install virt-install // 构建虚拟机的命令行工具
yum -y install qemu-img // qemu 组件,创建磁盘、启动虚拟机等
yum -y install bridge-utils // 网络支持工具
yum -y install libvirt // 虚拟机管理工具
yum -y install virt-manager // 图形界面管理虚拟机
注意:在使用 yum 安装完毕桌面后执行“ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target” 命令,将系统默认运行的 target 更改为 graphical.targe。重启后将进入图形界面,若不执行,则重启可能会报错。 安装完毕后,重启系统,查看 CPU 是否支持虚拟化:
代码语言:javascript复制[root@localhost /]# cat /proc/cpuinfo | grep vmx # 对于 Intel 的服务器可以使用此命令查看,只要有输出就说明 CPU 支持虚拟化
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36
.........省略部分
对于 AMD 服务器可以使用如下命令查看:
[root@localhost /]# cat /proc/cpuinfo | grep smv
检查 KVM 模块是否安装:
代码语言:javascript复制[root@localhost /]# lsmod | grep kvm
kvm_intel 170181 0
kvm 554609 1 kvm_intel
irqbypass 13503 1 kvm
开启服务:
代码语言:javascript复制[root@localhost /]# systemctl start libvirtd
[root@localhost /]# systemctl enable libvirtd
配置网络: 在libvirt中运行KVM网络有两种方法:NAT和Bridge,默认是NAT。 关于两种模式的说明如下: (1)NAT模式:也是用户模式,数据包由NAT方式通过主机的接口进行传送,可以访问外网,但是无法从外部访问虚拟机网络,所以一般不会用到。 (2)Bridge:也就是桥接模式,这种模式允许虚拟机像一个独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持,一般有线网卡都支持。 这里以Bridge(桥接模式)为例:
代码语言:javascript复制[root@localhost /]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=none // 此处改为 none
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=b9f932a2-0dad-4119-a05e-e03322ff94d1
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0 // 在末尾添加此行
代码语言:javascript复制[root@localhost /]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-br0
[root@localhost /]# vim /etc/sysconfig/network-scripts/ifcfg-br0 # 复制一个网卡配置,并修改
TYPE=Bridge // 将类型改为桥接
BOOTPROTO=static // 静态
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br0 // 网卡名称
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.1.10 // 配置 IP 及网关
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
重启 network 服务:
代码语言:javascript复制[root@localhost /]# /etc/init.d/network restart
Restarting network (via systemctl): [ OK ] // 输出为 OK 表示成功,反之则为 no 失败。
KVM 管理:
代码语言:javascript复制[root@localhost /]# virt-manager # 打开 图形化虚拟机管理软件
创建存储池:
以同样的操作创建一个镜像存储池,命名为 iso,目录为/data_kvm/iso/,然后将系统光盘上传到此目录:
在 test 上创建存储卷
KVM虚拟化平台至此已部署完成,下面附加一些常用的管理命令:
代码语言:javascript复制[root@localhost ~]# virsh -h #查看命令帮助
[root@localhost ~]# ls /etc/libvirt/qemu #查看KVM的配置文件存放目录
(test01.xml是虚拟机系统实例的配置文件)
networks test01.xml
[root@localhost ~]# virsh list --all #查看虚拟机状态
Id 名称 状态
----------------------------------------------------
2 test01 running
[root@localhost ~]# virsh shutdown test01 #关闭虚拟机
[root@localhost ~]# virsh start test01 #开启虚拟机
[root@localhost ~]# virsh destroy test01 #强制关机
[root@localhost ~]# virsh create /etc/libvirt/qemu/test01.xml #通过配置文件启动虚拟机
[root@localhost ~]# virsh suspend test01 #挂起虚拟机
[root@localhost ~]# virsh resume test01 #从挂起状态恢复运行虚拟机
[root@localhost ~]# virsh autostart test01 #设置虚拟机伴随宿主机自动启动
#虚拟机的删除与添加:
[root@localhost ~]# virsh dumpxml test01 > /etc/libvirt/qemu/test02.xml #导出虚拟机配置
#删除虚拟机:
[root@localhost ~]# virsh shutdown test01
[root@localhost ~]# virsh undefine test01
[root@localhost ~]# virsh list --all #查看虚拟机是否被删除
Id 名称 状态
----------------------------------------------------
#通过备份的配置文件重新定义虚拟机:
[root@localhost ~]# cd /etc/libvirt/qemu/
[root@localhost qemu]# mv test02.xml test01.xml
[root@localhost qemu]# virsh define test01.xml
#修改虚拟机配置(内存大小等)信息:
[root@localhost qemu]# vim /etc/libvirt/qemu/test01.xml
[root@localhost qemu]# virt-df -h test01 #在宿主机上查看虚拟机磁盘信息
克隆虚拟机:
[root@localhost qemu]# virt-clone -o test01 -n test02 -f /kvm/store/test02.qcow2
#将test01克隆为test02
[root@localhost qemu]# virsh list --all #查看现有虚拟机
Id 名称 状态
----------------------------------------------------
- test01 关闭
- test02 关闭
虚拟机创建快照:
KVM虚拟机要使用快照功能,磁盘格式必须为qcow2
[root@localhost qemu]# virsh snapshot-create test01 #对虚拟机test01创建快照
[root@localhost qemu]# virsh snapshot-list test01 #查看快照信息
名称 生成时间 状态
------------------------------------------------------------
1560191837 2019-06-11 02:37:17 0800 shutoff
[root@localhost qemu]# virsh snapshot-revert test01 1560191837
#恢复虚拟机状态至1560191837
[root@localhost qemu]# virsh snapshot-delete test01 1560191837 #删除快照