OpenStack 是云操作系统,要学习 OpenStack,首先需要掌握一些虚拟化和云计算的相关知识。
 
虚拟化
 
虚拟化是云计算的基础,简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的CPU、内存、IO、硬件资源,但逻辑上虚拟机之间是相互隔离的。
 
物理机我们一般称为宿主机(Host),宿主机上面的虚拟机被称为客户机(Guest)。那么Host是如何将自己的硬件资源虚拟化, 并提供给 Guest使用的呢?
 
这个主要是通过一个叫做 Hypervisor 的程序实现的。根据Hypervisor的实现方式和所处的位置,虚拟化又分为两种:1型虚拟化和2型虚拟化
 
1型虚拟化
 
Hypervisor 直接安装在物理机上,多个虚拟机在Hypervisor上运行,Hypervisor实现方式一般是一个特殊定制的Linux系统。Xen 和 Esxi 都属于这个类型
 
 
2型虚拟化
 
物理机上首先安装常规的操作系统,比如Redhat、Ubuntu和Windows。Hypervisor作为OS上的一个程序模块运行,并对虚拟机进行管理。KVM、VirtualBox 和 VMware Workstations都属于这种类型。
 
 
理论上讲:
    1型虚拟化一般对硬件虚拟化功能进行了特别的优化,性能上比2型要高
    2型虚拟化因为是基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM
 
KVM
 
下面重点介绍KVM这种2型虚拟化技术。
 
在 x86 平台上最热门运用最广泛的虚拟化方案莫过于KVM了。OpenStack 对 KVM 支持的也很好,我们的教程也理所当然的选择KVM作为实验环境的Hypervisor。
 
KVM 全称是 Kernel-Based Virtual Machine 。也就是说KVM是基于Linux 内核实现的。KVM有一个内核模块叫做 kvm.ko ,只用于管理虚拟CPU和内存。
 
那IO的虚拟化,比如存储和网络设备是由谁来实现呢?
 
这个就交给Linux内核和Qemu来实现。说白了,作为一个Hypervisor ,KVM本身只关注虚拟机调度和内存管理这两个方面。IO 外设的任务交给Linux内核和Qemu。
 
libvirt
 
大家在网上看到KVM相关文章的时候肯定会经常看到libvirt这个东西,libvirt是啥?
 
简单的说就是KVM的管理工具。
 
其实 libvirt 除了能管理KVM这种Hypervisor,还能管理 Xen、VirtualBox 等。OpenStack底层也是用libvirt,所以有必要学习一下。
 
libvirt包含3个东西:后台daemon程序 libvirtd、API库 和命令行工具virsh
 
    1、libvirt是服务程序,接受和处理API请求
    2、API库使得其他人可以开发基于libvirt的高级工具,比如virt-manager,这是个图形化的KVM管理工具,后面我们会详细介绍
    3、virsh是我们经常要用的KVM命令行工具,后面会有示例。
 
作为KVM和OpenStack的实施人员,virsh和virt-manager是一定要会用的。
 

最新文章

  1. [Android]使用Dagger 2进行依赖注入 - Producers(翻译)
  2. Excel 使用宏批量修改单元格内指定文字为红字
  3. 天气api
  4. Engine中如何实现先居中显示要素再闪烁
  5. Spark核心概念之RDD
  6. CSS 最核心的几个概念
  7. php curl拉取远程图片
  8. thinkphp 3.2 导入第三方类库的两种方式
  9. SAML2.0 协议初识(一)
  10. conda创建py27虚拟环境安装theano(anaconda3)
  11. js···DOM2动态创建节点
  12. 与我们息息相关的internet服务(2)---WWW服务
  13. Median absolute deviation | Singular Value Decomposition奇异值分解 | cumulative sums |
  14. JavaScript表单验证登录
  15. idea git 从github上拉取项目 更改上传
  16. 干货分享,40个photoshop技能送给你!
  17. pyspider爬取数据存入redis--1.安装驱动
  18. this 指向问题
  19. 怎样为你的CSDN博客增加百度统计
  20. 使用POI导入EXCEL报java.lang.IncompatibleClassChangeError

热门文章

  1. 【软件工程】Alpha冲刺(2/6)
  2. Cannot use unsafe construct in safe context
  3. CentOS 7下使用Apache2部署Django项目,解决文件名中含有中文报错的问题
  4. 【.net core 0基础】创建你的第一个.net core应用
  5. Throwable 源码阅读
  6. linuxs上mono
  7. CentOS6.8安装Oracle11g
  8. (转)java8实现对象列表去重
  9. python 学习笔记(四) 统计序列中元素出现的频度(即次数)
  10. nohup sh start.sh >/dev/null 2>&1 &