1. 虚拟化

虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。

物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。

那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢?

这个主要是通过一个叫做 Hypervisor 的程序实现的。

根据 Hypervisor 的实现方式和所处的位置,虚拟化又分为两种:1型虚拟化和2型虚拟化。

1.1 1型虚拟化

Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行。Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。Xen 和 VMWare 的 ESXi 都属于这个类型。

1型虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比2型要高

1.2 2型虚拟化

物理机上首先安装常规的操作系统,比如 Redhat、Ubuntu 和 Windows。Hypervisor 作为 OS 上的一个程序模块运行,并对管理虚拟机进行管理。KVM、VirtualBox 和 VMWare Workstation 都属于这个类型。

2型虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。

2. kvm

KVM ------------ Kernel-Based Virtual Machine (基于内核的虚拟机)

KVM 是基于 Linux 内核实现的。

KVM有一个内核模块叫 kvm.ko 只用于管理虚拟 CPU 和内存。

Linux 内核和qemu 负责 IO 的虚拟化

3. libvirt

KVM 的管理工具

libvirt 除了能管理 kvm 这种 Hypervisor,还能管理 Xen,VirtualBox 等

#mermaid-svg-y7btShR9ykuJfC1d {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-y7btShR9ykuJfC1d .error-icon{fill:#552222;}#mermaid-svg-y7btShR9ykuJfC1d .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-y7btShR9ykuJfC1d .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-y7btShR9ykuJfC1d .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-y7btShR9ykuJfC1d .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-y7btShR9ykuJfC1d .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-y7btShR9ykuJfC1d .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-y7btShR9ykuJfC1d .marker{fill:#333333;stroke:#333333;}#mermaid-svg-y7btShR9ykuJfC1d .marker.cross{stroke:#333333;}#mermaid-svg-y7btShR9ykuJfC1d svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-y7btShR9ykuJfC1d .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-y7btShR9ykuJfC1d .cluster-label text{fill:#333;}#mermaid-svg-y7btShR9ykuJfC1d .cluster-label span{color:#333;}#mermaid-svg-y7btShR9ykuJfC1d .label text,#mermaid-svg-y7btShR9ykuJfC1d span{fill:#333;color:#333;}#mermaid-svg-y7btShR9ykuJfC1d .node rect,#mermaid-svg-y7btShR9ykuJfC1d .node circle,#mermaid-svg-y7btShR9ykuJfC1d .node ellipse,#mermaid-svg-y7btShR9ykuJfC1d .node polygon,#mermaid-svg-y7btShR9ykuJfC1d .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-y7btShR9ykuJfC1d .node .label{text-align:center;}#mermaid-svg-y7btShR9ykuJfC1d .node.clickable{cursor:pointer;}#mermaid-svg-y7btShR9ykuJfC1d .arrowheadPath{fill:#333333;}#mermaid-svg-y7btShR9ykuJfC1d .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-y7btShR9ykuJfC1d .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-y7btShR9ykuJfC1d .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-y7btShR9ykuJfC1d .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-y7btShR9ykuJfC1d .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-y7btShR9ykuJfC1d .cluster text{fill:#333;}#mermaid-svg-y7btShR9ykuJfC1d .cluster span{color:#333;}#mermaid-svg-y7btShR9ykuJfC1d div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-y7btShR9ykuJfC1d :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

后台 daemon 程序 libvirtd
API库
命令行工具 virsh
libvirt
libvirtd是服务程序,接收和处理API请求
API库使得其他人可以开发基于Libvirt的高级工具比如virt-manager 图形化的KVM管理工具
virsh是我们经常要用的KVM命令行工具

4. qemu kvm qume-kvm libvirt openstack的区别和关系。

4.1 qemu

qemu是独立的虚拟化解决方案,通过intel-VT/AMD SVM实现全虚拟化。
qemu可以不依赖kvm,也可以通过kvm提供的功能提升性能。

4.2 kvm

 kvm内核模块只能提供CPU和内存虚拟化,所以必须配合qemu才能构成完整的虚拟化技术,即qemu-kvm

4.3 qemu-kvm

一个完整的模拟器,它是构建基于kvm上面的,它提供了完整的网络和I/O支持。qemu将kvm整合进来,通过 ioctl 调用/dev/kvm接口,将cpu指令相关部分交给内核模块来做。
kvm负责CPU和内存虚拟化,但不能模拟其他设备。
qemu模拟IO设备(网卡,磁盘等), 配合才能实现完整的服务器虚拟化。 qemu模拟的其他硬件,会影响这些设备的性能,于是产生了 pass through半虚拟化设备 virtio_blk, virtio_net ,用于提升设备性能。

4.4 libvirt

作为虚拟机和云管理的中间层(抽象管理层):提供各种API,供上层管理不同的虚拟机。 libvirt是管理虚拟机及其他虚拟化功能(存储、网络…)的软件集合.libvirt构建于一个抽象概念之上,为受支持的虚拟机监控程序实现的常用功能提供通用的API。 提供了跨VM平台的功能,它可以控制除了qemu之外的模拟器,包括vmware, virtualbox, xen等。为了openstack的跨VM性,openstack只会用libvirt而不直接用qemu-kvm。libvirt还提供了一些高级的功能,例如pool/volume管理

4.5 OpenStack

OpenStack不会直接控制qemu-kvm,它会用libvirt库去间接控制qemu-kvm

5 参考文档

https://www.cnblogs.com/CloudMan6/tag/OpenStack/

2022-09-12-kvm介绍相关推荐

  1. ARM学习思维导图 2022.09.12

  2. openEuler 社区 2022 年 12 月运作报告

    社区活跃度 在社区所有开发者和用户的共同参与下,openEuler的3年持续迸发活力!从0到超过1.27万名开发者,从0到超过100万的社区用户,从0到超过750家企业伙伴加入社区--截至目前,在大家 ...

  3. Dapr中国社区活动之 分布式运行时开发者日 (2022.09.03)

    自2019年10月首次发布以来,Dapr(Distributed Application Runtime,分布式应用运行时)因其"更稳定"."更可靠".&quo ...

  4. KVM 介绍(6):Nova 通过 libvirt 管理 QEMU/KVM 虚机 [Nova Libvirt QEMU/KVM Domain]

    KVM 介绍(6):Nova 通过 libvirt 管理 QEMU/KVM 虚机 [Nova Libvirt QEMU/KVM Domain] 学习 KVM 的系列文章: (1)介绍和安装 (2)CP ...

  5. HCIE-Routing Switching实验考试延期至2022年12月31日

    尊敬的考生: 由于受新冠疫情不可控因素影响,2022年上半年HCIE-Routing & Switching实验考试所在城市出现出行受控等情况,造成部分考生无法在2022年6月30日之前前往考 ...

  6. 阿尔茨海默最新研究进展(2022年12月)

    阿尔茨海默病(Alzheimer's disease, AD),俗称"老年痴呆症",是一种严重的神经退行性疾病,患者通常会出现以记忆力衰退.学习能力减弱为主的症状,并伴有情绪调节障 ...

  7. 【2022.09.04】关于升级打怪学编程活动的通知

    把电子学会全国青少年软件编程等级考试作为游戏的关卡,带着小朋友们升级打怪. 升级打怪计划 每周日晚20:00,我在腾讯会议中进行直播答疑,解决小朋友们本周遇到的编程问题,辅助小朋友们提升编程的技能. ...

  8. 2022年12月国产数据库大事记-墨天轮

    本文为墨天轮技术社区整理的2022年12月国产数据库大事件和重要产品发布消息. 目录 12月国产数据库大事记(时间线) 产品/版本发布 兼容认证 排行榜新增数据库 厂商活动 相关资料 12月国产数据库 ...

  9. 2022.09 青少年Python等级考试(六级) 编程题部分

    2022.09 青少年Python等级考试   编程题部分(共3题,共30分) 36.小明编写一个类实现设置马的品种.年龄.性别及速度,输出相应的语句,请补全代码. 如下代码输出结果为"一匹 ...

  10. KVM介绍 虚拟化简史

    KVM介绍 为什么需要CPU虚拟化 X86 操作系统是设计在直接运行在裸硬件设备上的,因此它们自动认为它们完全占有计算机 硬件.x86 架构提供四个特权级别给操作系统和应用程序来访问硬件. Ring  ...

最新文章

  1. 原本要与Hinton当同事,最后被迫Bengio门下读博?| 独立研究员的坎坷之路
  2. 人工智能+能源:能源行业变革新趋势
  3. 关于 @ngrx/Store 下 obj 的扩展问题
  4. cpp_extension dist must be a Distribution instance
  5. python视频教程从入门到精通全集-python从入门到精通视频(全60集)免费高速下载...
  6. 对话国际农民丰收节贸易会-万祥军:雀巢全球谋定农民合作
  7. 计算机考研学科专业基础,2018考研计算机学科专业基础综合考试大纲 出炉
  8. java filehelper_Java常用工具类---IP工具类、File文件工具类
  9. 介绍个好点的,JAVA技术群
  10. Oracle 初始化参数文件pfile和spfile
  11. mysql 修改root密码 修改账户登录host
  12. vsftpd配置系统用户为登陆用户
  13. Proe/Creo经典曲面造型实战案例大合集
  14. android 指纹存储密码,安卓指纹认证(Android Fingerprint Auth)
  15. java学习总结(16.07.16)Random类和BigDecimal类
  16. 例题5-3 安迪的第一个字典(Andy's First Dictionary,Uva 10815)
  17. 【动态规划】CH_0103 最短Hamilton路径
  18. linux保存压缩程序输出,Linux压缩zip文件
  19. kali Linux单用户模式的退出方法
  20. BUUCTF [HCTF 2018]WarmUp 1

热门文章

  1. C# 串口+示波+数据存储+截图
  2. import-from
  3. 电商大数据日志收集系统之EFK
  4. EDID是什么,跟显示器有什么关系?
  5. IDEA使用教程一:下载安装IDEA以及idea的常用设置
  6. 河海大学计算机网络毕业设计,河海大学文件河海大学毕业设计.doc
  7. javascript 获取当前日期 月份 时间
  8. Trac系列(2):Trac的使用
  9. 单片机c语言篮球比分_单片机和C语言的篮球计时计分器设计
  10. 最全Pycharm教程(2)——代码风格