openstack课程-2

本文介绍了OpenStack、KVM、QEMU和Libvirt之间的关系。QEMU是一个独立的虚拟化解决方案,可以利用KVM提升性能。KVM是Linux内核的Hypervisor,与QEMU结合构成完整的虚拟化技术,称为QEMU-KVM。Libvirt作为抽象层,提供统一的API管理多种虚拟化技术,包括远程机器支持和存储、网络管理功能。OpenStack通过Libvirt间接控制QEMU-KVM,实现跨VM平台的管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • OpenStack、kvm、qemu-kvm、libvirt之间的关系
  1. qemu
    qemu是一个独立的虚拟化解决方案,通过intel-VT或AMD SVM实现全虚拟化,安装切睦的系统,可以直接模拟出另一个完全不同的系统环境,虚拟机的创建通过qemu-image即可完成。QEMU本身可以不依赖KVM,但如果有kvm的存在并且硬件(处理器)支持比如intel-VT功能,那么qemu在对处理器虚拟化这一块可以利用KVM提供的功能来提升性能。

  2. KVM
    kvm是集成到Linux内核的Hypervisor是X86架构,并且硬件支持虚拟化技术(intel-VT或AMD-SVM)的Linux的全虚拟化解决方案。它是Linux的一个很小的模块,利用Linux做大量的事情,如任务调度、内存管理与硬件设备交互等。准确来说,kvm是Linux kernel的一个模块。可以用命令modprobe去加载KVM模块。加载了模块后,才能进一步通过其他工具创建虚拟机。但是仅有KVM模块是远远不够的,因为用户无法直接控制内核模块去做事情,你还必须有一个运行在用户空间的工具才行。这个用户空间的工具,kvm开发者选择了已经成型的开源虚拟化软件QEMU。其实qemu也是一个虚拟化软件,它的特点是可虚拟不同的cpu,比如说X86的cpu可虚拟一个power的cpu,并可利用它编译出可运行在power上的程序。kvm使用了qemu的一部分,并稍加改造,就成了可控制kvm的用户空间工具了,所以你会看到官方提供的kvm下载有2大部分(qemu和kvm)、3个文件(kvm模块、qemu工具以及二者的合集)。也就是说,你可以只升级KVM模块,也可以只升级qemu工具。这就是KVM和QEMU的关系。
    kvm内核模块本身只能提供CPU和内存的虚拟化,所以它必须结合QEMU才能构成一个完成的虚拟化技术,也就是下面要说的qemu-kvm

  3. QEMU-KVM
    qemu将kvm整合进来,通过ioctl调用/dev/kvm接口,将有关CPU指令的部分交由内核模块来做。kvm负责cpu虚拟化+内存虚拟化,实现这2者的虚拟化,但是kvm不能模拟其他设备。qemu模拟IO设备(网卡、磁盘等),kvm加上qemu之后就能实现真正意义上的服务器虚拟化。因为用到了kvm和qemu,所以称之为qemu-kvm
    qemu模拟其他的硬件(如Network、Disk),同样会影响这些设备的性能,于是又产生了pass through半虚拟化设备virtio_blk和virtio_net来提高设备性能。
    在这里插入图片描述

  4. LIBVIRT

    1. 概念
      虚拟云实现的三部曲:虚拟化技术实现—>虚拟机管理—>集群资源管理(云管理)。各种不同的虚拟化技术都提供了基本的管理工具。比如启动、停用、配置、连接控制台等。这样在构建云管理的时候就存在2个问题:
      (1)如果采用混合虚拟技术,上层就需要对不同的虚拟化技术调用不同的管理工具,很是麻烦。
      (2)虚拟化技术发展很迅速,系统虚拟化和容器虚拟化均在发展和演化中,可能有新的虚拟化技术更加符合现在的应用场景,需要迁移过去,这样管理平台就需要大幅改动。

      为了适应变化,我们惯用的手段是分层,使之相互透明,在虚拟机和云管理中设置一个抽象管理层,libvirt就是扮演的这个角色。libvirt提供各种API,供上层来管理不同的虚拟机。

      libvirt是管理虚拟机和其他虚拟化功能,比如存储管理、网络管理的软件集合。它包括一个API库、一个守护程序(libvirtd)和一个命令行工具(virsh)。libvirt本身构建于一种抽象的概念之上,它为受支持的虚拟机监控程序实现的常用功能提供通用的API。

      libvirt的主要目标是为各种虚拟化工具提供一套方便、可靠的编程接口,用一种单一的方式管理多种不同的虚拟化提供方式。

      b)功能
      虚拟机管理:包括不同的领域生命周期操作,比如:启动、停止、暂停、保存、恢复和迁移。支持多种设备类型的热插拔操作,包括:磁盘、网卡、内存和CPU。

      远程机器支持:只要机器上运行了libvirt daemon,包括远程机器,所有的libvirt功能就都可以访问和使用。支持多种网络远程传输,使用最简单的SSH,不需要额外配置工作。

      存储管理:任何运行了libvirt daemon的主机都可以用来管理不同类型的存储:创建不同格式的文件镜像(qcow2、vmdk、raw等)、挂接NFS共享、列出现有的LVM卷组、创建新的LVM卷组和逻辑卷、对未处理过的磁盘设备分区、挂接iSCSI共享,等等等等。因为libvirt可以远程工作,所有这些都可以通过远程主机使用。

      网络接口管理:任何运行了libvirt daemon的主机都可以用来管理物理和逻辑的网络接口。

      虚拟NAT和基于路由的网络:任何运行了libvirt daemon的主机都可以用来管理和创建虚拟网络。

      c)体系架构
      没有使用libvirt的虚拟机管理方式
      在这里插入图片描述
      上图—没有使用libvirt的虚拟机管理方式

    为支持各种虚拟机监控程序的可扩展性,libvirt实施一种基于驱动程序的架构,该架构允许一种通用的API以通过方式为大量潜在的虚拟机监控程序提供服务。下图展示了libvirtAPI与相关驱动程序的层次结构。这里也需要注意,libvirt提供从远程应用程序访问本地域的方式。

    在这里插入图片描述
    使用libvirt的虚拟机管理方式

    libvirt的控制方式有两种:
    1)管理应用程序和域位于同一节点上。管理应用程序通过libvirt工作,以控制本地域。
    在这里插入图片描述
    libvirt的控制方式1

    2)管理应用程序和域位于不同节点上。该模式使用一种运行于远程节点上、名为libvirtd的特殊守护进程。当在新节点上安装libvirt时该程序会自动启动,且可自动确定本地虚拟机监控程序并为其安装驱动程序。该管理应用程序通过一种通用协议从本地libvirt连接到远程libvirtd。
    在这里插入图片描述
    libvirt的控制方式2

  5. openstack, kvm, qemu-kvm及libvirt之间的关系
    KVM是最底层的hypervisor,它是用来模拟CPU的运行,它缺少了对network和周边I/O的支持,所以我们是没法直接用它的。QEMU-KVM就是一个完整的模拟器,它是构建基于KVM上面的,它提供了完整的网络和I/O支持。Openstack不会直接控制qemu-kvm,它会用一个叫libvirt的库去间接控制qemu-kvm。libvirt提供了跨VM平台的功能,它可以控制除了QEMU之外的模拟器,包括vmware, virtualbox, xen等等。所以为了openstack的跨VM性,所以openstack只会用libvirt而不直接用qemu-kvm。libvirt还提供了一些高级的功能,例如pool/vol管理。

学习要求: 熟悉基本的linux命令 具备基本的网络知识 掌握一门编程语言 课程特点: 深刻理解:OpenStack的设计原理,体系构架和关键技术,构建一个OpenStack环境所需的核心组件以及核心组件间的联系; 全面掌握:如何通过不同的部署工具比如packstack,部署OpenStack环境;如何通过单独部署OpenStack核心组件逐渐搭建出OpenStack环境; 定制研发:在学习openstack源码级深度解析培训后,你能了解openstack源码的体系结构,并能根据需要进行定制开发,满足您在实际生产环境中OpenStack的各种疑问和不满足的功能。 ------------------------课程内容------------------------ 课时1、课前学习环境准备 课时2课程介绍 课时3、OpenStack概论 课时4、实例:OpenStack自动安装(Fuel) 课时5、作业:OpenStack Fuel 课时6、OpenStack安装部署答问 课时7、Keystone 详解 课时8、实例:OpenStack 手动安装 - 环境准 课时9、实例:Keystone 手动安装 课时10、实例:Keystone CLI 使用 课时11、实例:Keystone API使用 课时12、Glance详解 课时13、实例:Glance手动安装以及CLI、API 课时14、实例:Glance镜像制作 课时15、实例:Glance镜像修改 课时16、作业:Keystone手动练习 课时17、Keystone答问 课时18、作业:Glance手动练习 课时19、Nova架构及原理详解 课时20、实例:Nova手动安装 课时21、实例:Instance启动过程回顾 课时22、网络基础知识盘点 课时23、Neutron原理详解 课时24、实例:Neutron手动安装 课时25、实例:网络命名空间 课时26、实例:物理机连接openvswitch的虚 课时27、实例:租户私有网络创建 课时28、Neutron SDN 实现详解 课时29、实例:Neutron SDN 手动实现 课时30、作业:Nova、Neuron手动安装练习 课时31、作业:Neutron 相关实例练习 课时32、Neutron 答问 课时33、Cinder 原理详解 课时34、Cinder iSCSI实现原理详解 课时35、实例:Cinder 手动安装 课时36、Swift 架构与原理详解 课时37、实例:Swift 手动安装 课时38、Dashboard 介绍与演示 课时39、实例:Dashboard 手动安装 课时40、实例:Dashboard 浮动IP访问实例 课时41、实例:Dashboard 块存储的使用 课时42、实例:Dashboard 对象存储的使用 课时43、实例:OpenStack 命令行接口使用 课时44、OpenStack HA与性能调优 课时45、OpenStack Devstack 自动安 课时46、配置 OpenStack Eclipse 开发环境 课时47、配置 OpenStack Eclipse 开发环境 课时48、OpenStack 自动化测试 - 单元测试 课时49、OpenStack 自动化测试 - 集成测试 课时50、Nova 源码结构 课时51、Nova 调用流程源码解析 课时52、Nova 分层架构与业务模型剖析 课时53、Nova 自定义 API 扩展编码实现 课时54、Django 介绍与快速开始 课时55、Django view 和 urls 的用法 课时56、Django Templates 模板的用法(一) 课时57、Django Templates 模板的用法(二) 课时58、Django Form 表单的用法 课时59、Horizon 结构源码剖析(1) 课时60、Horizon 自定义 Panel 编码实现 课时61、Horizon 自定义 DataView 编码实 课时62、企业部署案例:企业私有云规划与案 课时63、OpenStack 和其他开源云平台比较
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值