OpenStack之计算虚拟化介绍

作者: 慕慕她爸 | 来源:发表于2017-11-14 00:45 被阅读25次
    • 计算虚拟化相关概念
      计算虚拟化的本质就是在虚拟系统和底层硬件之间抽象出CPU和内存等,以供虚拟机使用。
      对于CPU的虚拟化,我们要了解CPU的几种运行模式。


      CPU特权模式

      对于用户态程序和内核态程序分别运行在哪个特权级,下面一张图也给出了说明。


      内核态和用户态
      虚拟机的内核运行在宿主机的用户态,CPU虚拟化的本质就是实现虚拟机的内核在调用时从用户态切换到内核态。
    • 计算虚拟化分类
      这里要提到我们实现虚拟化的管理程序,它是一种运行在基础物理服务器和操作系统之间的中间软件层,可以允许多个操作系统和应用共享硬件。英文名称hypervisor,也可以叫做VMM(virtual machine monitor),也就是虚拟机监视器。下面一张图可以很好的说明它的主要功能作用。


      hypervisor功能图

      hypervisor按照其实现方式,大致可以分为下面3种类型。
      第一种是半虚拟化,是将虚拟机的内核进行修改,将运行在Ring 0上面的指令转换成hypervisor,其实现方式如下图所示。


      半虚拟化
      第二种是硬件辅助全虚拟化,这种虚拟化技术有以下特点
    1. 是Intel VT和AMD-V技术
    2. 虚拟机可以直接使用Ring 0而不需要修改
    3. 查看CPU是否支持虚拟化可以使用下面的命令:
    # grep "vmx" /proc/cpuinfo
    # grep "svm" /proc/cpuinfo
    

    其实现方式如下图所示。


    全虚拟化

    第三种是操作系统虚拟化,有以下特点:

    1. 允许操作系统内核拥有彼此隔离和分割的多用户空间实例,我们也把它叫做容器
    2. 基于linux内核中的namespace、chroot、cgroup实现
      其实现方式如下图所示。


      容器
    • 计算虚拟化实现方式
      下面罗列出了几种比较流行的hypervisor实现软件。
    名称 厂商 主CPU 目标CPU 主系统 目标系统
    qemu Fabrice Bellard Intel,AMD,ARM x86,x86-64,ARM Windows,Linux,Mac OSX Linux
    kvm Red Hat Intel,AMD x86,x86-64 Linux Linux,Windows
    Xen 剑桥大学,Intel,AMD Intel,AMD x86,x86-64 Linux,Solaris,Windows Linux,Windows
    Hyper-V 微软 Intel,AMD x86,x86-64 Windows Linux,Windows
    Vmware ESXi Server VMware Intel,AMD x86,X86-64 裸机安装 Linux,Windows
    Oracle VM Oracle Intel,AMD x86,x86-64 裸机安装 Linux,Windows

    其中,qemu和kvm是虚拟化软件在开源领域实现的佼佼者,我们主要介绍这两款软件。
    qemu有如下特点:

    1. 它是一种一种架构下(比如PC)下面运行另一种架构(如ARM)下的操作系统和程序
    2. 是x86架构,支持半虚拟化技术
    3. 可以实现让多个虚拟机是用同一个镜像,并为每一个虚拟机配置个性化硬件环境(比如网卡、磁盘、图形适配器)
      kvm的特点有以下几个方面:
    4. 是一款开源软件,全称是kernel-based vritual machine(基于内核的虚拟机)
    5. 是x86架构并且硬件支持虚拟化技术的Linux全虚拟化解决方案
    6. kvm还需要一个经过修改的的qemu软件(qemu-kvm),作为虚拟机上层控制和假面
    7. kvm能让多个虚拟机是用同一个镜像,并为每一个虚拟机配置个性化硬件环境(比如网卡、磁盘、图形适配器)
    8. 主流Linux内核中,比如2.6.20以上版本已经包含了kvm
      在实际使用当中,上述软件更多的作为驱动,针对kvm进行调用和管理时,我们就不得不用到大名鼎鼎的libvirt,libvirt库用C(支持 C++)实现,且包含对Python的直接支持,libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和应用程序接口(API),并且一些常用的虚拟机管理工具(如virsh、virt-install、virt-manager等)和OpenStack都在底层使用libvirt的应用程序接口。
      libvirt作为中间适配层,对上层用户空间屏蔽了底层技术的实现细节,它交互实现的基本框架如下所示


      libvirt交互架构图

      在涉及到libvirt时,有两个非常重要的概念需要清楚:

    9. 节点(Node),可以简单理解成一台物理机
    10. 域(Domain),可以理解成运行的一个客户操作系统实例,或者是叫做虚拟机
      而这基本关系如下所示


      节点和域的关系

    相关文章

      网友评论

        本文标题:OpenStack之计算虚拟化介绍

        本文链接:https://www.haomeiwen.com/subject/hjiumxtx.html