• 虚拟化技术之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安装虚拟机就完成了;

  • 相关阅读:
    python3操作sqlserver,查询数据统计导出csv
    scrapy入门二(分页抓取文章入库)
    stm32 调试时卡在LDR R0, =SystemInit
    STM32F407 串口通信实验 第26节 个人笔记
    STM32F407 串口通信:分类&常见接口 个人笔记
    STM32F407 IO引脚复用器和映射 个人笔记
    STM32F407 按键输入实验 库函数版 个人笔记
    STM32F407 GPIO 库函数编程套路(led与beep总结) 个人笔记
    STM32F407 跑马灯 寄存器版 个人笔记
    STM32F407 跑马灯 库函数版 个人笔记
  • 原文地址:https://www.cnblogs.com/qiuhom-1874/p/13499801.html
Copyright © 2020-2023  润新知