**
部署KVM虚拟化平台
本章资源请访问:
https://download.youkuaiyun.com/download/weixin_54373617/18742724
技能目标:
- 了解 KVM 原理
- 学会部署虚拟化架构
- 学会创建虚拟机实例
**
一、案例分析
**
1.1 案例概述**
公司部分 Linux 服务器硬件资源利用率不高,为了充分利用这些 Linux 服务器,可以部
署 KVM,在物理机上运行多个业务系统。例如,在运行 Nginx 的服务器上部署 KVM,然后
在 KVM 虚拟机上运行 Tomcat 等服务。
**
**
1.2 案例前置知识点**
KVM 自 Linux 2.6.20 版本后就直接整合到 Linux 内核,它依托 CPU 虚拟化指令集(如Intel-VT、AMD-V)实现高性能的虚拟化支持。由于与 Linux 内核高度整合,因此在性能、安全性、兼容性、稳定性上都有很好的表现。
在 KVM 环境中运行的每一个虚拟化操作系统都
将表现为单个独立的系统进程。因此它可以很方便地与 Linux 系统中的安全模块进行整合
(SELinux),可以灵活地实现资源的管理及分配。
1. KVM 原理简介
广义的 KVM 实际上包含两部分,一部分是基于 Linux 内核支持的 KVM 内核模块,另一部分就是经过简化和修改的 Qemu。
KVM 内核模块是模拟处理器和内存以支持虚拟机的运行,Qemu 主要处理 I/O 以及为
用户提供一个用户空间工具来进行虚拟机的管理。两者相互结合、相辅相成,构成了一个完整的虚拟化平台。
需要注意的是,Qemu 本身并不是 KVM 的一部分Qemu 是一套完整的虚拟化解决方案,是纯软件实现虚拟化,包括处理器虚拟化、内存虚拟化以及各种虚拟设备的模拟,但因为是纯软件模拟出来的,所以 Qemu 的性能比较低。
2. KVM 运行时的三种模式
KVM 模块是让 Linux 主机成为一个虚拟机监视器(VMM),并且在原有 Linux 内核模式和用户模式的两种执行模式基础上新增加了客户模式,客户模式也拥有自己的内核模式和用户模式。
客户模式:可以简单理解成客户机在操作系统运行中的模式,客户模式又分为内核模式和用户模式。客户模式中的内核模式和用户模式的作用分别如下所示。
用户模式:为用户提供虚拟机管理的用户空间工具以及代表用户执行 I/O,Qemu 运行在这个模式之下。
内核模式:模拟 CPU 以及内存,实现客户模式的切换,处理从客户模式的退出。KVM内核模块运行在这个模式下。
3. KVM 工作原理
用户模式的 Qemu 利用接口 libkvm 通过 ioctl 系统调用进入内核模式。KVM Driver 为虚拟机创建虚拟 CPU 和虚拟内存,然后执行 VMLAUNCH 指令进入客户模式,装载 GuestOS 并运行。Guest OS 运行过程中如果发生中断或者影子缺页等异常,将暂停 Guest OS的运行并保存当前上下文退出到内核模式来处理这些异常。内核模式处理这些异常时如果不需要 I/O 则处理完成后重新进入客户模式。如果需要 I/O 则进入到用户模式,由 Qemu 来处
理 I/O,处理完成后进入内核模式,再进入客户模式
**
1.3 案例环境
**
1. 本案例实验环境
采用 CentOS7.3 操作系统,并开启虚拟化支持,案例环境如表
2. 案例需求
(1)安装 KVM。
(2)完成基本的 KVM 操作管理(创建、启动、停止等)。
(3)完成 KVM 命令行操作虚拟机。
3. 案例实现思路
(1)准备 KVM 装环境。
(2)安装 KVM。
(3)配置 KVM 桥接网络。
(4)创建 KVM 存储池并安装虚拟机。
(5)命令行操作虚拟机。
**
1.2 搭建 KVM 虚拟化平台
**
2.1 准备 kvm 虚拟化环境
在安装前宿主机要更改处理器内核数、内存、硬盘大小
还要勾选虚拟化Intel VT-X/EPT或AMD-V/RVI(V)选项支持虚拟化,各个选项的大小根据自己要创建kvm主机数来定
1.安装方式
(1)YUM 安装 KVM
在 CentOS 的系统光盘镜像中,已经提供了安装 KVM 所需软件。通过部署基于光盘镜像的本地 YUM 源,直接使用 YUM 安装所需软件即可,安装 KVM 所需软件具体包含以下几个。
yum groupinstall -y “GNOME Desktop” 这里建议手敲不然符号格式可能不对
//安装 GNOME 桌面环境
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 -y install virt-viewer //最小化虚拟机管理工具
需要注意的是:在使用 YUM 安装完桌面后执行
ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target 命令,将系统的默
认运行 target 更改为 graphical.targe。重启后系统将进入图形化界面。若不执行上述命令更
改系统的默认运行 target,重启时可能报错。
(2)验证
重启系统后,查看 CPU 是否支持虚拟化,对于 Intel 的服务器可以通过以下命令查看cat /proc/cpuinfo | grep vmx,只要有输出就说明 CPU 支持虚拟化;AMD 服务器可用 cat /proc/cpuinfo | grep svm 命令查
看。
[root@localhost ~]#cat /proc/cpuinfo | grep vmx
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush
dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl
xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1
sse4_2 x2apic popcnt tsc_deadline_timer xsave avx hypervisor lahf_lm ida arat epb pln pts
dtherm tpr_shadow vnmi ept vpid tsc_adjust
grep -e “vmx” -e “svm” /proc/cpuinfo //查看AMD处理器是否支持虚拟化
grep -e “vmx” -e “kmv” /proc/cpuinfo//查看inter处理器是否支持虚拟化
检查 KVM 模块是否安装:
[root@localhost ~]# lsmod | grep kvm
kvm_intel 170181 0
kvm 554609 1 kvm_intel
irqbypass 13503 1 kvm
(3)开启 libvirtd 服务
安装完成后还需要开启 libvirtd 服务,以开启相关支持。
[root@bdqn ~]# systemctl start libvirtd
[root@bdqn ~]# systemctl enable libvirtd
2.设置 KVM 网络
宿主服务器安装完成 KVM,首先要设定网络,在 libvirt 中运行 KVM 网络有两种方法:
NAT 和 Bridge,默认是 NAT。
关于两种网络模式的说明:
用户模式,即 NAT 方式,这种方式是默认网络,数据包由 NAT 方式通过主机的网卡接口进行传送,可以访问外网,但是无法让外部主机访问虚拟机内部网络。
桥接模式,这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持,一般有线网卡都支持。这里Bridge(桥接)为例进行操作演示。注:宿主机 IP 地址192.168.10.7 。
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-br0
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=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=58b0765c-572c-4f63-89a7-1bf720b1fab0
DEVICE=ens33
ONBOOT=yes
BRIDGE=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.10.7
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ifconfig
br0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.107 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::1efc:9937:f658:9866 prefixlen 64 scopeid 0x20
ether 00:0c:29:13:fe:02 txqueuelen 1000 (Ethernet)
RX packets 24 bytes 1622 (1.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 35 bytes 4152 (4.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33:flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:13:fe:02 txqueuelen 1000 (Ethernet)
RX packets 101376 bytes 137087441 (130.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 33008 bytes 2095273 (1.9 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
出现以上信息,说明网卡桥接成功了。
3.KVM 管理
[root@bdqn ~]# virt-manager
virt-manager 是基于 libvirt 的图像化虚拟机管理软件。需要注意的是,不同发行版上的
virt-manager 版本可能有所不同,图形界面和操作方法也可能不同。本文使用了 CentOS
7.3。创建 KVM 虚拟机最简单的方法是通过 virt-manager 接口。从控制台窗口启动这个工
具,以 root 身份输入 virt-manager 命令
[root@localhost ~]# virt-manager
虚拟化管理步骤如下。
以下存储位置没有的话需要在宿主机上手动创建
(1)创建存储池
双击 QEMU/KVM,选择“存储”选项卡,然后单击“+”按钮新建存储池。
单击“前进”按钮,根据提示输入或浏览用以设置存储目录,如/data/kvm,最后单击“完成”按钮即可。
QEMU/KVM-------存储-------
存储池的位置
(2)创建镜像存储池
以同样的操作创建一个镜像存储池,命名为 kvm_iso,目录为/data_kvm/iso 即可。在
安装操作系统时,需要把镜像上传到服务器目录/data_kvm/iso
镜像存储池位置
(3)创建存储卷
单击刚创建好的“kvm1.disk”,单击对话框中“卷”右边的 “+”按钮建立一个存储卷,并设置最大容量
(4)新建虚拟机
上传系统镜像到/data/kvm_iso/里面
回到虚拟系统管理器。右击“QEMU/KVM”,然后选择“新建”选项,在弹出的对话框中选择“本地安装介质”,然后单击“前进”按钮。
单击“浏览”按钮选择镜像文件,再选择操作系统型及版本
单击“前进”按钮,如图所示的对话框中适当分配内存和 CPU 资源,如 1 核 CPU、1GB 内存。
单击“前进”按钮,在如图所示的对话框中点选“选择或创建自定义存储”单选按钮,
单击“管理”按钮选择文件,然后单击“前进”按钮。
在如图所示将虚拟机名称命名为“CentOS 7.3“,并勾选话框中的“在安装前自定义配置”复选框
单击“完成”按钮,弹出如图所示的对话框
在“引导选项”视图中勾选“主机引导时启动虚拟机”复选框,这样在物理宿主机启动后,这个 VM 也会启动,最后单击“应用”按钮
最后单击“开始安装”按钮即可,整个虚拟化配置过程完成。下面就是安装操作系统的工作,和平时安装 Linux 系统一样,
**
2.2 使用 KVM 命令集管理虚拟机
**
1. 安装 Linux 虚拟机
安装过程同上一案例,使用 Xshell 远程控制CentOS7主机。
之后的操作都在CentOS7上面完成(宿主的虚拟机)
2. KVM 基本功能管理
(1)查看命令帮助
[root@localhost ~]# virsh -h
…… //省略输出内容
(2)查看 KVM 的配置文件存放目录( centos7.3.xml 是虚拟机系统实例的配置文件)
[root@localhost ~]# ls /etc/libvirt/qemu
autostart centos7.3.xml networks
(3)查看虚拟机状态
(4)虚拟机关机与开机
(5)强制实例系统关闭电源
(6)通过配置文件启动虚拟机系统实例
(7)挂起虚拟机
(8)恢复虚拟机
(9)配置虚拟机实例伴随宿主机自动启动
上述命令将创建/etc/libvirt/qemu/autostart/目录,目录内容为开机自动启动的系统。
(10)导出虚拟机配置
[root@localhost ~]# virsh dumpxml centos7.3 > /etc/libvirt/qemu/centos7.3.bak
(11)虚拟机的删除与添加
删除虚拟机。
查看删除结果,centos7.3 的配置文件被删除,但是磁盘文件不会被删除。
通过 virsh list --all 查看不到 centos7.3 的信息,说明此虚拟机被删除。
通过备份的配置文件重新定义虚拟机。
重新定义虚拟机。
[root@localhost qemu]# virsh define centos7.3xml
定义域 centos7.3(从 centos7.3xml)
查看虚拟机信息。
(12)修改虚拟机配置信息(用来修改系统内存大小、磁盘文件等信息)
直接通过 vim 命令修改。
[root@localhost ~]#vim /etc/libvirt/qemu/centos7.3.xml
通过 virsh 命令修改。
[root@localhost ~]#virsh edit centos7.3.xml
3. KVM 文件管理
通过文件管理可以直接查看、修改、复制虚拟机的内部文件。例如,当系统因为配置问题无法启动时,可以直接修改虚拟机的文件。虚拟机磁盘文件有 raw、 qcow2 与 qed 格式,
KVM 虚拟机默认使用 qcow2 格式。这里介绍本地 YUM 安装 libguestfs-tools 后产生的命令行工具,这个工具可以直接读取 qcow2 格式的磁盘文件。
(1)查看当前磁盘格式
[root@localhost data]# qemu-img info /data/kvm/kvm1.disk
image: /data/kvm/kvm1.disk
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 1.6G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: true
如果虚拟机磁盘文件不是 qcow2 格式,可以通过 qemu-img 命令转换磁盘文件格式,
如执行以下操作可以将 centos7.3 虚拟机 raw 格式磁盘转换至 qcow2 格式。
[root@localhost ~]# virsh shutdown centos7.3
[root@localhost ~]# qemu-img convert -f raw -O qcow2 /data/kvm/ kvm1.disk /data/kvm/ kvm1.disk .qcow2
执行转换磁盘格式的命令后还需要修改 centos7.3 的 xml 配置文件中磁盘的类型与磁盘文件名。
[root@localhost ~]#virsh edit centos7.3
…… #省略部分内容
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='none'/>
<source file='/data/kvm/kvm1.disk.qcow2'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</disk>
(2)virt-cat 命令,类似于 cat 命令
使用这个命令需要安装 libguestfs-tools-c 工具包。
[root@bdqn ~]# yum -y install libguestfs-tools-c
[root@bdqn ~]# virt-cat -a 文件名/文件位置
(3)virt-edit 命令
virt-edit 命令,用于编辑文件,用法与 vim 基本一致。
[root@bdqn ~]# virt-edit -a 文件名/文件位置
如:
[root@localhost ~]# virt-edit -a /data/kvm/kvm1.disk /etc/resolv.conf
nameserver 8.8.8
[root@localhost ~]# virt-cat -a /data/kvm/kvm1.disk /etc/resolv.conf //查看
nameserver 8.8.8
(4)virt-df 命令
virt-df 命令用于查看虚拟机磁盘信息。
4. 虚拟机克隆
(1)查看虚拟机状态
(2)从centos7.3 克隆centos7.3.bak
(3)查看虚拟机状态
(4)启动虚拟机
[root@localhost ~]# virsh start centos7.3.bak
域 centos7.3.bak 已开始
5. 虚拟机快照
(1)对centos7.3创建快照
[root@localhost ~]# virsh snapshot-create centos7.3
已生成域快照 1617091553
(2)查看虚拟机快照版本信息
[root@localhost ~]# virsh snapshot-current centos7.3
<domainsnapshot>
<name>1617091553</name> #快照版本号
<state>running</state>
(3)查看快照信息
(4)创建新快照
[root@localhost ~]# virsh snapshot-create centos7.3.bak
已生成域快照 1617091830
(5)查看快照信息
(6)恢复虚拟机状态至 1617091830
[root@localhost ~]# virsh snapshot-revert centos7.3.bak 1617091830
(7)查看虚拟机快照版本信息
[root@localhost ~]# virsh snapshot-current centos7.3.bak
1617091830 //快照版本号
running
(8)删除快照
[root@localhost ~]# virsh snapshot-delete centos7.3 1617091553
已删除域快照 1617091553