KVM 产品简介
公司部分 Linux 服务器利用率不高,为充分利用这些 Linux 服务器,可以部署 KVM 虚拟化平台,在物理机上运行多个业务系统(虚拟机)。例如,在运行 Nginx 的服务器上部署 KVM,然后在虚拟机上运行 Tomcat,MySQL等企业服务。
KVM:就是Keyboard Video Mouse的缩写。KVM 交换机通过直接连接键盘、视频和鼠标 (KVM) 端口,让您能够访问和控制计算机。KVM 技术无需目标服务器修改软件。这就意味着可以在 BIOS 环境下,随时访问目标计算机。KVM 提供真正的主板级别访问,并支持多平台服务器和串行设备。
KVM 技术已经从最初的基础SOHO办公型,发展成为企业 IT 基础机房设施管理系统。可以从kvm 客户端管理软件轻松的直接访问位于多个远程位置的服务器和设备。KVM over IP 解决方案具备完善的多地点故障转移功能、符合新服务器管理标准 (IPMI) 的直接界面,以及将本地存储媒体映射至远程位置的功能。
基本信息
-
中文名称
KVM
-
全称
Keyboard Video Mouse
-
本质
计算机技术
-
优点
支持多平台服务器和串行设备
-
地位
网络中的管理设备
● 功能
支持串口overIP远程调试串口设备
虚拟化
虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。
物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。
那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢?
这个主要是通过一个叫做 Hypervisor 的程序实现的。
根据 Hypervisor 的实现方式和所处的位置,虚拟化又分为两种:
1型虚拟化和2型虚拟化
1型虚拟化
Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行。Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。Xen 和 VMWare 的 ESXi 都属于这个类型。

2型虚拟化
物理机上首先安装常规的操作系统,比如 Redhat、Ubuntu 和 Windows。Hypervisor 作为 OS 上的一个程序模块运行,并对管理虚拟机进行管理。KVM、VirtualBox 和 VMWare Workstation 都属于这个类型。

理论上讲:
1型虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比2型要高;
2型虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。
KVM是什么?
KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是一个 Linux 的一个内核模块,该内核模块使得 Linux 变成了一个 Hypervisor:
它由 Quramnet 开发,该公司于 2008年被 Red Hat 收购。
它支持 x86 (32 and 64 位), s390, Powerpc 等 CPU。
它从 Linux 2.6.20 起就作为一模块被包含在 Linux 内核中。
它需要支持虚拟化扩展的 CPU。
它是完全开源的。
KVM架构
KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能。
但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。
Guest:客户机系统,包括CPU(vCPU)、内存、驱动(Console、网卡、I/O 设备驱动等),被 KVM 置于一种受限制的 CPU 模式下运行。
KVM:运行在内核空间,提供CPU 和内存的虚级化,以及客户机的 I/O 拦截。Guest 的 I/O 被 KVM 拦截后,交给 QEMU 处理。
QEMU:修改过的为 KVM 虚机使用的 QEMU 代码,运行在用户空间,提供硬件 I/O 虚拟化,通过 IOCTL /dev/kvm 设备和 KVM 交互。
KVM功能
KVM 所支持的功能包括:
支持CPU 和 memory 超分(Overcommit)
支持半虚拟化I/O (virtio)
支持热插拔 (cpu,块设备、网络设备等)
支持对称多处理(Symmetric Multi-Processing,缩写为 SMP )
支持实时迁移(Live Migration)
支持 PCI 设备直接分配和 单根I/O 虚拟化 (SR-IOV)
支持 内核同页合并 (KSM )
支持 NUMA (Non-Uniform Memory Access,非一致存储访问结构 )
KVM常用工具
libvirt:操作和管理KVM虚机的虚拟化 API,使用 C 语言编写,可以由 Python,Ruby, Perl, PHP, Java 等语言调用。可以操作包括 KVM,vmware,XEN,Hyper-v, LXC 等 Hypervisor。
Virsh:基于 libvirt 的 命令行工具 (CLI)
Virt-Manager:基于 libvirt 的 GUI 工具
virt-v2v:虚机格式迁移工具
virt-* 工具:包括 Virt-install (创建KVM虚机的命令行工具), Virt-viewer (连接到虚机屏幕的工具),Virt-clone(虚机克隆工具),virt-top 等
sVirt:安全工具
KVM 虚拟化平台配置
1、真机 Linux 必须是 64 位操作系统,RHEL5.4及以上的系统平台
2、CPU 支持 VT 技术(BIOS 中开启)
注意:VMware 虚拟机需要
内存 至少3G
处理器 2核
硬盘 40G
虚拟化引擎必须勾选 虚拟化 Intel VT -x/EPT 或 AMD -V/RVI(V)
3、安装前要查看 CPU 是否支持虚拟化
cat /proc/cpuinfo | egrep "vmx|svm"
4、安装前关闭 iptables 防火墙与 selinux
iptables -F
systemctl stop firewalld
setenforce 0
5、KVM 安装方式
(1)可在安装系统时选择桌面与所有虚拟化选项
(2)在已有的系统上安装 KVM 软件
在 CentOS7 的系统光盘镜像中,已经提供了安装 KVM 所需软件,通过部署基于光盘镜像的本地 yum 源,直接使用 yum 安装所需软件即可。
yum groupinstall "GNOME Desktop" #安装 GNOME 桌面环境
yum -y install qemu-kvm qemu-kvm-tools virt-install qemu-img bridge-utils libvirt virt-manager
qemu-kvm # KVM 模块
qemu-kvm-tools # KVM 调试工具,可不安装
qemu-img # qemu 组件, 创建磁盘,启动虚拟机
bridge-utils # 网络支持工具
libvirt # 虚拟机管理服务
virt-manager # 图形界面管理虚拟机
6、检测 KVM 模块安装是否成功
lsmod | grep kvm
如果没有的话,可以用 modprobe kvm 重新加载一下
注意:使用 yum 安装完桌面后,将系统默认的运行 target 修改为 graphical.target。重启系统后进入图形界面,若不修改系统的默认运行 target,重启时可能会出错。
从Centos7以后采用target概念来定义运行级别,分为3级、5级,含义如下:
3级->multi-user.target
5级->graphical.target
- 相关命令如下
- 查看当前运行的级别
runlevel
- 修改开机默认运行级别命令
systemctl set-default multi-user.target或graphical.target
查看开机默认运行级别:
systemctl get-default
修改默认运行级别为图形方式:
systemctl set-default graphical.target
开启服务,安装完成后还需要开启libvirtd服务
systemctl start libvirtd
systemctl enable libvirtd
7、设置 KVM 网络
宿主服务器安装完成 KVM,首先要设定网络,在 libvirt 中运行 KVM 网络有两种方法,NAT 和 Bridge,默认是 NAT。
1、用户模式,即 NAT 方式,这种方式是默认网络,数据包由 NAT 方式通过主机接口进行传送,可以访问外网,但是无法从外部访问虚拟机网络。
2、桥接模式,这种模式允许虚拟机像一台独立的主机一样拥有网络,外部机器可以直接访问到虚拟机内部,但需要网卡支持,并编辑网卡参数文件以支持交接
Bridge 案例
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens32 ifcfg-br0
vim ifcfg-br0
TYPE 改为 Bridge
NAME 改为 br0
UUID 删掉
DEVICE 改为 br0
vim ifcfg-ens32
UUID 删掉
IPADDR 删掉
NETMASK 删掉
GATEWAY 删掉
DNS1 删掉
添加 BRIDGE=br0
重启 network 服务
systemctl restart network
8、virt-manager KVM 管理工具
virt-manager 是基于 libvirt 的图形化虚拟机管理软件,不同版本的 virt-manager 的界面和操作方法可能不同,是使用 KVM 虚拟机最简单的方法
virt-manager
最好在 VMware 虚拟机 图形界面 打开
9、创建虚拟机
(1)创建存储池并创建存储卷
双击 QEMU/KVM -> 存储 -> 单击 " + " 按钮新建存储池,创建两个存储池 KVM,ISO
用 ftp 将 CentOS7 安装镜像上传到服务器目录 /virtual/ISO 中。
KVM:用于存放虚拟机磁盘镜像文件
ISO:用于存放安装操作系统的镜像文件
(2)新建虚拟机
右击 QEMU/KVM -> 新建
本地安装
前进
使用 ISO 镜像 PS:用存储池 ISO 上传的镜像
前进
内存:2G
前进
选择或创建自定义存储 PS:用存储池 KVM 中的磁盘
前进
勾选 在安装前自定义配置
网络为桥接
完成
引导选项 勾选 自动启动 主机引导时启动虚拟机 应用
IDE CDROM 1 点击连接 把存储池 ISO 中的镜像连接
开始安装
KVM 基本功能管理
1、查看命令帮助
virsh -h
2、查看 KVM 的配置文件存放目录(CENTOS7.0.xml是虚拟系统实例的配置文件)
ls /etc/libvirt/qemu
ls /virtual/KVM/
3、查看虚拟机状态
virsh list --all
4、虚拟机的关机与开机,首先确保 acpid 服务安装并运行,在虚拟机中:
mkdir /media/cdrom
mount /dev/sr0 /media/cdrom
rpm -ivh /media/cdrom/Packages/acpid-2.0.19-9.e17.x86_64.rpm
systemctl start acpid
systemctl enable acpid
virsh shutdown centos7.0
virsh start centos7.0
5、强制关闭电源
virsh destroy centos7.0
6、通过配置文件启动虚拟机系统
virsh create /etc/libvirt/qemu/centos7.0.xml
7、挂起虚拟机
virsh suspend centos7.0
8、恢复虚拟机
virsh resume centos7.0
9、配置虚拟机实例伴随宿主机自动启动
virsh autostart centos7.0
上述命令将创建 /etc/libvirt/qemu/autostart/ 目录,目录内容为开机自动启动的系统
10、导出(备份)虚拟机配置
virsh dumpxml centos7.0 > /etc/libvirt/qemu/centos7.0-2.xml
11、虚拟机的删除与添加,删除虚拟机:
virsh destroy centos7.0
virsh undefine centos7.0
查看删除结果,CENTOS7.0 的配置文件被删除,但是磁盘文件不会被删除
通过 virsh list --all 查看不到 centos7.0 的信息,说明此虚拟机被删除
12、通过备份的配置文件重新定义虚拟机:
mv /etc/libvirt/qemu/centos7.0-2.xml /etc/libvirt/qemu/centos7.0.xml
重新定义虚拟机
cd /etc/libvirt/qemu
virsh define centos7.0.xml
修改虚拟机配置信息(用来修改系统内存大小,磁盘文件等信息)关机情况下
通过 virsh 命令修改
virsh edit centos7.0
<memory unit='KiB'>1024152</memory>
<currentMemory unit='KiB'>1024152</currentMemory>
KVM 磁盘文件管理
通过文件管理可以直接查看,修改,复制虚拟机的内部文件,例如,当系统因为配置问题无法启动时,可以直接修改虚拟机文件。虚拟机文件有 raw 与 qcow2、qed 格式,KVM 虚拟机默认使用 qcow2 格式,raw 格式性能最好,速度最快,缺点是不支持一些新的功能,如镜像,zlib 磁盘压缩,AES 加密等(qcow2 格式的磁盘存储空间更小,支持如 AES 加密,zlib 磁盘压缩),针对两种格式的文件有不同的工具可以选择,这里介绍本地,YUM 安装 libguestfs-tools 产生的命令工具(可以直接读取 qcow2 格式的磁盘文件),因此需要将 raw 格式的磁盘文件转换成 qcow2 格式。
转换 raw 格式到 qcow2 格式
查看镜像文件
qemu-img info /virtual/KVM/centos7.0
关闭虚拟机
virsh shutdown centos7.0
转换磁盘文件格式
qemu-img convert -f raw -O qcow2 /virtual/KVM/centos7.0 /virtual/KVM/centos7.0.qcow2
qcow2 格式节省空间
修改 CENTOS7.0 的 xml 配置文件
virsh edit centos7.0
40 <driver name='qemu' type='qcow2' />
41 <source file='/virtual/KVM/centos7.0.qcow2' />
yum -y install libguestfs-tools
virt-cat 命令,类似于 cat 命令
virt-cat -a /virtual/KVM/centos7.0.qcow2 /etc/sysconfig/network
virt-edit 命令,用于编辑文件,用法与 vim 基本一致
virt-edit -a /virtual/KVM/centos7.0.qcow2 /etc/resolv.conf
virt-df 命令用于查看虚拟机磁盘信息
virt-df -h centos7.0
克隆介绍
克隆是把虚拟机整个在复制出一份,通过克隆可快速创建一个同样的虚拟机,提高使用效率:
virsh destroy centos7.0
virt-clone -o 源虚拟机名称 -n 克隆的虚拟机名称 -f 克隆的虚拟机磁盘镜像路径
virt-clone -o centos7.0 -n centos7.0-2 --file /virtual/KVM/centos7.0-2.qcow2
虚拟机快照
虚拟机要使用镜像功能,磁盘格式必须是 qcow2
快照是将虚拟机系统的某个状态保存起来,通过快照可快速恢复到虚拟机的系统到某个状态
创建快照
virsh snapshot-create centos7.0
查看快照版本信息
virsh snapshot-current centos7.0
查看快照信息
virsh snapshot-list centos7.0
恢复虚拟机状态至 1546617068
virsh snapshot-revert centos7.0 1546617068
删除快照
virsh snapshot-delete centos7.0 1546617124
修改快照名称
virsh snapshot-edit centos7.0 --snapshotname 1547092083 -rename
浙公网安备 33010602011771号