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之计算虚拟化介绍

    计算虚拟化相关概念计算虚拟化的本质就是在虚拟系统和底层硬件之间抽象出CPU和内存等,以供虚拟机使用。对于CPU的虚...

  • OpenStack之网络虚拟化介绍

    OSI七层模型下面一张图简单的罗列出了OSI七层模型结构以及每一层的主要功能。OSI七层模型 软件定义网络(SDN...

  • Java从入门到入坑(扩展篇)

    01:云计算 IaaS、SaaS、PaaS、虚拟化技术、openstack、Serverlsess 02:搜索引擎...

  • 玩转 OpenStack(二)虚拟化原理简介

    上节 玩转OpenStack(一)基本概念和安装KVM 中介绍了虚拟化分为两种类型,1型虚拟化和2型虚拟化。介绍了...

  • 《OpenStack开源云王者归来》.PDF

    简介 《OpenStack开源云王者归来:云计算虚拟化Nova、Swift、Quantum与Hadoop》按照入门...

  • CPU和内存虚拟化

    上篇文章介绍了云计算之虚拟化技术,针对虚拟化技术的实现方式和技术细节进行了描述。从云计算的核心组件来讲,虚拟化又分...

  • Openstack简版介绍

    什么是openstack? 请先熟悉虚拟化、云计算(立即IAAS,PAAS,SAAS) (可以搜索广琳科技) Op...

  • 【华为网络技术大赛】云计算

    云计算发展历程 PC->PC虚拟化->各种云计算平台及解决方案OpenStack最大的开源社区AWS占据了公有云的...

  • 虚拟化之KVM

    一、KVM虚拟化介绍 1、虚拟化 指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑...

  • OpenStack 之 虚拟化原理

    CPU虚拟化 一个KVM(kernel-based virtual machine)虚拟机在宿主机上就是一个 qe...

网友评论

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

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