<dd id="yzu3f"><tr id="yzu3f"><kbd id="yzu3f"></kbd></tr></dd>

              安基网 首页 系统 网络学院 查看内容

              运维工程师必备技能:部署KVM虚拟化平台

              2019-2-24 11:33| 投稿: xiaotiger |来自: 互联网


              免责声明:本站系公益性非盈利IT技术普及网,本文由投稿者转载自互联网的公开文章,文末均已注明出处,其内容和?#35745;?#29256;权归原网站或作者所有,文中所述不代表本站观点,若有无意侵权或转载不当之处请从网站右下角联系我们处理,谢谢合作!

              摘要: 技能目标:· 了解KVM原理· 学会部署虚拟化架构· 学会创建虚拟机实例1.1 案例分析1.1.1 案例概述 公司部分Linux服务器利用率不高,为充分利用这些Linux服务器,可以部署KVM,在物理机上运行多个业务系统。例如,在 ...

              技能目标:

              · 了解KVM原理

              · 学会部署虚拟化架构

              · 学会创建虚拟机实例

              1.1 案例分析

              1.1.1 案例概述

              公司部分Linux服务器利用率不高,为充分利用这些Linux服务器,可以部署KVM,在物理机上运行多个业务系统。例如,在运行Nginx的服务器上部署KVM,然后在虚拟机上运行Tomcat。

              1.1.2 案例前置知识点

              KVM自Linux 2.6.20版本后就直接整?#31995;絃inux内核,它依托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是一套完整的虚拟化解决方案,是纯软件实现虚拟化,包括处理器虚拟化、内存虚拟化以?#26696;?#31181;虚拟设备的模拟,但因为是纯软件模拟出来的,所以Qemu的性能比?#31995;汀?/p>

              2. KVM运行时的三种模式

              ?#31361;?#27169;式:可以简单理解成?#31361;?#26426;在操作系统运行中的模式,?#31361;?#27169;?#25509;?#20998;为内核模式和用户模式。

              · 用户模式:为用户提供虚拟机管理的用户空间工具以及代表用户执行I/O,Qemu运行在这个模式之下。

              · 内核模式:模拟CPU以及内存,实现?#31361;?#27169;式的?#35874;唬?#22788;理从?#31361;?#27169;式的退出。KVM内核模块运行在这个模式下。

              三种模式层次关系图如图1.2所示。

              图1.2 三种模式层次关系图

              3. KVM工作原理

              用户模式的Qemu利用接口libkvm通过ioctl系统调用进入内核模式。KVMDriver为虚拟机创建虚拟CPU和虚拟内存,然后执行VMLAUNCH指令进入?#31361;?#27169;式,装载Guest OS并运行。Guest OS运行过程中如果发生中断或者影子?#24065;?#31561;异常,将暂停Guest OS的运行并保存当前上下文退出到内核模式?#21019;?#29702;这些异常。内核模式处理这些异常时如果不需要I/O则处理完成后重新进入?#31361;?#27169;式,如果需要I/O则进入到用户模式,由Qemu?#21019;?#29702;I/O,处理完成后进入内核模式,再进入?#31361;?#27169;式。工作原理如图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安装环?#22330;?/p>

              2)安装kvm。

              3)设置kvm网络。

              4)创建kvm存储池并安装虚拟机。

              5)命令行操作虚拟机。

              1.2 搭建KVM虚拟化平台

              1.2.1 准备kvm虚拟化环境

              1.安装方式

              1)在CentOS的系统光盘镜像中,已经提供了安装KVM所需软件。通过部署基于光盘镜像的本地yum源,直接使用yum安装所需软件即可,安装KVM所需软件具体包含以?#24405;?#20010;。

              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命令查看。

              [[email protected] ~]# 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模块是否安装:

              [[email protected] ~]# 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服务,以开启相关支持。

              [[email protected] ~]# systemctl start libvirtd

              [[email protected] ~]# systemctl enable libvirtd

              2.设置KVM网络

              宿主服务器安装完成KVM,首先要设定网络,在libvirt中运行KVM网络有两种方法:NAT和Bridge,默认是NAT。

              关于两种模式的说明:

              1)用户模式,即NAT方式,这种方式是默认网络,数据包由NAT方式通过主机的接口进行传?#20572;?#21487;以访问外网,但是无法从外部访问虚拟机网络。

              2)桥接模式,这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访?#23454;?#34394;拟机内部,但需要网卡支持,一般有线网卡都支持。

              这里以Bridge(桥接)为例。

              注?#26680;?#20027;机IP地址为192.168.10.1

              [[email protected] ~]# 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

              [[email protected] ~]#

              [[email protected] ~]# 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服务:

              [[email protected] ~]# /etc/init.d/network restart

              Restarting network (via systemctl): [ OK ]

              确认IP地址信息:

              [[email protected] ~]# ifconfig

              br0: flags=4163 mtu 1500

              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 mtu 1500

              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 mtu 65536

              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 mtu 1500

              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管理

              [[email protected] ~]# virt-manager

              virt-manager是基于libvirt的图像化虚拟机管理软件。请注意,不同的发行版上 virt-manager 的版本可能不同,图形界面和操作方法?#37096;?#33021;不同。本文使用了CentOS 7.3。创建KVM虚拟机最简单的方法是通过virt-manager接口。从控制台窗口启动这个工具,以root身份输入virt-manager命令,出现如图1.4所示窗口。

              图1.4 虚拟机管理界面

              虚拟化管理步骤如下。

              1)创建存储池,双击QEMU/KVM,选择"存储"选项卡,然后单击"+"?#30913;?#26032;建存储池。如图1.5所示,单击"前进"?#30913;ィ?#26681;据提示输入或浏览用以设置存储目录,如/data_kvm/store,最后单击"完成"?#30913;?#21363;可。

              图1.5 创建存储池

              2)以同样的操作创建一个镜像存储池,命名为bdqn_iso,目录为/data_kvm/iso即可。在安?#23433;?#20316;系统时,我们把镜像上传到服务器目录/data_kvm/iso,如图1.6所示。

              图1.6 创建镜像存储池

              3)创建存储卷,单击刚创建好的"bdqn",单击对话框中"卷"右边的 "+"?#30913;?#24314;立一个存储卷,并设置最大容量,如图1.7所示。

              图1.7 创建存储卷

              4)单击"完成"?#30913;?#21518;,回到虚拟系统管理器。右击"QEMU/KVM",然后选择"新建"选项,在弹出的对话框中按图1.8所示选择"本地安装介质",然后单击"前进"?#30913;ァ?/p>

              单击"浏览"?#30913;?#36873;择镜像文件,再选择操作系统型及版本,如图1.9所示。

              单击"前进"?#30913;ィ?#22312;图1.10所示的对话框中?#23454;?#20998;配内存和CPU资源,如1核CPU、1GB内存。

              单击"前进"?#30913;ィ?#22312;如图1.11所示的对话框中点选"选择或创建自定义存储"单选?#30913;ィ?#21333;击"管理"?#30913;?#36873;择文件,然后单击"前进"?#30913;ァ?/p>

              在如图1.12所示将虚拟机名称命名为"CentOS 7.3",并勾选话框中 的"在安装前自定义配置"复选框,单击"完成"?#30913;ィ?#24377;出如图1.13所示的对话框。

              图1.12 新建虚拟机(5)

              图1.13 新建虚拟机(6)

              在"引导选项"视图中勾选"主机引导时启动虚拟机"复选框,这样在物理宿主机启动后,这个VM也会启动,最后单击"应用"?#30913;ィ?#22914;图1.14所示。

              图1.14 新建虚拟机(7)

              最后单击"开始安装"?#30913;?#21363;可,整个虚拟化配置过程完成。下面就是安?#23433;?#20316;系统的工作,和平时安装Linux系统一样,如图1.15所示。

              图1.15 CentOS安装界面

              1.2.2 使用KVM命令集管理虚拟机

              1. 安装Linux虚拟机

              安装过程同上一案例,使用Xshell远程控制bdqn主机。

              2. KVM基本功能管理

              1)查看命令帮助

              [[email protected] ~]# virsh -h

              …… //省略输出内容

              2)查看KVM的配置文件存放目录(test01.xml是虚拟机系统实例的配置文件)

              [[email protected] ~]# ls /etc/libvirt/qemu/

              autostart networks test01.xml

              3)查看虚拟机状态

              [[email protected] ~]# virsh list --all

              Id 名称 状态

              ----------------------------------------------------

              4 test01 running

              4)虚拟机关机与开机

              [[email protected] ~]# virsh shutdown test01

              [[email protected] ~]# virsh start test01

              5)强制实例系统关闭电源

              [[email protected] ~]# virsh destroy test01

              6)通过配置文件启动虚拟机系统实例

              [[email protected] ~]# virsh create /etc/libvirt/qemu/test01.xml

              [[email protected] ~]# virsh list --all

              Id 名称 状态

              ----------------------------------------------------

              7 test01 running

              7)?#31227;?#34394;拟机

              [[email protected] ~]# virsh suspend test01

              查看虚拟机状态:

              [[email protected] ~]# virsh list --all

              Id 名称 状态

              ----------------------------------------------------

              7 test01 暂停

              8)?#25351;?#34394;拟机

              [[email protected] ~]# virsh resume test01

              [[email protected] ~]# virsh list --all

              Id 名称 状态

              ----------------------------------------------------

              7 test01 running

              9)配置虚拟机实例伴随宿主机自动启动

              [[email protected] ~]# virsh autostart test01

              上述命令将创建/etc/libvirt/qemu/autostart/目录,目录内容为开机自动启动的系统。

              10)导出虚拟机配置

              [[email protected] ~]# virsh dumpxml test01 > /etc/libvirt/qemu/test02.xml

              11)虚拟机的?#22659;?#19982;添加

              ?#22659;?#34394;拟机:

              [[email protected] ~]# virsh shutdown test01

              [[email protected] ~]# virsh undefine test01

              查看?#22659;?#32467;果,test01的配置文件被?#22659;?#20294;是磁盘文件不会被?#22659;?/p>

              [[email protected] ~]# ls /etc/libvirt/qemu/

              autostart networks test02.xml

              通过virsh list --all查看不到test01的信息,说明此虚拟机被?#22659;?/p>

              [[email protected] ~]# virsh list --all

              Id 名称 状态

              ----------------------------------

              通过备份的配置文件重新定义虚拟机:

              [[email protected] ~]# cd /etc/libvirt/qemu

              [[email protected] qemu]# mv test02.xml test01.xml

              重新定义虚拟机:

              [[email protected] qemu]# virsh define test01.xml

              查看虚拟机信息:

              [[email protected] qemu]# virsh list --all

              Id 名称 状态

              ----------------------------------------------------

              - test01 关闭

              12)修改虚拟机配置信息(用来修改系统内存大小、磁盘文件等信息)

              直接通过vim命令修?#27169;?/p>

              [[email protected] ~]# vim /etc/libvirt/qemu/test01.xml

              通过virsh命令修?#27169;?/p>

              [[email protected] ~]# virsh edit test01

              3. KVM文件管理

              通过文件管理可以直接查看、修改、复制虚拟机的内部文件。例如,当系统因为配置问题无法启动时,可以直?#26377;?#25913;虚拟机的文件。虚拟机磁盘文件有raw、 qcow2与qed格式, KVM虚拟机默认使用qcow2格式。这里介绍本地YUM安装libguestfs-tools后产生的命令行工具,这个工具可以直接读取qcow2格式的磁盘文件。

              1)查看当前磁盘格式:

              [[email protected] ~]# 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格式。

              [[email protected] ~]# virsh shutdown test01

              [[email protected] ~]# qemu-img convert -f raw -O qcow2 /data_kvm/store/test01.img /data_kvm/store/test01.qcow2

              执行转换磁盘格式的命令后还需要修改test01的xml配置文件中磁盘的类型与磁盘文件名。

              [[email protected] ~]# virsh edit test01

              …… //省略部分内容

              qcow2 cache=none/>

              qcow2/>

              …… //省略部分内容

              2)virt-cat命令,类似于cat命令。使用这个命令需要安装libguestfs-tools-c工具包

              [[email protected] ~]# yum -y install libguestfs-tools-c

              [[email protected] ~]# 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基本一致。

              [[email protected] ~]# virt-edit -a /data_kvm/store/test01.qcow2 /etc/resolv.conf

              nameserver 8.8.8.8

              4)virt-df命令用于查看虚拟机磁盘信息。

              [[email protected] ~]# virt-df -h test01

              文件系统 大小 已用空间 可用空间 使用百分比%

              test01:/dev/sda1 1014M 106M 908M 11%

              test01:/dev/cl/root 8.0G 917M 7.1G 12%

              4. 虚拟机克隆

              1)查看虚拟机状态

              [[email protected] ~]# virsh list --all

              Id 名称 状态

              ----------------------------------

              - test01 关闭

              2)从test01克隆test02

              [[email protected] ~]# virt-clone -o test01 -n test02 -f /data_kvm/store/test02.qcow2

              3)查看虚拟机状态

              [[email protected] ~]# virsh list --all

              Id 名称 状态

              ----------------------------------

              - test01 关闭

              - test02 关闭

              4)启动虚拟机

              [[email protected] ~]# virsh start test02

              5. 虚拟机快照

              KVM虚拟机要使用镜像功能,磁盘格式必须为qcow2。

              下面介绍KVM虚拟机快照备份的过程。

              1)对test01创建快照

              [[email protected] ~]# virsh snapshot-create test01

              已生成域快照 1503494464

              2)查看虚拟机快照版本信息

              [[email protected] ~]# virsh snapshot-current test01

              1503494464 //快照版本号

              shutoff

              …… //省略部分输出

              3)查看快?#25307;?#24687;

              [[email protected] ~]# virsh snapshot-list test01

              名称 生成时间 状态

              ------------------------------------------------------------

              1503494464 2017-08-23 09:21:04 -0400 shutoff

              4)创建新快照

              [[email protected] ~]# virsh snapshot-create test01

              已生成域快照 1503494564

              5)查看快?#25307;?#24687;

              [[email protected] ~]# virsh snapshot-list test01

              名称 生成时间 状态

              ------------------------------------------------------------

              1503494464 2017-08-23 09:21:04 -0400 shutoff

              1503494564 2017-08-23 09:22:44 -0400 shutoff

              6)?#25351;?#34394;拟机状态至1503494464

              [[email protected] ~]# virsh snapshot-revert test01 1503494464

              7)查看虚拟机快照版本信息

              [[email protected] ~]# virsh snapshot-current test01

              1503494464 //快照版本号

              shutoff

              …… //省略部分输出

              8)?#22659;?#24555;照

              [[email protected] ~]# virsh snapshot-delete test01 1503494464

              已?#22659;?#22495;快照 1503494464



              小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册账号,公开课频道价?#20302;?#20803;IT培训教程免费学,让您少走弯路、事半功倍,好工作升职?#26377;劍?/font>

              本文出自:https://www.toutiao.com/a6660711815099449868/

              免责声明:本站系公益性非盈利IT技术普及网,本文由投稿者转载自互联网的公开文章,文末均已注明出处,其内容和?#35745;?#29256;权归原网站或作者所有,文中所述不代表本站观点,若有无意侵权或转载不当之处请从网站右下角联系我们处理,谢谢合作!


              鲜花

              ?#24080;?/a>

              雷人

              路过

              鸡蛋

              相关阅读

              最新评论

               最新
              返回顶部
              十一选五奖金对照表