精华内容
下载资源
问答
  • KVM 虚拟化技术

    2019-07-23 23:49:07
    KVM 虚拟化技术 1.1 前言 1.1.1 什么是虚拟化? 在计算机技术中,虚拟化(技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以...

    转自: https://www.cnblogs.com/clsn/p/8366251.html

    KVM 虚拟化技术

    1.1 前言

    1.1.1 什么是虚拟化?

    在计算机技术中,虚拟化(技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境。

     

    图 - 虚拟化示意图

    由此,打破实体结构间的不可切割的障碍,使用户可以比原本的配置更好的方式来应用这些电脑硬件资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制。

    一般所指的虚拟化资源包括计算能力和数据存储。

    由于目前信息技术领域的很多企业都曾在宣传中将该企业的某种技术称为虚拟化技术,这些技术涵盖的范围可以从Java虚拟机技术系统管理软件,这就使得准确的界定虚拟技术变得困难。因此各种相关学术论文在谈到虚拟技术时常常提到的便是如前面所提到的那个不严格的定义。

    1.1.2 为什么要用虚拟化

      ?同一台物理机运行多个不同版本应用软件

      ?硬件依赖性较低和便于数据迁移

    图 - 虚拟化前后对比

       详情参考<1.1.3 虚拟化技术的优势>。

    1.1.3 虚拟化技术的优势

      1.降低运营成本

      服务器虚拟化降低了IT基础设施的运营成本,令系统管理员摆脱了繁重的物理服务器、OS、中间件及兼容性的管理工作,减少人工干预频率,使管理更加强大、便捷。

      2.提高应用兼容性

      服务器虚拟化提供的封装性和隔离性使大量应用独立运行于各种环境中,管理人员不需频繁根据底层环境调整应用,只需构建一个应用版本并将其发布到虚拟化后的不同类型平台上即可。

      3.加速应用部署

      采用服务器虚拟化技术只需输入激活配置参数、拷贝虚拟机、启动虚拟机、激活虚拟机即可完成部署,大大缩短了部署时间,免除人工干预,降低了部署成本。

      4.提高服务可用性

      用户可以方便地备份虚拟机,在进行虚拟机动态迁移后,可以方便的恢复备份,或者在其他物理机上运行备份,大大提高了服务的可用性。

      5.提升资源利用率

      通过服务器虚拟化的整合,提高了CPU、内存、存储、网络等设备的利用率,同时保证原有服务的可用性,使其安全性及性能不受影响。

      6.动态调度资源

      在服务器虚拟化技术中,数据中心从传统的单一服务器变成了统一的资源池,用户可以即时地调整虚拟机资源,同时数据中心管理程序和数据中心管理员可以灵活根据虚拟机内部资源使用情况灵活分配调整给虚拟机的资源。

      7.降低能源消耗

      通过减少运行的物理服务器数量,减少CPU以外各单元的耗电量,达到节能减排的目的。

    1.1.4 KVM简介

      KVM,基于内核的虚拟机(英语:Kernel-based Virtual Machine,缩写为 KVM),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor。KVM在2007年2月被导入Linux 2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上。

      KVM在具备Intel VT或AMD-V功能的x86平台上运行。它也被移植到S/390,PowerPC与IA-64平台上。在Linux内核3.9版中,加入ARM架构的支持。

      KVM目前由Red Hat等厂商开发,对CentOS/Fedora/RHEL等Red Hat系发行版支持极佳。

    1.1.5 关于KVM

    1. KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机)。
    2. 是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的Linux全虚拟化解决方案。
    3. 它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。
    4. KVM还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。
    5. KVM能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)同时KVM还能够使用ksm技术帮助宿主服务器节约内存。
    6. 在主流的Linux内核,如2.6.20以上的内核均已包含了KVM核心。

    1.1.6 关于Virtual Machine Manager

      在电脑运算中,红帽公司的Virtual Machine Manager是一个虚拟机管理员,可以让用户管理多个虚拟机。

      基于内核的虚拟机libvirt与Virtual Machine Manager。 

    Virtual Machine Manager可以让用户

      ? 创建、编辑、引导或停止虚拟机。

      ? 查看并控制每个虚拟机的控制台。

      ? 查看每部虚拟机的性能以及使用率。

      ? 查看每部正在运行中的虚拟机以及主控端的即时性能及使用率信息。

      ? 不论是在本机或远程,皆可使用KVM、Xen、QEMU。

    图 -  libvirt服务

    1.1.7 其他虚拟化软件

    ? Xen

      Xen是一个开放源代码虚拟机监视器,由XenProject开发。它打算在单个计算机上运行多达128个有完全功能的操作系统。

      在旧(无虚拟硬件)的处理器上执行Xen,操作系统必须进行显式地修改(移植)以在Xen上运行(但是提供对用户应用的兼容性)。这使得Xen无需特殊硬件支持,就能达到高性能的虚拟化。

    ? QEMU

      QEMU是一套由Fabrice Bellard所编写的模拟处理器的自由软件。它与Bochs,PearPC近似,但其具有某些后两者所不具备的特性,如高速度及跨平台的特性。经由KVM(早期为kqemu加速器,现在kqemu已被KVM取代)这个开源的加速器,QEMU能模拟至接近真实电脑的速度。QEMU有两种主要运作模式:

      User mode模拟模式,亦即是用户模式。

      QEMU能引导那些为不同中央处理器编译的Linux程序。而Wine及Dosemu是其主要目标。

      System mode模拟模式,亦即是系统模式。

      QEMU能模拟整个电脑系统,包括中央处理器及其他周边设备。它使得为系统源代码进行测试及除错工作变得容易。其亦能用来在一部主机上模拟数部不同虚拟电脑。

    1.2 KVM部署与使用

    系统环境说明

    [root@kvm ~]# cat /etc/redhat-release 
    CentOS Linux release 7.4.1708 (Core) 
    [root@kvm ~]# uname -r
    3.10.0-693.el7.x86_64
    [root@kvm ~]# sestatus 
    SELinux status:                 disabled
    [root@kvm ~]# systemctl status firewalld.service 
    ● firewalld.service - firewalld - dynamic firewall daemon
       Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
       Active: inactive (dead)
         Docs: man:firewalld(1)
    [root@kvm ~]# hostname -I
    172.16.1.240 10.0.0.240
    # kvm主机内存不能低于4GB

    1.2.1 安装KVM虚拟化软件

    安装依赖包(可以使用本地yum源)

    yum install libvirt* virt-* qemu-kvm* -y

    安装软件说明内容:

    libvirt    # 虚拟机管理
    virt       # 虚拟机安装克隆
    qemu-kvm   # 管理虚拟机磁盘

    启动服务

    [root@kvm ~]# systemctl start libvirtd.service
    [root@kvm ~]# systemctl status libvirtd.servic

    安装VNC软件:

      下载vnc软件方法,tightvnc官网:http://www.tightvnc.com

      VNC软件,用于VNC(Virtual Network Computing),为一种使用RFB协议的显示屏画面分享及远程操作软件。此软件借由网络,可发送键盘与鼠标的动作及即时的显示屏画面。

      VNC与操作系统无关,因此可跨平台使用,例如可用Windows连接到某Linux的电脑,反之亦同。甚至在没有安装客户端程序的电脑中,只要有支持JAVA的浏览器,也可使用。

      安装VNC时,使用默认安装即可,无需安装server端。

     

    图 - vnc软件

    1.2.2 配置第一台KVM虚拟机

    使用命令

    [root@kvm ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /data/clsn.raw,format=raw,size=10 --cdrom /data/CentOS-7-x86_64-DVD-1511.iso --network network=default --graphics vnc,listen=0.0.0.0,port=5900 --noautoconsole

      注意:需要先将镜像文件拷贝到 /data/CentOS-7-x86_64-DVD-1511.iso 。

    使用参数说明:

     

    参数

    参数说明

    --virt-type HV_TYPE

    要使用的管理程序名称 (kvm, qemu, xen, ...)

    --os-type

    系统类型

    --os-variant DISTRO_VARIANT

    在客户机上安装的操作系统,例如:'fedora18'、'rhel6'、'winxp' 等。

    -n NAME, --name NAME

    客户机实例名称

    --memory MEMORY

    配置客户机虚拟内存大小

    --vcpus VCPUS

    配置客户机虚拟 CPU(vcpu) 数量。

    --disk DISK

    指定存储的各种选项。

    -cdrom CDROM   

    光驱安装介质

    -w NETWORK, --network NETWORK

    配置客户机网络接口。

    --graphics GRAPHICS

    配置客户机显示设置。

    虚拟化平台选项:

    -v, --hvm         

    这个客户机应该是一个全虚拟化客户机

    -p, --paravirt    

    这个客户机应该是一个半虚拟化客户机

    --container       

    这个客户机应该是一个容器客户机

    --virt-type HV_TYPE

    要使用的管理程序名称 (kvm, qemu, xen, ...)

    --arch ARCH       

    模拟 CPU 架构

    --machine MACHINE

    机器类型为仿真类型

    其它选项:

    --noautoconsole

    不要自动尝试连接到客户端控制台

    --autostart

    主机启动时自动启动域。

    --noreboot 

    安装完成后不启动客户机。

    以上信息通过 " virt-install --help " 获得。

       在启动的同时使用vnc连接

     

       下面就进入到安装系统的操作,关于系统安装的方法参考:http://www.cnblogs.com/clsn/p/7489784.html

    1.2.3 KVM虚拟机管理操作

      virsh命令常用参数总结

     

    参数

    参数说明

    基础操作

    list

    查看虚拟机列表,列出域

    start

    启动虚拟机,开始一个(以前定义的)非活跃的域

    shutdown

    关闭虚拟机,关闭一个域

    destroy(危险)

    强制关闭虚拟机,销毁(停止)域

    vncdisplay

    查询虚拟机vnc端口号

    配置管理操作

    dumpxml

    导出主机配置信息

    undefine

    删除主机

    define

    导入主机配置

    domrename

    对虚拟机进行重命名

    挂起与恢复

    suspend

    挂起虚拟机

    resume

    恢复虚拟机

    自启动管理

    autostart

    虚拟机开机启动

    autostart --disable

    取消虚拟机开机启动

    以上参数通过  “virsh  --help” 获得。

    操作过程:

    KVM虚拟机配置文件位置

    [root@kvm ~]# ll /etc/libvirt/qemu/centos7.xml

    修改KVM虚拟机配置的方法

    [root@kvm ~]# virsh edit centos7

       使用该命令修改可以对文件进行语法校验。

    备份与恢复

    备份虚拟机配置(关机时备份):

    [root@kvm ~]# virsh dumpxml centos7  > centos7.xml

    删除虚拟机配置

    # 查看
    [root@kvm ~]# virsh list --all 
     Id    名称                         状态
    ----------------------------------------------------
     -     centos7                        关闭
     # 删除
    [root@kvm ~]# virsh undefine centos7 
    域 centos7 已经被取消定义
    [root@kvm ~]# virsh list --all 
     Id    名称                         状态
    ----------------------------------------------------

    导入虚拟机

    # 导入
    [root@kvm ~]# virsh define centos7-off.xml 
    定义域 centos7(从 centos7-off.xml)
    # 查看
    [root@kvm ~]# virsh list --all 
     Id    名称                         状态
    ----------------------------------------------------
     -     centos7                        关闭

    修改虚拟机名称

    # 重命名
    [root@kvm ~]# virsh domrename centos7 clsn7
    Domain successfully renamed
    # 查看
    [root@kvm ~]# virsh list
     Id    名称                         状态
    ----------------------------------------------------
     9     clsn7                          关闭

    虚拟机挂起与恢复

    # 挂起虚拟机
    [root@kvm ~]# virsh suspend clsn7
    域 clsn7 被挂起
    # 查看状态
    [root@kvm ~]# virsh list --all
     Id    名称                         状态
    ----------------------------------------------------
     9     clsn7                          暂停

    恢复虚拟机

    [root@kvm ~]# virsh resume clsn7 
    域 clsn7 被重新恢复

    查询虚拟机vnc端口

    [root@kvm ~]# virsh vncdisplay clsn7 
    :0  
    # :0 即 为 5900 端口,以此类推 :1为5901 。

    开机自启动设置

    # 设置 libvirtd 服务开机自启动。
    [root@kvm ~]# systemctl is-enabled libvirtd.service 
    enabled

       设置宿主机开机虚拟机在其他

    [root@kvm ~]# virsh autostart clsn7 
    域 clsn7标记为自动开始
    # 实质为创建软连接
    [root@kvm ~]# ll /etc/libvirt/qemu/autostart/clsn7.xml 
    lrwxrwxrwx 1 root root 27 1月  22 12:17 /etc/libvirt/qemu/autostart/clsn7.xml -> /etc/libvirt/qemu/clsn7.xml

    取消开机自启动

    [root@kvm ~]# virsh autostart --disable clsn7 
    域 clsn7取消标记为自动开始

    1.3 kvm虚拟机console登录

    1.3.1 CentOS 7.X 版本console登录

    配置console登录

    在clsn7虚拟机内操作(该操作仅限centos7):

    [root@kvm ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
    [root@kvm ~]# reboot
    # 115200n8:能显示虚拟机的启动过程

    重启完成后,使用virsh console 连接虚拟机。

    [root@kvm ~]# virsh console clsn7 
    连接到域 clsn7
    换码符为 ^]
    CentOS Linux 7 (Core)
    Kernel 3.10.0-327.el7.x86_64 on an x86_64
    
    clsn7 login: root
    Password: 
    Last login: Mon Jan 22 12:24:48 from 192.168.122.1
    [root@clsn7 ~]# w
     12:26:11 up 0 min,  1 user,  load average: 0.09, 0.03, 0.01
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root     ttyS0                     12:26    3.00s  0.02s  0.01s w

    1.3.2 CentOS 6.X 版本console登录

    使用virsh console连接CentOS 6虚拟主机方法:

      安装一台centos6的kvm虚拟机

    virt-install --virt-type kvm --os-type=linux --os-variant rhel6 \
    --name clsn6 --memory 1124 --vcpus 1 \
    --disk /data/clsn6/clsn-6.raw,format=raw,size=10 \
    --cdrom /data/CentOS-6.9-x86_64-bin-DVD1.iso \
    --network network=default --graphics vnc,listen=0.0.0.0,port=5901 \
    --noautoconsole

      新安装一台虚拟机后,是无法通过virsh console 命令连入虚拟机中的,这时我们需要开启虚拟机的console功能。

      以下操作都在虚拟机中进行

    1、添加ttyS0的许可,允许root登陆

    [root@clsn6 ~]# echo "ttyS0" >> /etc/securetty 

    2、编辑/etc/grub.conf中加入console=ttyS0

       在该文件的第16行。kernel选项后添加

    [root@clsn6 ~]# sed -i '/\tkernel/s#.*#& console=ttyS0#g' /etc/grub.conf
    [root@clsn6 ~]# sync  # 同步配置到 /boot/grub/grub.conf
    [root@clsn6 ~]# cat -n  /etc/grub.conf 
         1    # grub.conf generated by anaconda
         2    #
         3    # Note that you do not have to rerun grub after making changes to this file
         4    # NOTICE:  You have a /boot partition.  This means that
         5    #          all kernel and initrd paths are relative to /boot/, eg.
         6    #          root (hd0,0)
         7    #          kernel /vmlinuz-version ro root=/dev/vda3
         8    #          initrd /initrd-[generic-]version.img
         9    #boot=/dev/vda
        10    default=0
        11    timeout=5
        12    splashimage=(hd0,0)/grub/splash.xpm.gz
        13    hiddenmenu
        14    title CentOS 6 (2.6.32-696.el6.x86_64)
        15        root (hd0,0)
        16        kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=48532582-c271-4c0a-b55f-395fe16cd8aa rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet console=ttyS0
        17        initrd /initramfs-2.6.32-696.el6.x86_64.img

    3、编辑/etc/inittab

      在最后一行加入内容 S0:12345:respawn:/sbin/agetty ttyS0 115200

    [root@clsn6 ~]# echo 'S0:12345:respawn:/sbin/agetty ttyS0 115200' >>/etc/inittab

    4、以上操作都完成后,重启虚拟机

    [root@clsn6 ~]# reboot

      以下操作在kvm宿主机上执行

    1、检查虚拟机的状态

    [root@kvm ~]# virsh list --all
     Id    名称                         状态
    ----------------------------------------------------
     11    clsn7                          running
     21    clsn6                          running

    2、进行连接测试

    [root@kvm ~]# virsh console clsn6 
    连接到域 clsn6
    换码符为 ^]  # 注:退出virsh console连接的方法,使用组合键Ctrl+]即可
    
    CentOS release 6.9 (Final)
    Kernel 2.6.32-696.el6.x86_64 on an x86_64
    
    clsn6 login: root
    Password: 
    Last login: Mon Jan 22 05:44:25 on ttyS0
    [root@clsn6 ~]# who
    root     ttyS0        2018-01-22 05:50
    # 登陆成功,查看登陆接口为之前设置的ttyS0

    1.4 KVM虚拟机磁盘、快照与克隆

    1.4.1 磁盘管理

      KVM qcow2、raw、vmdk等镜像格式说明:http://blog.csdn.net/zhengmx100/article/details/53887162

    # 创建一块qcow2的虚拟硬盘(仅测试使用,无实际意义)
    [root@kvm data]# qemu-img create -f qcow2 clsn.qcow2 2G
    [root@kvm data]# ls -l

    查看当前虚拟机硬盘信息

    [root@kvm ~]# qemu-img info /data/clsn.raw 
    image: /data/clsn.raw
    file format: raw
    virtual size: 10G (10737418240 bytes)
    disk size: 1.1G

    raw转qcow2格式:

    # 参数说明
    [root@kvm data]# qemu-img  --help |grep convert 
    qemu-img convert [-f fmt] [-O output_fmt] filename  output_filename

    转换原有磁盘格式

    [root@kvm data]# qemu-img convert -f raw -O qcow2 clsn.raw clsn.qcow2

    修改clsn7 虚拟机配置文件

    [root@kvm data]# virsh edit clsn7 
    修改前:
        <disk type='file' device='disk'>
          <driver name='qemu' type='raw'/>
          <source file='/data/clsn.raw'/>
          <target dev='vda' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
        </disk>
    修改后:
        <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2'/>
          <source file='/data/clsn.qcow2'/>
          <target dev='vda' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
        </disk>

    删除原磁盘文件

    [root@kvm data]# \rm clsn.raw

    启动虚拟机

    [root@kvm data]# virsh start clsn7 
    
    [root@kvm data]# virsh list --all 
     Id    名称                         状态
    ----------------------------------------------------
     22    clsn7                          running

    1.4.2 KVM虚拟机添加硬盘

    进入硬盘存放目录

    [root@kvm ~]# cd /data

    创建一块新的硬盘

    [root@kvm data]# qemu-img create -f qcow2 clsn7-add01.qcow2 5G 
    Formatting 'clsn7-add01.qcow2', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 lazy_refcounts=off 

    查看创建的硬盘信息

    [root@kvm data]# qemu-img info clsn7-add01.qcow2 
    image: clsn7-add01.qcow2
    file format: qcow2
    virtual size: 5.0G (5368709120 bytes)
    disk size: 196K
    cluster_size: 65536
    Format specific information:
        compat: 1.1
        lazy refcounts: false

    为虚拟机添加硬盘

    [root@kvm data]# virsh attach-disk clsn7 /data/clsn7-add01.qcow2 vdb --live --cache=none --subdriver=qcow2
    # 成功附加磁盘

    参数说明:

     

     

    参数

    参数说明

    vdb

    第二块硬盘

    --live

    热添加

    --subdriver

    驱动类型

    调整已添加硬盘的大小

    [root@kvm data]# virsh --help |grep disk 
        attach-disk                    #附加磁盘设备
        detach-disk                    #分离磁盘设备

    将已挂载的磁盘卸载下来

    [root@kvm data]# virsh detach-disk clsn7  vdb 
    成功分离磁盘

    调整磁盘大小

    # 使用参数
    [root@kvm data]# qemu-img --help |grep resize
      resize [-q] filename [+ | -]size

       增加1G容量

    [root@kvm data]# qemu-img resize clsn7-add01.qcow2 +1G
    Image resized.
    [root@kvm data]# qemu-img info clsn7-add01.qcow2 
    image: clsn7-add01.qcow2
    file format: qcow2
    virtual size: 6.0G (6442450944 bytes)
    disk size: 260K
    cluster_size: 65536
    Format specific information:
        compat: 1.1
        lazy refcounts: false

    重新讲磁盘添加到虚拟机

    [root@kvm data]# virsh attach-disk clsn7 /data/clsn7-add01.qcow2 vdb --live --cache=none --subdriver=qcow2

      以下在虚拟机中操作

    格式化磁盘

    [root@clsn7 ~]# mkfs.xfs /dev/vdb 

    挂载磁盘

    [root@clsn7 ~]# df -h |grep /dev/vdb
    /dev/vdb        6.0G   33M  6.0G   1% /opt    

    使用 xfs_growfs 刷新磁盘的信息

    [root@clsn7 ~]# xfs_growfs --help 
    xfs_growfs: invalid option -- '-'
    Usage: xfs_growfs [options] mountpoint

    1.4.3 快照管理

      注意:raw格式的磁盘无法创建快照

    创建快照

    [root@kvm data]# virsh snapshot-create clsn7 
    已生成域快照 1516607756

    查看主机快照列表

    [root@kvm data]# virsh snapshot-list  clsn7
     名称               生成时间              状态
    ------------------------------------------------------------
     1516607756           2018-01-22 15:55:56 +0800 running
    # 注:该名称为unix时间戳(格林威治时间)

    查看快照信息

    [root@kvm data]# virsh snapshot-info  clsn7 --snapshotname 1516607756

    登陆虚拟机,进行删除操作

    [root@clsn7 /]# ls -1|egrep -v 'proc|sys|run' |rm -rf

    还原快照

    [root@kvm data]# virsh snapshot-revert clsn7 --snapshotname 1516607756

    删除快照

    [root@kvm data]# virsh snapshot-delete  clsn7 --snapshotname 1516607756

    快照配置文件位置

    [root@kvm data]# cd  /var/lib/libvirt/qemu/snapshot/
    [root@kvm snapshot]# tree
    .
    └── clsn7
        └── 1516607756.xml

    1.4.4 kvm虚拟机克隆

      复制一个虚拟机,需修改如 MAC 地址,名称等所有主机端唯一的配置。

      虚拟机的内容并没有改变:virt-clone 不修改任何客户机系统内部的配置,它只复制磁盘和主机端的修改。所以像修改密码,修改静态 IP 地址等操作都在本工具复制范围内。如何修改此类型的配置,请参考 virt-sysprep。

      克隆常用命令:

    [root@kvm ~]# virt-clone --auto-clone -o clsn7 
    WARNING  设置图形设备端口为自动端口,以避免相互冲突。
    正在分配 ‘clsn-clone.ra 4% [-                 ] 1.5 MB/s | 464 MB  01:50:18 ETA

    参数说明:

     

     

    参数

    参数说明

    --auto-clone  

    从原始客户机配置中自动生成克隆名称和存储路径。

    -o ORIGINAL_GUEST,

    --original ORIGINAL_GUEST

    原始客户机名称;必须为关闭或者暂停状态。

    1.5 kvm虚拟机网络管理

    1.5.1 桥接网络配置

    1、设置桥接网络

    [root@kvm ~]# virsh iface-bridge eth0 br0
    使用附加设备 br0 生成桥接 eth0 失败
    已启动桥接接口 br0

       查看网卡配置文件

    # 查看 eth0 配置文件
    [root@kvm ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    ONBOOT=yes
    BRIDGE="br0"
    # 查看 br0 配置文件
    [root@kvm ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0 
    DEVICE="br0"
    ONBOOT="yes"
    TYPE="Bridge"
    BOOTPROTO="none"
    IPADDR="10.0.0.240"
    NETMASK="255.255.255.0"
    GATEWAY="10.0.0.254"
    IPV6INIT="yes"
    IPV6_AUTOCONF="yes"
    DHCPV6C="no"
    STP="on"
    DELAY="0"

    2、修改虚拟机网络配置

    [root@kvm ~]# virsh edit clsn7 
    修改前:
        <interface type='network'>
          <mac address='52:54:00:42:bf:bc'/>
          <source network='default'/>
          <model type='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </interface>
    修改后:
        <interface type='bridge'>
          <mac address='52:54:00:42:bf:bc'/>
          <source bridge='br0'/>
          <model type='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </interface>

       查看宿主机网桥

    [root@kvm ~]# brctl show 
    bridge name    bridge id        STP enabled    interfaces
    br0        8000.000c294d551b    yes        eth0
    virbr0     8000.5254006aaa40    yes        virbr0-nic
                                    vnet0
                                    vnet1

       查看防火墙规则:

        [root@kvm ~]# iptables -t nat  -nvL
        Chain PREROUTING (policy ACCEPT 195 packets, 24665 bytes)
         pkts bytes target     prot opt in     out     source               destination         
    
        Chain INPUT (policy ACCEPT 131 packets, 16209 bytes)
         pkts bytes target     prot opt in     out     source               destination         
    
        Chain OUTPUT (policy ACCEPT 272 packets, 24045 bytes)
         pkts bytes target     prot opt in     out     source               destination         
    
        Chain POSTROUTING (policy ACCEPT 272 packets, 24045 bytes)
         pkts bytes target     prot opt in     out     source               destination         
            0     0 RETURN     all  --  *      *       192.168.122.0/24     224.0.0.0/24        
            1   328 RETURN     all  --  *      *       192.168.122.0/24     255.255.255.255     
           29  1740 MASQUERADE  tcp  --  *      *       192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
            0     0 MASQUERADE  udp  --  *      *       192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
            3   252 MASQUERADE  all  --  *      *       192.168.122.0/24    !192.168.122.0/24 

    3、修改kvm虚拟机网卡配置文件

    [root@clsn7 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
    TYPE=Ethernet
    BOOTPROTO=static
    NAME=eth0
    DEVICE=eth0
    ONBOOT=yes
    IPADDR=10.0.0.110
    NETMASK=255.255.255.0
    GATEWAY=10.0.0.254
    DNS1=223.5.5.5

    测试网络连通性

    [root@clsn7 ~]# ping 223.5.5.5 -c1 
    PING 223.5.5.5 (223.5.5.5) 56(84) bytes of data.
    64 bytes from 223.5.5.5: icmp_seq=1 ttl=128 time=94.4 ms

    1.6 KVM虚拟机冷/热迁移

      在进行迁移之前需要准备一台与KVM配置相同的机器(KVM02),部署好kvm环境。

    1.6.1 虚拟机冷迁移

      在kvm02中安装kvm组件

    [root@kvm02 ~]# yum install libvirt* virt-* qemu-kvm* -y

      配置桥接网络

    [root@kvm02 ~]# virsh iface-bridge eth0 br0
    [root@kvm02 ~]# mkdir -p /data

      将虚拟机关机,导出配置文件

    [root@kvm data]# virsh dumpxml clsn7 >clsn7.xml

      将虚拟机文件传输到kvm02上

    [root@kvm data]# scp -rp  clsn7.xml clsn.qcow2  10.0.0.201:/data

      导入配置文件

    [root@kvm02 ~]# virsh define clsn7.xml

      启动虚拟机

    [root@kvm02 ~]# virsh start clsn7

      查看虚拟机状态

    [root@kvm02 ~]# virsh list --all 
     Id    名称                         状态
    ----------------------------------------------------
     5     clsn7                          running

        至此,一次KVM冷迁移就完成了

    1.6.2 virt-manager和kvm虚拟机热迁移(准备)

      实现kvm虚拟机热迁移核心:共享存储。在这里使用的时NFS共享存储,关于nfs的详情参考:http://www.cnblogs.com/clsn/p/7694456.html

    1、安装virt-manager所需桌面及vnc-server

    [root@kvm ~]# yum groupinstall "GNOME Desktop" -y
    # vnc-server端
    [root@kvm ~]# yum install tigervnc-server -y
    # virt-manager需要软件
    [root@kvm ~]# yum install openssh-askpass -y

    2、配置vnc服务

    复制vnc配置文件

    [root@kvm ~]# vi /usr/lib/systemd/system/vncserver@.services
    [root@kvm ~]# \cp /usr/lib/systemd/system/vncserver@.service  /usr/lib/systemd/system/vncserver@\:1.service

    修改配置文件,主要修改<USER>参数。

    [root@kvm ~]# egrep -v "^#|^$" /usr/lib/systemd/system/vncserver@\:1.service
    [Unit]
    Description=Remote desktop service (VNC)
    After=syslog.target network.target
    [Service]
    Type=forking
    User=root
    ExecStartPre=-/usr/bin/vncserver -kill %i
    ExecStart=/usr/bin/vncserver %i
    PIDFile=/root/.vnc/%H%i.pid
    ExecStop=-/usr/bin/vncserver -kill %i
    [Install]
    WantedBy=multi-user.target
    # 用户为root,家目录为root

    官方提供修改方法

    # Quick HowTo:
    # 1. Copy this file to /etc/systemd/system/vncserver@.service
    # 2. Replace <USER> with the actual user name and edit vncserver
    #    parameters appropriately
    #   ("User=<USER>" and "/home/<USER>/.vnc/%H%i.pid")
    # 3. Run `systemctl daemon-reload`
    # 4. Run `systemctl enable vncserver@:<display>.service`

    设置vnc连接时的密码,

    [root@kvm ~]# vncpasswd 
    Password:
    Verify:
    Would you like to enter a view-only password (y/n)? n  
    # y为创建只读用户,n为非只读用户。

    启动vnc服务,设置开机自启动

    [root@kvm ~]# systemctl start vncserver@\:1.services
    [root@kvm ~]# systemctl enable vncserver@\:1.services

    查看密码文件及其他配置文件位置

    [root@kvm ~]# ll ~/.vnc/

    3、配置NFS存储

    安装软件

    [root@kvm ~]# yum install nfs-utils rpcbind -y

    修改配置文件

    [root@kvm ~]# cat /etc/exports
    /data   172.16.1.0/24(rw,sync,all_squash,anonuid=0,anongid=0)

    启动nfs程序

    [root@kvm ~]# systemctl restart rpcbind 
    [root@kvm ~]# systemctl restart nfs
    # 设置开机自启动
    [root@kvm ~]# systemctl enable rpcbind 
    [root@kvm ~]# systemctl enable nfs

    在kvm02上安装nfs

    [root@kvm02 ~]#  yum install nfs-utils rpcbind -y

       查看共享信息

    [root@kvm02 ~]# showmount -e 172.16.1.240
    Export list for 172.16.1.240:
    /data 172.16.1.0/24

       挂载目录

    [root@kvm02 ~]# mount.nfs 172.16.1.240:/data /data
    # 加入开机自启动
    [root@kvm02 ~]# echo  'mount.nfs 172.16.1.240:/data /data' >>/etc/rc.local
    [root@kvm02 ~]# chmod +x /etc/rc.d/rc.local

    1.6.3 KVM虚拟机热迁移(实现)

    vnc连接KVM宿主机:

     

    图 - 连接地址

     

    图 - 输入vnc密码

    图 - 使用vmm 虚拟系统管理器

    添加KVM02宿主机

     

    图 - 添加新连接

    注:连接上KVM02机器即可

     

    图 - 添加上kvm02主机

     

    图 - 主机添加完成

    主机热迁移

     

    图 - 迁移1

     

    图 - 迁移2,选择要迁移到目的主机

     

    图 - 迁移过程

     

    图 - 迁移完成

    在kvm02上查看虚拟机状态

    [root@kvm02 ~]# virsh list --all 
     Id    名称                         状态
    ----------------------------------------------------
     7     clsn7                          running

    虚拟机配置查看方法:

    图 - clsn7 虚拟机配置信息

    说明:在热迁移的过程中可能会参数丢包的情况,一般不会超过1个包。

    [C:\~]$ ping 10.0.0.110 -t
    来自 10.0.0.110 的回复: 字节=32 时间=1ms TTL=64
    来自 10.0.0.110 的回复: 字节=32 时间=13ms TTL=64
    来自 10.0.0.110 的回复: 字节=32 时间=11ms TTL=64
    请求超时。
    来自 10.0.0.110 的回复: 字节=32 时间=4ms TTL=64
    来自 10.0.0.110 的回复: 字节=32 时间<1ms TTL=64
    来自 10.0.0.110 的回复: 字节=32 时间<1ms TTL=64

      至此,一次热迁移就完成了

    1.7 KVM链接克隆

    链接克隆脚本

    #!/bin/bash
    # kvm link clone scripts  
    # user clsn 
    # blog: https://www.nmtui.com
    # 2018-02-06
    ###
    
    # init
    if [ $# -ne 2 ]
      then 
        echo "Usage: $0 OLD_VMNAME NEW_VMNAME"
        exit 2
    fi
    LOG=/var/log/messages
    old_vm=$1
    new_vm=$2
    new_xml="/tmp/${new_vm}.xml"
    . /etc/init.d/functions
    
    # dump old xmlfile 
    virsh dumpxml $old_vm >$new_xml
    old_disk=`awk -F "'" '/source file/{print $2}'  $new_xml`
    tmp_dir=`dirname $old_disk`
    new_disk=${tmp_dir}/${new_vm}.qcow2
    
    # make link disk 
    qemu-img create -f qcow2 -b $old_disk $new_disk &>> $LOG
    
    # make over xml info 
    sed -i '/uuid/d' $new_xml
    sed -i '/mac address/d' $new_xml
    sed -i '2s#'$old_vm'#'$new_vm'#' $new_xml
    sed -i "s#$old_disk#$new_disk#g" $new_xml
    sed -i '/source mode/d' $new_xml
    
    # import new xml file
    virsh define $new_xml &>> $LOG
    
    # start new vm 
    virsh start $new_vm &>> $LOG
    if [ $? -eq 0 ]
      then 
       action "vmhost $new_vm start"  /bin/true 
    else 
       action "vmhost $new_vm start"  /bin/false
       echo "log info : $LOG"
    fi
    
    # END
    \rm $new_xml

    说明:

    1.7.1 手动克隆

    第一步:复制虚拟磁盘文件
    第二步:修改xml配置文件
      1)name
      2)uuid
      3)虚拟磁盘存储路径
      4)mac地址

    1.7.2脚本实现思路

    1) 备份old_vm的配置文件,并重定向生成一个新的虚拟机配置文件
    2)取出old_vm的磁盘路径
    3)创建新的链接磁盘文件
    4) 修改xml配置文件
    5) 导入新虚拟机
    6)启动测试

    1.8 参考文献

    [1]  https://zh.wikipedia.org/wiki/

    [2]  http://virtual.51cto.com/art/201303/386133.htm

    [3]  https://virt-manager.org

    [4]  https://zh.wikipedia.org/wiki/基于内核的虚拟机

    [5]  https://libvirt.org

    [6]  [ kvm ] 四种简单的网络模型 https://www.cnblogs.com/hukey/p/6436211.html

    [7]  https://www.cnblogs.com/xieshengsen/p/6215168.html

    [8]  http://wiki.ubuntu.org.cn/Kvm教程

    展开全文
  • KVM虚拟化技术

    千次阅读 2019-05-21 21:45:05
    KVM虚拟化 什么是虚拟化? 虚拟化,通过模拟计算机的硬件,来实现在同一台计算机上同时运行多个不同的操作系统的技术。 为什么要用虚拟化? 充分利用资源,软件运行环境的隔离,只有虚拟化才行实现。 场景1:同一...

    KVM虚拟化

    什么是虚拟化?

    虚拟化,通过模拟计算机的硬件,来实现在同一台计算机上同时运行多个不同的操作系统的技术。
    

    为什么要用虚拟化?

    充分利用资源,软件运行环境的隔离,只有虚拟化才行实现。
    
    场景1:同一台物理机运行多个php版本 php5.3(openssl,gd)  php5.5  php7.2
    场景2:机房的迁移,解决了硬件和系统的依赖
    场景3:openstacks环境,软件发布方式
    场景4:开发环境和测试环境,使用虚拟化
    场景5:业务的快速部署  
    
    虚拟化:提高了资源的利用率,各个服务的安全性隔离,解决了系统和硬件之间的依赖
    

    KVM虚拟化管理软件的安装

    安装软件

    yum install -y libvirt virt-install qemu-kvm
    
    libvirt        # 虚拟机管理软件
    virt-install   # 虚拟机的安装工具和克隆工具
    qemu-kvm       # 管理虚拟机的虚拟磁盘
    

    启动服务

    systemctl start libvirtd.service
    systemctl enable libvirtd.service
    

    启动一个kvm虚拟机

    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos7.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
    
    --virt-type               # 指定虚拟化类型
    --os-type                 # 指定系统类型
    --os-variant              # 指定系统版本
    --name                    # 指定虚拟机的名称
    --memory                  # 指定虚拟机内存
    --vcpus                   # 指定虚拟机CPU
    --disk                    # 指定虚拟机磁盘文件路径及名称、磁盘文件类型、磁盘空间
    --cdrom                   # 指定虚拟机安装的镜像
    --network                 # 指定网络
    --graphics                # 
    --noautocondole           # 不加改参数创建虚拟机的时候会夯住
    

    raw和qcow2的区别

    raw:裸格式,占用空间比较大,不支持快照功能,性能较好,不方便传输
    qcow2:cow(copy on write)占用空间小,支持快照,性能比raw差一点,方便传输
    

    KVM虚拟机的日常管理

    查看虚拟机列表

    virsh list
    virsh list --all
    

    开启虚拟机

    virsh start centos7     # 最后跟的是KVM虚拟机的名称
    

    关闭虚拟机

    virsh shutdown centos7  # 正常关闭
    virsh destroy centos7   # 拔电源
    

    查看虚拟机配置

    virsh dumpxml centos7
    virsh dumpxml centos7 > centos7-off.xml
    

    删除虚拟机

    # 删除虚拟机之前先关闭虚拟机
    virsh undefine centos7
    

    导入虚拟机

    virsh define centos7-off.xml
    

    修改虚拟机配置

    # 自带语法检查
    virsh edit centos7
    

    虚拟机重命名

    virsh domrename centos7 centos-7
    

    挂起虚拟机

    virsh suspend centos-7
    

    恢复虚拟机

    virsh resume centos-7
    

    查询vnc端口号

    virsh vncdisplay centos-7
    

    KVM虚拟机开机启动

    # KVM虚拟机开机启动前提是libvirtd开机启动。
    systemctl enable libvirtd
    # KVM开启自启
    virsh autostart centos-7
    

    KVM虚拟机console登录

    # 首先在虚拟机的内执行以下命令
    grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
    # 重启KVM虚拟机,在KVM虚拟机内执行,重启后真正的虚拟机会关机
    reboot
    # 开启KVM虚拟机并使用console连接虚拟机
    virsh start centos-7
    virsh console centos-7
    

    KVM虚拟机磁盘格式转换

    qemu-img convert -f raw -O qcow2 /data/centos7.raw /data/centos7.qcow2
    

    qemu-img命令管理

    # 查看虚拟机磁盘文件信息
    qemu-img info centos-7.raw
    # 创建虚拟硬盘
    qemu-img create -f qcow2 test.qcow2 10G
    # 调整虚拟磁盘容量
    qemu-img resize test.qcow2 +10G
    # 转换磁盘格式
    qemu-img convert -f raw -O qcow2 old.raw new.qcow2
                      原格式  新格式  原文件  新文件
    

    创建KVM虚拟机快照

    # 创建快照
    virsh snapshot-create centos7
    virsh snapshot-create-as centos7 --name install_ok
    # 查看快照
    virsh snapshot-list centos7
    # 还原快照
    virsh snapshot-revert centos7 --snapshowname centos7
    # 删除快照
    virsh snapshot-delete centos7  --snapshotname centos7
    

    raw不支持做快照,qcow2支持快照,并且快照就保存在qcow2的磁盘文件中.

    KVM虚拟机克隆

    完整克隆

    virt-clone --auto-clone -o web01 -n web02
    

    链接克隆

    # a.生成虚拟机磁盘文件
    qemu-img create -f qcow2 -b web01.qcow2 web02.qcow2
    # b.生成虚拟机配置文件
    virsh dumpxml web01 > web02.xml
    # 修改配置文件
    ## 修改名字
    ## 删除uuid
    ## 磁盘文件地址
    ## 删除mac地址
    # c.导入虚拟机
    virsh define web02.xml
    

    KVM虚拟机的桥接模式

    创建桥接网卡

    virsh iface-bridge eth0 br0
    

    取消桥接网卡

    virsh iface-unbridge br0
    

    创建KVM桥接网络的虚拟机

    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    

    热添加技术

    KVM虚拟机在线热添加硬盘

    # 临时添加
    virsh attach-disk web04 --source /data/web04-add.qcow2 --target vdb --subdriver qcow2
    # 永久添加
    virsh attach-disk web04 --source /data/web04-add.qcow2 --target vdb --subdriver qcow2 --config
    

    给KVM虚拟机添加新的硬盘

    # 创建一个新的硬盘
    qemu-img create -f qcow2 /data/new.qcow2 10G
    # 附加新硬盘
    virsh attach-disk web04 --source /data/new.qcow2 --target vdb --subdriver qcow2
    # 虚拟机中
    ## 格式化硬盘
    mkfs.xfs /dev/vdb
    ## 挂载硬盘
    mount /dev/vdb /mnt
    

    给KVM虚拟机硬盘扩容

    # 虚拟机中
    ## 卸载硬盘
    umount /mnt
    # 物理机中
    ## 剥离硬盘
    virsh detach-disk web04 --target vdb
    ## 扩容
    qemu-img resize /data/new.qcow2 +10G
    ## 再插上硬盘
    virsh attach-disk wbe04 --source /data/new.qcow2 --target vdb --subdriver qcow2
    # 虚拟机中
    ## 挂载硬盘
    mount /dev/vdb /mnt
    ## 重新加载
    xfs_growfs /mnt
    ## 查看挂载
    df -h
    

    根磁盘扩容

    # a.在宿主机上关闭虚拟机并调整虚拟机磁盘大小
    qemu-img resize oldboy.qcow2 +10G
    # b.虚拟机中fdisk重新调整分区
    fdisk /dev/vda
    # c.重启机器,执行xfs_growfs /dev/vda1
    xfs_growfs /dev/vda1
    ## 注:ext4文件系统需要用:resize2fs /dev/vda1
    

    KVM虚拟机在线热添加网卡

    # 添加网卡
    virsh attach-interface web04 --type bridge --source br0 --model virtio
    virsh attach-interface web04 --type bridge --source br0 --model virtio --config
    # 删除网卡
    virsh detach-interface web04 --type bridge --mac 52:54:00:35:d3:71
    

    KVM虚拟机在线热添加内存

    # 创建新的虚拟机,指定最大的内存值
    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    # 临时添加内存
    virsh setmem web04 1024M 
    # 永久添加内存
    virsh setmem web04 1024M --config
    

    KVM虚拟机在线热添加cpu

    # 创建新的虚拟机,指定最大的cpu个数
    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=10 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    # 临时添加cpu
    virsh setvcpus web04 4
    # 永久添加cpu
    virsh setvcpus web04 4 --config
    

    KVM虚拟机热迁移

    冷迁移kvm虚拟机:配置文件,磁盘文件
    热迁移kvm虚拟机:配置文件,nfs共享
    

    KVM虚拟机实现热迁移

    1:两边的环境(桥接网卡)
    2:实现共享存储(nfs)
    3:虚拟机桥接网络
    4:在线热迁移

    # 1.修改宿主机的主机名和hosts文件
    hostnamectl set-hostanme KVM01
    hostnamectl set-hostanme KVM02
    echo "10.0.0.11 KVM01" >>/etc/hosts
    echo "10.0.0.12 KVM02" >>/etc/hosts
    # 2.创建nfs服务器
    ## 具体部署nfs服务这里不详细解释
    systemctl restart rpcbind
    systemctl restart nfs
    # 3.宿主机挂载nfs
    mount -t nfs 10.0.0.13:/data/ /opt
    # 4.创建一个KVM虚拟机
    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name oldbi --memory 1024,maxmemory=2048 --vcpus 1,maxvcpus=10  --disk /opt/oldbi.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    # 5.热迁移
    virsh migrate --live --verbose oldbi qemu+ssh://10.0.0.12/system --unsafe
    
    展开全文
  • KVM虚拟化技术实践

    万次阅读 2017-02-01 16:01:01
    今天分享的文章是关于云计算中的kvm(虚拟化技术),通过本文你可以知道的是kvm是干什么的,如何使用kvm,如何通过java操作xml从而生成生成虚拟机。KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),...

    [版权申明:本文系作者原创,转载请注明出处]
    文章出处:http://blog.csdn.net/sdksdk0/article/details/54809159
    作者:朱培 ID:sdksdk0

    今天分享的文章是关于云计算中的kvm(虚拟化技术),通过本文你可以知道的是kvm是干什么的,如何使用kvm,如何通过java操作xml从而生成生成虚拟机。

    一、虚拟化简介

    系统虚拟化是将底层物理设备与上层操作系统、软件分离的一
    种去耦合技术,在一台物理机器上逻辑的划分出多台机器。
    • 虚拟化的目标是实现IT资源利用效率和灵活性的最大化

    在一台物理主机上虚拟出多个虚拟计算机(虚拟机,Virtual
    Machine,VM),其上能同时运行多个独立的操作系统,这
    些客户操作系统(Guest OS)通过虚拟机管理器(Virtual
    Machine Monitor,VMM,也称作Hypervisor)访问实际
    的物理资源。

    KVM 全称是 基于内核的虚拟机(Kernel-based
    Virtual Machine),它是一个 Linux 的一个内核模块,该内
    核模块使得 Linux 变成了一个 Hypervisor:
    它由 Quramnet 开发,该公司于 2008年被 Red Hat 收购。
    • 它支持 x86 (32 and 64 位), s390, Powerpc 等 CPU。
    • 它从 Linux 2.6.20 起就作为一模块被包含在 Linux 内核中。
    • 它需要支持虚拟化扩展的 CPU。
    • 它是完全开源的。

    二、使用虚拟化的原因

    为什么我们要使用虚拟化技术。当公司的服务器越来越多,我们需要充分利用资源,也需要统一运维管理。
    主要原因可以总结如下:

    1. 打破“一台服务器对应一套应用”的模
      式,将物理服务器进行整合,提升利用
    2. 服务器和相关IT硬件更少,节省了机房空
      间,也减少了散热和电力需求
    3. 具备灵活数据备份和应用迁移机制,保
      障服务永不中断
    4. 资源动态调配和模板化部署,应用系统
      快速上线,及时响应业务变化。

    这里写图片描述

    虚拟化分为3类

    1. 全虚拟化
    2. 半虚拟化
    3. 硬件辅助的虚拟化

    无虚拟化

    1. – CPU一般设为四个Ring
    2. – Kernel Mode一般跑在Ring 0上
    3. – User Mode一般跑在Ring 3上
    4. – 对于一个普通的传统的Linux系统没有问题

    • 虚拟化

    1. – 在Guest机器和Host机器中间加一层Hypervisor
    2. – Host机器看它像跑在自己上面的程序
    3. – Guest机器看它像自己所运行的硬件
    4. – 如果Host机器和Guest机器都跑相同的Linux,它们的Kernel都想运行在Ring 0。

    三、常见的虚拟化技术

    例如很常见的VMWare、VirtualBox、Citrix Xen、kvm等。桌面虚拟化 将原本在本地电脑安装的桌面系统统一在后端数据中心进
    行部署和管理; 用户可以通过任何设备,在任何地点,任何时间访问属于
    自己的桌面系统环境。还有服务器虚拟化。包括全虚拟化(Full-Virtulization):
    无需修改操作系统,VM ESXi、Linux KVM
    • 半虚拟化(Para-Virtulization):
    集成半虚拟化代码,直接运行特权指令,性能接近物理机,需要修改操作
    系统,
    MS Hyper-V、 Ctrix Xen、IBM PowerVM
    • 操作系统层虚拟化
    开发、测试环境,VM Workstation、VM Server

    四、kvm环境配置

    下面介绍的操作流程是在centos6.6系统中演示。首先把防火墙关掉:

      Service iptables stop
        Chkconfig iptables off

    如果你的是centos7关闭防火墙:

        systemctl stop firewalld.service 
        systemctl disable firewalld.service

    1、进行cpu检测,

        egrep -c '(vmx|svm)' /proc/cpuinfo

    命令结果大于0表示cpu支持虚拟化。如果是等于0,就需要手动勾选虚拟化引擎。

    这里写图片描述

    如果linux的系统是在VMware Workstation上的,需要将cpu设置为支持硬件虚拟化。需要在设置中把处理器核数里面的虚拟化引擎(虚拟化Intel VT-X/EPT…)这个选项勾上。

    这里写图片描述

    2、kvm安装

    安装命令kvm:

        yum  install qemu-kvm

    • 安装虚拟化管理工具:

      yum install virt-manager libvirt libvirt-python python-virtinst  bridge-utils

    • libvirt:操作和管理KVM虚机的虚拟化 API,使用 C 语言编写,可以
    由 Python,Ruby, Perl, PHP, Java 等语言调用。可以操作包括 KVM,
    vmware,XEN,Hyper-v, LXC 等 Hypervisor。
    • Virsh:基于 libvirt 的 命令行工具 (CLI)
    • Virt-Manager:基于 libvirt 的 GUI 工具

    3、kvm内核模块

    将kvm嵌入到内核:

        modprobe kvm
        modprobe kvm-intel

    然后使用命令查看是否已经嵌入成功,

        lsmod | grep kvm

    如果显示下面的结果则代表嵌入成功。

    [root@controller ~]# lsmod | grep kvm
    kvm_intel 55496 0
    kvm 337900 1 kvm_intel
    [root@controller ~]#

    4、启动libvirt

        service libvirtd restart
        chkconfig libvirtd on

    5、资源准备

    新建kvmtest目录。我们就是这个目录下进行kvm测试。

     mkdir  /kvmtest

    然后将已经下载好的 CentOS-6.8-x86_64-minimal.iso上传到这个/kvmtest目录下。这里需要说明一下,我的系统是centos6.6的,然后对于6.6或者6.8的迷你版系统兼容更好,否则我们在后面创建电脑之后可能会发生无法启动的问题。对于其他版本开机时可能会遇到 “no filename or root path specified”的错误。

    6、创建安装盘

      qemu-img create -f qcow2 /kvmtest/centos-6.8.qcow2 
        10G

    7、创建虚拟机

     virt-install --virt-type kvm --name centos-6.8 --ram 1024 \
        --vcpus 1 \
        --cdrom=/kvmtest/CentOS-6.8-x86_64-minimal.iso \
        --disk /kvmtest/centos-6.8.qcow2,format=qcow2 \
        --network network=default \
        --graphics vnc,listen=0.0.0.0 --noautoconsole \
        --os-type=linux --os-variant=rhel6

    以下是各参数代表的意思:

    1. -n NAME
      指定虚拟机的名称
    2. -r MEMORY
      指定虚拟机的内存用量
    3. -u UUID
      指定虚拟机的唯一通用标识符
      (Universally Unique Identifier,UUID)。
      省略这个参数时,virt-install 将会自动产生
    4. –vcpus=VCPUS
      指定虚拟机的虚拟 CPU (Virtual CPU,VCPU) 数量
      -f DISKFILE
      指定虚拟磁盘的文件路径名称
      -s DISKSIZE
      用来指定虚拟磁盘的大小,这个参数需配合-f 使用。
      DISKSIZE为虚拟磁盘的大小,单位是GB
      -m MAC
      指定虚拟机的网络卡之硬件地址。
      这个参数可以省略,省略时virt-install 将自动产生
      -p 以半虚拟化的方式建立虚拟机
      -l LOCATION 指定安装来源

    8、创建完成之后我们就可以使用命令来查看虚拟机了。

        virsh  list --all

    因为我这边创建了3台,所以可以看到有3台虚拟机。

    这里写图片描述

    shut off代表的是关机中的意思。你可以参照下面的命令来查看虚拟机的信息。

    例如我这里需要开启一台,命令就是

    virsh start centos-6.8
    

    virsh list # 显示本地活动虚拟机
    • virsh start openSuse # 启动名字为ubuntu的非活动虚拟机
    • virsh create ubuntu.xml # 创建虚拟机(创建后,虚拟机立即执行,成为活
    动主机)
    • virsh suspend openSuse # 暂停虚拟机
    • virsh resume ubuntu # 启动暂停的虚拟机
    • virsh shutdown ubuntu # 正常关闭虚拟机
    • virsh destroy ubuntu # 强制关闭虚拟机
    • virsh dominfo openSuse # 显示虚拟机的基本信息
    • virsh dumpxml openSuse # 显示虚拟机的当前配置文件
    • virsh setmem ubuntu 51200 # 给不活动虚拟机设置内存大小
    • virsh setvcpus ubuntu 4 # 给不活动虚拟机设置cpu个数
    • virsh edit ubuntu # 编辑配置文件(一般用在刚定义完VM)

    9、客户端连接。
    我们可以使用命令

    netstat -natp
    

    来查看启动的进程。我们可以看到5900端口的进程是/qemu-kvm。

    这里写图片描述

    启动一台是5900,那么启动两台就是5900和5901,依次类推。
    我们可以在window系统中使用vnc-4_1_3-x86_win32_viewer.exe来连接。

    输入ip地址和端口号进行连接,例如的我的是192.168.44.146
    这里写图片描述

    然后就和平常的linux系统的安装流程来操作就行。安装好之后就可以连接进来操作即可。root 123456

    这里写图片描述

    在这里把电源模块安装好。
    电源管理:
    yum install acpid

    yum install tcpdump

    五、kvm的xml文件

    我们需要知其然也要知其所以然。那么我们是怎样做到在VMware Workstation虚拟出来的centos6.6系统中再其中虚拟化出来一台centos6.8系统。
    使用ifconfig命令可以查看IP网络配置。

    我们进入到/etc/libvirt/qemu目录下。我们可以看到有centos-6.8.xml文件。

    这里写图片描述

    在这个xml文件可以看到里面有虚拟机名字配置,磁盘大小配置等。那么这样我们就可以看出来了,原来这样一个centos6.8只需要一个xml文件就可以搞定,是不是我们可以复制一份这个xml文件就可以生成一个虚拟机了呢?答案是肯定了,激动人心的时候到了,那么我们就复制一份珍贵xml文件,然后改改名字呗。

    cp  centos-6.8.xml centos-6.8.01.xml
    

    然后vi新的这个centos-6.8.01.xml文件,将其虚拟机名字改为centos-6.8.01,这样我们就有了一台新的虚拟机了。

    那么我们如何启动我们刚才新的这台机器了。使用下面的命令:

    virsh define 模板文件路径

    例如我的是:

    virsh define  /etc/libvirt/qemu/centos-6.8.02.xml
    

    如果我们不想要了可以使用下面的命令移除虚拟机(virsh undefine 虚拟机名)

    virsh undefine centos-6.8  
    

    六、通过JAVA编程控制KVM

    在上一个章节中我们知道了一个kvm虚拟机我们可以使用xml文件来控制,那么我们自然也可以用java程序来写xml文件,从而生成虚拟机。如果你使用过阿里云或者腾讯云等云服务器的话你就知道,上面可以自定义选择cpu核数内存磁盘什么的,不就类似操作不同的参数,从而生成不同的xml文件,最后生成云服务器了。现在对于阿里腾讯等这些云服务器又增加的想法没,嘿嘿嘿!

    在Libvirt中有使用java操作kvm的API。

    我们知道在我的centos6.6中安装了qume-kvm,那么我们想要从其他地方(例如windos中)想要远程访问怎么办呢?所以我们需要对linux服务器做相应的设置,把端口打开,这样才能让其他的来访问我这个kvm,从而进行操作。

    1、启用tcp的端口。修改配置文件

    vi  /etc/sysconfig/libvirtd
    

    然后打开里面的如下内容,把“#”去掉

    LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf
    LIBVIRTD_ARGS="--listen"
    

    然后再下面的文件中修改:

    vi /etc/libvirt/libvirtd.conf

    listen_tls = 0
    listen_tcp = 1
    tcp_port = “16509”
    listen_addr = “0.0.0.0”
    auth_tcp = “none”连接测试:
    在window中安装Libvirt,然后打开virsh-launcher.bat

     virsh -c qemu+tcp://192.168.44.146/system

    在这里我们可以看到在之前linux服务器中的虚拟机。
    这里写图片描述

    3、在eclipse中操作kvm
    新建java工程,导入libvirt-0.5.1.jar和jna-3.5.0.jar。
    然后就可以愉快的进行编码操作了:

    public class Test {
        public static void testVM() { 
            try { 
                Connect conn = new Connect("qemu+tcp://192.168.44.146/system"); 
    
                 conn.domainLookupByName("centos-6.8").shutdown();
            //    conn.domainLookupByName("centos-6.6-02").create();
            //   conn.domainLookupByName("centos-6.6").shutdown();
                 // conn.domainLookupByName("centos-6.6-02").create();
    
    
            } catch (LibvirtException e) { 
                e.printStackTrace(); 
            } 
        } 
        public static void main(String[] args) {
            testVM();
        }
        }

    在这里shutdown是可以关机,然后create是开机,而不是我们传统理解上的start。当然你有强迫症的话可以通过修改源码将create方法改为start。

    4、生成xml文件

    public class Test02 {
    
            public static void main(String[] args) {
                Connect conn = null;
                int flags = 0;
                //jdom dom4j
    
                try {
                      conn = new Connect("qemu+tcp://192.168.44.146/system");
    
    
    
    
                     String dumpxml ="<domain type='kvm'> "+
                             " <name>bjsxtvm03</name> "
                        + "  <memory unit='KiB'>1048576</memory>"
                        + " <currentMemory unit='KiB'>1048576</currentMemory>"
                        + " <vcpu placement='static'>1</vcpu>"
                        + " <os>"
                        + "   <type arch='x86_64' machine='rhel6.6.0'>hvm</type>"
                        + "   <boot dev='hd'/>"
                        + " </os>"
                        + "  <features>"
                        + "   <acpi/>"
                        + "    <apic/>"
                        + "    <pae/>"
                        + "  </features>"
                        + "  <clock offset='utc'/>"
                        + "  <on_poweroff>destroy</on_poweroff>"
                        + " <on_reboot>restart</on_reboot>"
                        + " <on_crash>restart</on_crash>"
                        + " <devices>"
                        + "  <emulator>/usr/libexec/qemu-kvm</emulator>"
                        + " <disk type='file' device='disk'>"
                        + "   <driver name='qemu' type='qcow2' cache='none'/>"
                        + "   <source file='/kvmtest/centos-6.6-04.qcow2'/>"
                        + "   <target dev='vda' bus='virtio'/>"
                        + "    <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>"
                        + "  </disk>"
                        + "  <disk type='block' device='cdrom'>"
                        + "     <driver name='qemu' type='raw'/>"
                        + "    <target dev='hdc' bus='ide'/>"
                        + "    <readonly/>"
                        + "    <address type='drive' controller='0' bus='1' target='0' unit='0'/>"
                        + "  </disk>"
                        + "   <controller type='usb' index='0' model='ich9-ehci1'>"
                        + "    <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/>"
                        + "  </controller>"
                        + "  <controller type='usb' index='0' model='ich9-uhci1'>"
                        + "    <master startport='0'/>"
                        + "    <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/>"
                        + "  </controller>"
                        + "  <controller type='usb' index='0' model='ich9-uhci2'>"
                        + "    <master startport='2'/>"
                        + "    <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/>"
                        + "  </controller>"
                        + "  <controller type='usb' index='0' model='ich9-uhci3'>"
                        + "    <master startport='4'/>"
                        + "    <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/>"
                        + "  </controller>"
                        + "  <controller type='ide' index='0'>"
                        + "   <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>"
                        + "  </controller>"
                        + " <interface type='network'>"
                        + "    <source network='default'/>"
                        + "    <model type='virtio'/>"
                        + "    <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>"
                        + "  </interface>"
                        + "  <serial type='pty'>"
                        + "    <target port='0'/>"
                        + "  </serial>"
                        + "  <console type='pty'>"
                        + "    <target type='serial' port='0'/>"
                        + "  </console>"
                        + "  <input type='tablet' bus='usb'/>"
                        + "  <input type='mouse' bus='ps2'/>"
                        + "  <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>"
                        + "    <listen type='address' address='0.0.0.0'/>"
                        + "  </graphics>"
                        + "  <video>"
                        + "   <model type='cirrus' vram='9216' heads='1'/>"
                        + "   <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>"
                        + " </video>"
                        + " <memballoon model='virtio'>"
                        + "  <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>"
                        + " </memballoon>" + "</devices>" + "</domain>"; 
    
                    Domain dm = null;
    
                    Domain dm1 = conn.domainDefineXML(dumpxml);
    
                    dm1.create();//start 
    
                    //Domain dm1 = conn.domainDefineXML(dumpxml); //创建一个域,但不启动
                    //dm1.undefine(); //undefind一个域,如果活动,则不停止
                    /****
                    try{
                        Domain dm1 =conn.domainLookupByName("bjsxtvm03");
                    }
                    catch (LibvirtException e) {
                        System.out.println("libvirt 错误" + e);
                        // TODO: handle exception
                    }
                    if(dm!=null)
                    {
    
                        dm.undefine();
    
                    }
                    ****/
    
                    /********
                    Domain dm2 = conn.domainDefineXML(dumpxml);
                    dm2.undefine();
                    *******/
    
                } catch (LibvirtException e) { //LibvirtException 返回错误详细信息
                    System.out.println("exception caught:" + e);
                    System.out.println("获取的错误;" + e.getError());
                }
    
                System.out.println("Clean exit");
    
            }
    
        }

    这里特别提醒一下,在window中操作kvm可能会遇到各种奇奇怪怪的问题,毕竟版本兼容比较麻烦。强烈建议在centos图形版的eclipse中连接kvm操作。

    总结:虚拟化技术为日后的云平台的架设打好基础,如果对于kvm不理解的话,那么对于openstack的学习还是会有一定的影响。平时需要对学习进行总结,找到知识互通的地方。这样对于云计算整体算是基础的认知。对于kvm在本篇文章中没有介绍到的有网络桥接,增加磁盘配置。

    展开全文
  • 文章目录前言什么是虚拟化为什么要用虚拟化虚拟化技术的优势KVM简介关于KVM关于Virtual Machine Manager其他虚拟化软件KVM虚拟化平台部署 前言 什么是虚拟化 在计算机技术中,虚拟化(技术)或虚拟技术(英语:...

    前言

    什么是虚拟化

    在计算机技术中,虚拟化(技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境。
    在这里插入图片描述
    由此,打破实体结构间的不可切割的障碍,使用户可以比原本的配置更好的方式来应用这些电脑硬件资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制。

    一般所指的虚拟化资源包括计算能力和数据存储。

    由于目前信息技术领域的很多企业都曾在宣传中将该企业的某种技术称为虚拟化技术,这些技术涵盖的范围可以从Java虚拟机技术到系统管理软件,这就使得准确的界定虚拟技术变得困难。因此各种相关学术论文在谈到虚拟技术时常常提到的便是如前面所提到的那个不严格的定义。

    为什么要用虚拟化

    • 同一台物理机运行多个不同版本应用软件

    • 硬件依赖性较低和便于数据迁移
      在这里插入图片描述

    虚拟化技术的优势

    1.降低运营成本

    服务器虚拟化降低了IT基础设施的运营成本,令系统管理员摆脱了繁重的物理服务器、OS、中间件及兼容性的管理工作,减少人工干预频率,使管理更加强大、便捷。

    2.提高应用兼容性

    服务器虚拟化提供的封装性和隔离性使大量应用独立运行于各种环境中,管理人员不需频繁根据底层环境调整应用,只需构建一个应用版本并将其发布到虚拟化后的不同类型平台上即可。

    3.加速应用部署

    采用服务器虚拟化技术只需输入激活配置参数、拷贝虚拟机、启动虚拟机、激活虚拟机即可完成部署,大大缩短了部署时间,免除人工干预,降低了部署成本。

    4.提高服务可用性

    用户可以方便地备份虚拟机,在进行虚拟机动态迁移后,可以方便的恢复备份,或者在其他物理机上运行备份,大大提高了服务的可用性。

    5.提升资源利用率

    通过服务器虚拟化的整合,提高了CPU、内存、存储、网络等设备的利用率,同时保证原有服务的可用性,使其安全性及性能不受影响。

    6.动态调度资源

    在服务器虚拟化技术中,数据中心从传统的单一服务器变成了统一的资源池,用户可以即时地调整虚拟机资源,同时数据中心管理程序和数据中心管理员可以灵活根据虚拟机内部资源使用情况灵活分配调整给虚拟机的资源。

    7.降低能源消耗

    通过减少运行的物理服务器数量,减少CPU以外各单元的耗电量,达到节能减排的目的。

    KVM简介

    在这里插入图片描述
    KVM,基于内核的虚拟机(英语:Kernel-based Virtual Machine,缩写为 KVM),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor。KVM在2007年2月被导入Linux 2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上。

    KVM在具备Intel VT或AMD-V功能的x86平台上运行。它也被移植到S/390,PowerPC与IA-64平台上。在Linux内核3.9版中,加入ARM架构的支持。

    KVM目前由Red Hat等厂商开发,对CentOS/Fedora/RHEL等Red Hat系发行版支持极佳。

    关于KVM

    1、KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机)。
    2、是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的Linux全虚拟化解决方案。
    3、它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。
    4、KVM还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。
    5、KVM能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)同时KVM还能够使用ksm技术帮助宿主服务器节约内存。
    6、在主流的Linux内核,如2.6.20以上的内核均已包含了KVM核心。

    关于Virtual Machine Manager

    在电脑运算中,红帽公司的Virtual Machine Manager是一个虚拟机管理员,可以让用户管理多个虚拟机。基于内核的虚拟机libvirt与Virtual Machine Manager。

    Virtual Machine Manager可以让用户:

    • 创建、编辑、引导或停止虚拟机。

    • 查看并控制每个虚拟机的控制台。

    • 查看每部虚拟机的性能以及使用率。

    • 查看每部正在运行中的虚拟机以及主控端的即时性能及使用率信息。

    • 不论是在本机或远程,皆可使用KVM、Xen、QEMU。

    在这里插入图片描述

    其他虚拟化软件

    🍪 Xen

    Xen是一个开放源代码虚拟机监视器,由XenProject开发。它打算在单个计算机上运行多达128个有完全功能的操作系统。

    在旧(无虚拟硬件)的处理器上执行Xen,操作系统必须进行显式地修改(“移植”)以在Xen上运行(但是提供对用户应用的兼容性)。这使得Xen无需特殊硬件支持,就能达到高性能的虚拟化。

    🍪 QEMU

    QEMU是一套由Fabrice Bellard所编写的模拟处理器的自由软件。它与Bochs,PearPC近似,但其具有某些后两者所不具备的特性,如高速度及跨平台的特性。经由KVM(早期为kqemu加速器,现在kqemu已被KVM取代)这个开源的加速器,QEMU能模拟至接近真实电脑的速度。QEMU有两种主要运作模式:

    User mode模拟模式,亦即是用户模式。

    QEMU能引导那些为不同中央处理器编译的Linux程序。而Wine及Dosemu是其主要目标。

    System mode模拟模式,亦即是系统模式。

    QEMU能模拟整个电脑系统,包括中央处理器及其他周边设备。它使得为系统源代码进行测试及除错工作变得容易。其亦能用来在一部主机上模拟数部不同虚拟电脑。

    KVM虚拟化平台部署

    一、虚拟机资源

    CPU:双核双线程-CPU虚拟化开启
    内存:8G
    硬盘:300G
    双网卡:单网卡
    作系统:Centos7.6(1810)
    在这里插入图片描述

    二、实验环境

    1、环境优化

    #是否反解DNS,设置为NO可以让客户端连接服务器更快

    [root@kvm ~]# vim /etc/ssh/sshd_config

    #按/UseDNS 可以快速找到UseDNS 那一行

    #取消DNS注释,改为NO

    UseDNS no
    

    然后:wq 保存退出
    在这里插入图片描述

    2、制作本地yum仓库

    [root@kvm ~]# mkdir /abc
    
    [root@kvm ~]# cd /etc/yum.repos.d/
    
    [root@kvm yum.repos.d]# ls
    CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo
    CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo
    
    [root@kvm yum.repos.d]# mkdir bak
    [root@kvm yum.repos.d]# mv CentOS-* bak
    [root@kvm yum.repos.d]# ls
    bak
    
    [root@kvm yum.repos.d]# vim local.repo
    
    [local]
    name=kvm
    baseurl=file:///abc
    gpgcheck=0
    enabled=1
    [root@kvm yum.repos.d]# yum clean all 
    [root@kvm yum.repos.d]# yum repolist
    
    [root@kvm ~]# vim /etc/fstab
    /dev/cdrom /abc iso9660 defaults 0 0
    [root@kvm ~]# mount -a 
    
    

    在这里插入图片描述

    3、关闭防火墙、核心防护

    [root@kvm yum.repos.d]# systemctl stop firewalld
    
    [root@kvm yum.repos.d]# systemctl disable firewalld
    Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
    Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
    
    [root@kvm yum.repos.d]# setenforce 0
    

    在这里插入图片描述
    三、安装KVM

    安装KVM基本组件

    #安装 GNOME 桌面环境  如果装了图形界面可以不需要装
    yum groupinstall -y "GNOME Desktop"
    
    #KVM 模块
    yum -y install qemu-kvm
    
    #安装KVM 调试工具,可不安装
    yum -y install qemu-kvm-tools
    
    #构建虚拟机的命令行工具
    yum -y install virt-install
    
    #qemu 组件,创建磁盘、启动虚拟机等
    yum -y install qemu-img
    
    #网络支持工具
    yum -y install bridge-utils
    
    #虚拟机管理工具
    yum -y install libvirt
    
    #图形界面管理虚拟机	
    yum -y install virt-manager
    
    #以下是安装的内容
    yum groupinstall -y "GNOME Desktop"
    yum -y install qemu-kvm
    yum -y install qemu-kvm-tools
    yum -y install virt-install
    yum -y install qemu-img
    yum -y install bridge-utils
    yum -y install libvirt
    yum -y install virt-manager
    

    #检测CPU是否支持虚拟化

    cat /proc/cpuinfo | grep vmx
    

    在这里插入图片描述

    #查看KVM模块是否已安装

    Lsmod:显示已载入的系统模块
    [root@kvm ~]# lsmod | grep kvm
    kvm_intel             183621  0 
    kvm                   586948  1 kvm_intel
    irqbypass              13503  1 kvm
    

    在这里插入图片描述
    #设置开启启动界面的显示模式

    ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
    

    在这里插入图片描述

    三、设置KVM网络

    • NAT: 默认设置,数据包由 NAT 方式通过主机的接口进行
      传送,可以访问外网,但是无法从外部访问虚拟机网络
    • 网桥:这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持(一般有线网卡都支持)

    使用Bridge网桥模式进行部署

    vim /etc/sysconfig/network-scripts/ifcfg-ens33
    

    在这里插入图片描述

    vim /etc/sysconfig/network-scripts/ifcfg-br0
    

    在这里插入图片描述

    然后把网卡重启一下

    systemctl restart network 
    

    四、KVM部署与管理

    #创建KVM存储和镜像数据的目录、上传centos7镜像

    [root@kvm network-scripts]# mkdir -p /data_kvm/iso
    [root@kvm network-scripts]# mkdir -p /data/_kvm/store
    [root@kvm network-scripts]# mkdir /abc
    [root@kvm network-scripts]# mount.cifs //192.168.226.1/share /mnt
    

    在这里插入图片描述
    #查看镜像

    ll /data_kvm/iso/
    

    在这里插入图片描述
    #使用虚拟系统管理器管理虚拟机

    创建思路:
    ① 创建存储池(ISO、STORE)
    ② 添加存储卷
    ③ 创建虚拟机

    [root@kvm kvmdata]# virt-manager
    

    在这里插入图片描述
    ① 第一步:创建存储池
    在这里插入图片描述
    在这里插入图片描述

    然后步骤1忘记截图了,就是输入一个存放目录的名字就行了 随便输一个

    步骤2:
    在这里插入图片描述
    ② 创建存储卷
    在这里插入图片描述
    ③ 创建虚拟机
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    然后就好了

    在这里插入图片描述

    展开全文
  • 部署KVM虚拟化平台 一、搭建KVM虚拟化平台 1、前置知识点 (1)什么是虚拟化 把硬件资源从物理方式转变为逻辑方式,打破原有物理结构,使用户可以灵活管理这些资源,并且允许1台物理机上同时运行多个操作系统,以...
  • 在我们介绍KVM之前,首先必须要认识什么是虚拟化,KMV就是在虚拟化不断发展和优化的过程中而逐渐成熟的一个技术。 根据统计,大部分企业的服务器和数据中心能效实际上很低,日常的服务器使用率甚至不足10%,其他的...
  • 文章目录1:什么是云计算2:云计算的服务类型3:为什么要用云计算4:云计算的基础KVM虚拟化4.1:什么是虚拟化?4.2 :linux虚拟化软件的差别4.3 安装kvm虚拟化管理工具4.4:安装一台kvm虚拟机4.5:kvm虚拟机的virsh...
  • KVM虚拟化

    2021-05-31 18:39:39
    文章目录前言一、虚拟化技术发展二、虚拟化类型三、虚拟化特性1.优势2.劣势3.案例4.VMM主要功能四、KVM架构及原理1.KVM虚拟化架构/模式2.KVM原理3.KVM工作流程4、虚拟化前后的对比 前言 在我们介绍KVM之前,首先必须...
  • KVM 虚拟化技术(一)

    千次阅读 2018-06-22 13:36:52
    1.1 前言1.1.1 什么是虚拟化?在计算机技术中,虚拟化技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来...
  • 这里写目录标题一,什么是虚拟化技术二,虚拟化技术发展1,雏形:2,虚拟化类型3,虚拟化特性:优势劣势4, 虚拟化应用场景案例:三,KVM简介:1,如何理解KVM广义KVM:2,KVM架构及原理2.1KVM 虚拟化架构/三种模式...
  • 例如CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。 2、虚拟化发展的阶段 到目前为止,虚拟化...
  • Linux云计算虚拟化-KVM桌面虚拟化技术 1. 什么是虚拟化? 虚拟化技术: ①仿真虚拟化:对系统硬件没有要求,性能最低。如:vmware。 ②半虚拟化加粗样式:虚拟机可以使用真机物理硬件,性能高,但需要修改内核。如:...
  • kvm虚拟化之cpu虚拟化

    万次阅读 2018-01-27 12:48:45
    (文章来自作者维护的社区微信公众号【虚拟化云计算...vt-xintel的CPU硬件虚拟化技术,但是在操作系统内部查看cpu的flag时,是否支持硬件虚拟化的的判断标准是否有vmx,vmx是什么,它和虚拟化有什么关系,本文将...
  • kvm虚拟化

    2019-10-11 10:15:13
    •虚拟化,指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。 •在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著...
  • Welcometo KVM virtualization - Thorough introduction 参考网址:...由redhat开发,一中开源、免费的虚拟化技术。岁企业来说,一种可选的虚拟化解决方案。 硬
  • KVM虚拟化集群技术概述

    千次阅读 2017-08-01 14:22:00
    一、 虚拟化集群介绍、设计思路及架构 ...1)什么是虚拟化集群 虚拟机集群最显著的特征是有共享存储,因为有了共享存储,虚拟机就可以实现非常快速的在线迁移,并在虚拟化层配置高可用。笔者在生产环境使...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 317
精华内容 126
关键字:

什么是kvm虚拟化技术