| 关键词:bdqn root KVM virsh test01 模式 如图 命令 快照 文件 |
技能目标: · 了解KVM原理 · 学会部署虚拟化架构 · 学会创建虚拟机实例 1.1 案例分析 1.1.1 案例概述 公司部分Linux服务器利用率不高,为充分利用这些Linux服务器,可以部署KVM,在物理机上运行多个业务系统。例如,在运行Nginx的服务器上部署KVM,然后在虚拟机上运行Tomcat。 1.1.2 案例前置知识点 KVM自Linux 2.6.20版本后就直接整合到Linux内核,它依托CPU虚拟化指令集(如Intel-VT、AMD-V)实现高性能的虚拟化支持。由于与Linux内核高度整合,因此在性能、安全性、兼容性、稳定性上都有很好的表现。 图1.1简单描绘了KVM虚拟化架构,在KVM环境中运行的每一个虚拟化操作系统都将表现为单个独立的系统进程。因此它可以很方便地与Linux系统中的安全模块进行整合(SELinux),可以灵活地实现资源的管理及分配。 ![]() 图1.1 KVM虚拟化架构 1. KVM原理简介 广义的KVM实际上包含两部分,一部分是基于LINUX内核支持的KVM内核模块,另一部分就是经过简化和修改的Qemu。 KVM内核模块模拟处理器和内存以支持虚拟机的运行,Qemu主要处理I/O以及为用户提供一个用户空间工具来进行虚拟机的管理。两者相互结合,相辅相成,构成了一个完整的虚拟化平台。 请注意:Qemu本身并不是KVM的一部分,Qemu是一套完整的虚拟化解决方案,是纯软件实现虚拟化,包括处理器虚拟化、内存虚拟化以及各种虚拟设备的模拟,但因为是纯软件模拟出来的,所以Qemu的性能比较低。 2. KVM运行时的三种模式 客户模式:可以简单理解成客户机在操作系统运行中的模式,客户模式又分为内核模式和用户模式。 · 用户模式:为用户提供虚拟机管理的用户空间工具以及代表用户执行I/O,Qemu运行在这个模式之下。 · 内核模式:模拟CPU以及内存,实现客户模式的切换,处理从客户模式的退出。KVM内核模块运行在这个模式下。 三种模式层次关系图如图1.2所示。 ![]() 图1.2 三种模式层次关系图 3. KVM工作原理 用户模式的Qemu利用接口libkvm通过ioctl系统调用进入内核模式。KVMDriver为虚拟机创建虚拟CPU和虚拟内存,然后执行VMLAUNCH指令进入客户模式,装载Guest OS并运行。Guest OS运行过程中如果发生中断或者影子缺页等异常,将暂停Guest OS的运行并保存当前上下文退出到内核模式来处理这些异常。内核模式处理这些异常时如果不需要I/O则处理完成后重新进入客户模式,如果需要I/O则进入到用户模式,由Qemu来处理I/O,处理完成后进入内核模式,再进入客户模式。工作原理如图1.3所示 ![]() 图1.3 工作原理图 1.1.3 案例环境 1.本案例实验环境 采用centos7.3操作系统,并开启虚拟化支持,案例环境如表1-1所示。 ![]() 表1-1 KVM虚拟化 2. 案例需求 1)安装KVM。 2)完成基本的KVM操作管理(创建、启动、停止等)。 3)完成KVM命令行操作虚拟机。 3. 案例实现思路 1)准备kvm安装环境。 2)安装kvm。 3)设置kvm网络。 4)创建kvm存储池并安装虚拟机。 5)命令行操作虚拟机。 1.2 搭建KVM虚拟化平台 1.2.1 准备kvm虚拟化环境 1.安装方式 1)在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 //图形界面管理虚拟机 2)验证。重启系统后,查看CPU是否支持虚拟化,对于Intel的服务器可以通过以下命令查看,只要有输出就说明CPU支持虚拟化;AMD服务器可用cat/proc/cpuinfo | grep smv命令查看。 [root@bdqn ~]# 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 检查KVM模块是否安装: [root@bdqn ~]# lsmod | grep kvm kvm_intel 170181 0 kvm 554609 1 kvm_intel irqbypass 13503 1 kvm 注意:在使用yum安装完桌面后执行ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target 命令,将系统的默认运行target更改为graphical.targe。重启后系统将进入图形化界面。若不执行上述命令更改系统的默认运行target,重启时可能报错。 2)开启服务 安装完成后还需要开启libvirtd服务,以开启相关支持。 [root@bdqn ~]# systemctl start libvirtd [root@bdqn ~]# systemctl enable libvirtd 2.设置KVM网络 宿主服务器安装完成KVM,首先要设定网络,在libvirt中运行KVM网络有两种方法:NAT和Bridge,默认是NAT。 关于两种模式的说明: 1)用户模式,即NAT方式,这种方式是默认网络,数据包由NAT方式通过主机的接口进行传送,可以访问外网,但是无法从外部访问虚拟机网络。 2)桥接模式,这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持,一般有线网卡都支持。 这里以Bridge(桥接)为例。 注:宿主机IP地址为192.168.10.1 [root@bdqn ~]# 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@bdqn ~]# [root@bdqn ~]# 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.1 NETMASK=255.255.255.0 GATEWAY=192.168.10.254 重启network服务: [root@bdqn ~]# /etc/init.d/network restart Restarting network (via systemctl): [ OK ] 确认IP地址信息: [root@bdqn ~]# ifconfig br0: flags=4163 inet 192.168.10.1 netmask 255.255.255.0 broadcast 192.168.10.255 inet6 fe80::3362:2f44:ebd1:62e prefixlen 64 scopeid 0x20 ether 00:0c:29:3a:81:cc txqueuelen 1000 (Ethernet) RX packets 3 bytes 234 (234.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 19 bytes 2613 (2.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens33: flags=4163 ether 00:0c:29:3a:81:cc txqueuelen 1000 (Ethernet) RX packets 200 bytes 17407 (16.9 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 184 bytes 24024 (23.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1 (Local Loopback) RX packets 550 bytes 47778 (46.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 550 bytes 47778 (46.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4099 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:64:3e:58 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) 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命令,出现如图1.4所示窗口。 ![]() 图1.4 虚拟机管理界面 虚拟化管理步骤如下。 1)创建存储池,双击QEMU/KVM,选择"存储"选项卡,然后单击"+"按钮新建存储池。如图1.5所示,单击"前进"按钮,根据提示输入或浏览用以设置存储目录,如/data_kvm/store,最后单击"完成"按钮即可。 ![]() 图1.5 创建存储池 2)以同样的操作创建一个镜像存储池,命名为bdqn_iso,目录为/data_kvm/iso即可。在安装操作系统时,我们把镜像上传到服务器目录/data_kvm/iso,如图1.6所示。 ![]() 图1.6 创建镜像存储池 3)创建存储卷,单击刚创建好的"bdqn",单击对话框中"卷"右边的 "+"按钮建立一个存储卷,并设置最大容量,如图1.7所示。 ![]() 图1.7 创建存储卷 4)单击"完成"按钮后,回到虚拟系统管理器。右击"QEMU/KVM",然后选择"新建"选项,在弹出的对话框中按图1.8所示选择"本地安装介质",然后单击"前进"按钮。 单击"浏览"按钮选择镜像文件,再选择操作系统型及版本,如图1.9所示。 单击"前进"按钮,在图1.10所示的对话框中适当分配内存和CPU资源,如1核CPU、1GB内存。 单击"前进"按钮,在如图1.11所示的对话框中点选"选择或创建自定义存储"单选按钮,单击"管理"按钮选择文件,然后单击"前进"按钮。 在如图1.12所示将虚拟机名称命名为"CentOS 7.3",并勾选话框中 的"在安装前自定义配置"复选框,单击"完成"按钮,弹出如图1.13所示的对话框。 ![]() 图1.12 新建虚拟机(5) ![]() 图1.13 新建虚拟机(6) 在"引导选项"视图中勾选"主机引导时启动虚拟机"复选框,这样在物理宿主机启动后,这个VM也会启动,最后单击"应用"按钮,如图1.14所示。 ![]() 图1.14 新建虚拟机(7) 最后单击"开始安装"按钮即可,整个虚拟化配置过程完成。下面就是安装操作系统的工作,和平时安装Linux系统一样,如图1.15所示。 ![]() 图1.15 CentOS安装界面 1.2.2 使用KVM命令集管理虚拟机 1. 安装Linux虚拟机 安装过程同上一案例,使用Xshell远程控制bdqn主机。 2. KVM基本功能管理 1)查看命令帮助 [root@bdqn ~]# virsh -h …… //省略输出内容 2)查看KVM的配置文件存放目录(test01.xml是虚拟机系统实例的配置文件) [root@bdqn ~]# ls /etc/libvirt/qemu/ autostart networks test01.xml 3)查看虚拟机状态 [root@bdqn ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- 4 test01 running 4)虚拟机关机与开机 [root@bdqn ~]# virsh shutdown test01 [root@bdqn ~]# virsh start test01 5)强制实例系统关闭电源 [root@bdqn ~]# virsh destroy test01 6)通过配置文件启动虚拟机系统实例 [root@bdqn ~]# virsh create /etc/libvirt/qemu/test01.xml [root@bdqn ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- 7 test01 running 7)挂起虚拟机 [root@bdqn ~]# virsh suspend test01 查看虚拟机状态: [root@bdqn ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- 7 test01 暂停 8)恢复虚拟机 [root@bdqn ~]# virsh resume test01 [root@bdqn ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- 7 test01 running 9)配置虚拟机实例伴随宿主机自动启动 [root@bdqn ~]# virsh autostart test01 上述命令将创建/etc/libvirt/qemu/autostart/目录,目录内容为开机自动启动的系统。 10)导出虚拟机配置 [root@bdqn ~]# virsh dumpxml test01 > /etc/libvirt/qemu/test02.xml 11)虚拟机的删除与添加 删除虚拟机: [root@bdqn ~]# virsh shutdown test01 [root@bdqn ~]# virsh undefine test01 查看删除结果,test01的配置文件被删除,但是磁盘文件不会被删除。 [root@bdqn ~]# ls /etc/libvirt/qemu/ autostart networks test02.xml 通过virsh list --all查看不到test01的信息,说明此虚拟机被删除。 [root@bdqn ~]# virsh list --all Id 名称 状态 ---------------------------------- 通过备份的配置文件重新定义虚拟机: [root@bdqn ~]# cd /etc/libvirt/qemu [root@bdqn qemu]# mv test02.xml test01.xml 重新定义虚拟机: [root@bdqn qemu]# virsh define test01.xml 查看虚拟机信息: [root@bdqn qemu]# virsh list --all Id 名称 状态 ---------------------------------------------------- - test01 关闭 12)修改虚拟机配置信息(用来修改系统内存大小、磁盘文件等信息) 直接通过vim命令修改: [root@bdqn ~]# vim /etc/libvirt/qemu/test01.xml 通过virsh命令修改: [root@bdqn ~]# virsh edit test01 3. KVM文件管理 通过文件管理可以直接查看、修改、复制虚拟机的内部文件。例如,当系统因为配置问题无法启动时,可以直接修改虚拟机的文件。虚拟机磁盘文件有raw、 qcow2与qed格式, KVM虚拟机默认使用qcow2格式。这里介绍本地YUM安装libguestfs-tools后产生的命令行工具,这个工具可以直接读取qcow2格式的磁盘文件。 1)查看当前磁盘格式: [root@bdqn ~]# qemu-img info /data_kvm/store/test01.qcow2 image: /data_kvm/store/test01.qcow2 file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 1.3G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: true 如果虚拟机磁盘文件不是qcow2格式,可以通过qemu-img命令转换磁盘文件格式,如执行以下操作可以将test01虚拟机raw格式磁盘转换至qcow2格式。 [root@bdqn ~]# virsh shutdown test01 [root@bdqn ~]# qemu-img convert -f raw -O qcow2 /data_kvm/store/test01.img /data_kvm/store/test01.qcow2 执行转换磁盘格式的命令后还需要修改test01的xml配置文件中磁盘的类型与磁盘文件名。 [root@bdqn ~]# virsh edit test01 …… //省略部分内容 …… //省略部分内容 2)virt-cat命令,类似于cat命令。使用这个命令需要安装libguestfs-tools-c工具包 [root@bdqn ~]# yum -y install libguestfs-tools-c [root@bdqn ~]# virt-cat -a /data_kvm/store/test01.qcow2 /etc/sysconfig/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed s, release .*$,,g /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet" GRUB_DISABLE_RECOVERY="true" 3)virt-edit命令,用于编辑文件,用法与vim基本一致。 [root@bdqn ~]# virt-edit -a /data_kvm/store/test01.qcow2 /etc/resolv.conf nameserver 8.8.8.8 4)virt-df命令用于查看虚拟机磁盘信息。 [root@bdqn ~]# virt-df -h test01 文件系统 大小 已用空间 可用空间 使用百分比% test01:/dev/sda1 1014M 106M 908M 11% test01:/dev/cl/root 8.0G 917M 7.1G 12% 4. 虚拟机克隆 1)查看虚拟机状态 [root@bdqn ~]# virsh list --all Id 名称 状态 ---------------------------------- - test01 关闭 2)从test01克隆test02 [root@bdqn ~]# virt-clone -o test01 -n test02 -f /data_kvm/store/test02.qcow2 3)查看虚拟机状态 [root@bdqn ~]# virsh list --all Id 名称 状态 ---------------------------------- - test01 关闭 - test02 关闭 4)启动虚拟机 [root@bdqn ~]# virsh start test02 5. 虚拟机快照 KVM虚拟机要使用镜像功能,磁盘格式必须为qcow2。 下面介绍KVM虚拟机快照备份的过程。 1)对test01创建快照 [root@bdqn ~]# virsh snapshot-create test01 已生成域快照 1503494464 2)查看虚拟机快照版本信息 [root@bdqn ~]# virsh snapshot-current test01 …… //省略部分输出 3)查看快照信息 [root@bdqn ~]# virsh snapshot-list test01 名称 生成时间 状态 ------------------------------------------------------------ 1503494464 2017-08-23 09:21:04 -0400 shutoff 4)创建新快照 [root@bdqn ~]# virsh snapshot-create test01 已生成域快照 1503494564 5)查看快照信息 [root@bdqn ~]# virsh snapshot-list test01 名称 生成时间 状态 ------------------------------------------------------------ 1503494464 2017-08-23 09:21:04 -0400 shutoff 1503494564 2017-08-23 09:22:44 -0400 shutoff 6)恢复虚拟机状态至1503494464 [root@bdqn ~]# virsh snapshot-revert test01 1503494464 7)查看虚拟机快照版本信息 [root@bdqn ~]# virsh snapshot-current test01 …… //省略部分输出 8)删除快照 [root@bdqn ~]# virsh snapshot-delete test01 1503494464 已删除域快照 1503494464 |
| 本文出处: https://www.toutiao.com/a6660711815099449868/ |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|