虚拟化技术之kvm基础
一、KVM简介
KVM的全称是kernel base virtual machine(基于内核的虚拟机)是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM已成为学术界的主流VMM之一。KVM的虚拟化需要硬件支持(如Inter VT技术或者AMD V技术),是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。IBM文档:https://www.ibm.com/developerworks/cn/linux/l-using-kvm/;
kvm架构
提示:kvm是Linux内核中的一个模块,而对于用户要操作Linux内核中的模块所提供的功能,必须在用户空间装上一个用户空间软件,通过系统调用的方式去操作;QEMU就是kvm在用户空间的管理功能,有点类似iptalbes是netfilter的管理工具;上面架构图上kvm的主要作用是提供 CPU 和内存的虚级化,以及客户机的 I/O拦截,Guest的部分I/O被KVM拦截后,交给QEMU处理;QEMU通过修改过的被KVM虚机使用的QEMU代码,运行在用户空间,提供硬件I/O虚拟化,通过IOCTL/dev/kvm设备和KVM交互,但是,KVM本身不执行任何硬件模拟,需要用户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟I/O,并将它的视频显示映射回宿主的显示屏。
二、KVM宿主机环境准备
在使用KVM时,宿主机必须在硬件上支持虚拟化功能,如Inter VT技术或者AMD V技术;
检查宿主机是否支持虚拟化功能
[root@node1 ~]# grep -E "vmx|svm" /proc/cpuinfo [root@node1 ~]#
提示:如上在宿主机上执行grep -E "vmx|svm" /proc/cpuinfo,如果没有过滤到任何有关vmx或者svm相关字符,那么说明该主机不支持虚拟化功能;
在vmware workstation宿主机上开启虚拟化功能
提示:运行的虚拟机,必须要先关机,然后找到对应的虚拟机右键-->设置-->处理器-->把虚拟化inter VT-x/EPT或AMD-V/RVI(V)这一项打勾,然后点击确定开启虚拟机即可;
验证:现在开启了虚拟化inter VT-x/EPT或AMD-V/RVI(V),看看宿主机上是否能够过滤到vmx或svm的字符?
提示:如果硬件是inter 处理器过滤出来的是vmx,如果是AMD的过滤出来是svm;两者只要有一种即可;
检查内核是否装载kvm模块
提示:如果使用lsmod 没有过滤到kvm字样,说明宿主机没有装载该模块,装载方法modpro kvm即可;到此宿主机上的环境就检查完毕;接下来安装kvm用户空间管理工具;
安装kvm在用户空间的管理工具
[root@node1 ~]# yum install qemu-kvm qemu-kvm-tools libvirt virt-manager virt-install Loaded plugins: fastestmirror base | 3.6 kB 00:00:00 docker-ce-stable | 3.5 kB 00:00:00 epel | 4.7 kB 00:00:00 extras | 2.9 kB 00:00:00 updates | 2.9 kB 00:00:00 (1/2): epel/x86_64/updateinfo | 1.0 MB 00:00:00 (2/2): epel/x86_64/primary_db | 6.9 MB 00:00:01 Determining fastest mirrors * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com Resolving Dependencies --> Running transaction check ---> Package libvirt.x86_64 0:4.5.0-33.el7_8.1 will be installed --> Processing Dependency: libvirt-libs = 4.5.0-33.el7_8.1 for package: libvirt-4.5.0-33.el7_8.1.x86_64 --> Processing Dependency: libvirt-daemon-driver-storage = 4.5.0-33.el7_8.1 for package: libvirt-4.5.0-33.el7_8.1.x86_64 --> Processing Dependency: libvirt-daemon-driver-secret = 4.5.0-33.el7_8.1 for package: libvirt-4.5.0-33.el7_8.1.x86_64 ……省略部分内容…… libxml2 x86_64 2.9.1-6.el7.4 base 668 k pciutils-libs x86_64 3.5.1-3.el7 base 46 k policycoreutils x86_64 2.5-34.el7 base 917 k python-gobject-base x86_64 3.22.0-1.el7_4.1 base 294 k selinux-policy-targeted noarch 3.13.1-266.el7_8.1 updates 7.0 M Transaction Summary ========================================================================================================== Install 5 Packages (+213 Dependent packages) Upgrade 1 Package (+ 16 Dependent packages) Total download size: 95 M Is this ok [y/d/N]: y Downloading packages: Delta RPMs disabled because /usr/bin/applydeltarpm not installed. (1/235): at-spi2-core-2.28.0-1.el7.x86_64.rpm | 158 kB 00:00:00 (2/235): at-spi2-atk-2.26.2-1.el7.x86_64.rpm | 81 kB 00:00:00 (3/235): autogen-libopts-5.18-5.el7.x86_64.rpm | 66 kB 00:00:00 (4/235): boost-iostreams-1.53.0-28.el7.x86_64.rpm | 61 kB 00:00:00 (5/235): adwaita-cursor-theme-3.28.0-1.el7.noarch.rpm | 641 kB 00:00:00 (6/235): augeas-libs-1.4.0-9.el7_8.1.x86_64.rpm | 357 kB 00:00:00 ……省略部分内容…… xkeyboard-config.noarch 0:2.24-1.el7 xml-common.noarch 0:0.6.3-39.el7 xorg-x11-server-utils.x86_64 0:7.7-20.el7 xorg-x11-xauth.x86_64 1:1.0.9-1.el7 xorg-x11-xinit.x86_64 0:1.3.4-2.el7 yajl.x86_64 0:2.0.4-4.el7 Updated: selinux-policy.noarch 0:3.13.1-266.el7_8.1 Dependency Updated: cyrus-sasl-lib.x86_64 0:2.1.26-23.el7 device-mapper.x86_64 7:1.02.164-7.el7_8.2 device-mapper-libs.x86_64 7:1.02.164-7.el7_8.2 freetype.x86_64 0:2.8-14.el7 glib2.x86_64 0:2.56.1-5.el7 libdrm.x86_64 0:2.4.97-2.el7 libselinux.x86_64 0:2.5-15.el7 libselinux-python.x86_64 0:2.5-15.el7 libselinux-utils.x86_64 0:2.5-15.el7 libsemanage.x86_64 0:2.5-14.el7 libsepol.x86_64 0:2.5-10.el7 libxml2.x86_64 0:2.9.1-6.el7.4 pciutils-libs.x86_64 0:3.5.1-3.el7 policycoreutils.x86_64 0:2.5-34.el7 python-gobject-base.x86_64 0:3.22.0-1.el7_4.1 selinux-policy-targeted.noarch 0:3.13.1-266.el7_8.1 Complete! [root@node1 ~]#
启动libvirtd
[root@node1 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:9a:db:d6 brd ff:ff:ff:ff:ff:ff inet 192.168.0.41/24 brd 192.168.0.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe9a:dbd6/64 scope link valid_lft forever preferred_lft forever [root@node1 ~]# systemctl start libvirtd.service [root@node1 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:9a:db:d6 brd ff:ff:ff:ff:ff:ff inet 192.168.0.41/24 brd 192.168.0.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe9a:dbd6/64 scope link valid_lft forever preferred_lft forever 3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000 link/ether 52:54:00:45:06:15 brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0 valid_lft forever preferred_lft forever 4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000 link/ether 52:54:00:45:06:15 brd ff:ff:ff:ff:ff:ff [root@node1 ~]#
提示:libvitrd是C/S架构,它是用于管理虚拟化平台的开源的API,后台程序和管理工具。它可以用于管理KVM、Xen、VMware ESX,QEMU和其他虚拟化技术;启动libvirtd后,它会在宿主机上创建virbr0-nic和virbr0两张网卡,其中virbr0是一个NAT网桥,virbr0-nic就桥接到virbr0上,默认virbr0的地址是192.168.122.1/24,如下所示;
三、基于virtual manager管理工具创建虚拟机
使用mobaxterm远程软件开启vrit-manager
提示:如上在windows上使用mobaxterm连接宿主机,然后执行virt-manager命令,就可以打开virtual manager图形管理工具;这里说一下,要想使用virt-manager,必须要使用支持X11协议的转发的远程工具,windows上可以使用专业版本的xshell和mobaxterm软件;如果是Linux系统,需要安装桌面包组,然后在桌面上使用终端执行virt-manager命令来启动virt-manager;如果是mac系统需要安装XQuartz,然后打开XQuartz,右键选择终端,使用ssh -Y来连接宿主机,然后在打开virt-manager如下所示;
Mac上使用XQuartz开启virt-manager
提示:右键-->应用程序-->终端;
提示:XQuartz的下载地址https://dl.bintray.com/xquartz/downloads/XQuartz-2.7.11.dmg;使用virt-manager之前,记得先要启动libvirtd这个服务;
上传镜像到宿主机
使用virt-manager创建虚拟机
提示:这个根据自己需求来定义虚拟机的内存和cpu;
提示:这步是选择磁盘,如果没有提前在宿主机上创建好磁盘,可以直接在这里选择创建,如果创建的有磁盘,则这里选择即可;
提示:这一步是确定我们虚拟机的配置清单以及网络的选择,如果有多个网络,可以选择其中一种即可,然后点击finsh;
提示:到这一步就是安装操作系统了,安装完毕后,重启我们就完成了虚拟机的创建;后续步骤这里就不过多阐述了;安装windows的步骤和上面一模一样;
提示:安装好系统以后,我们就可以在这个界面上进行管理虚拟机,这里需要注意一点,如果宿主机没有打开核心转发功能,虚拟机是不能够正常上网的;到此基于virt-manager安装虚拟机就完成了;