初识OpenStack(1)
首先
先来说说我与openstack的渊源吧,那是在上个月中旬,学张的一个朋友给我打电话说让一起来搞一个云平台,当时也不知道是什么,就很高兴的答应下来了,到了周末,就过去聊关于平台怎样搭建的事情了,却发现无从着手,也就是这一次,才第一次听说了openstack这个名词,于是就在网上买了《OpenStack设计与实现》这本书,开始简单的了解关于这个项目,在上周三,还去参加了一下关于OpenStack的分享会,这次才算对云计算,以及‘云’方面的知识才有所了解,也同时,有更多的信心去参与到openstack的二次开发之中。
云计算是什么?
大家估计作为业内人士,相信对云计算应该都听说过吧,但是对于云计算能给出详细解释的人并不多吧,在这之前,我也是的,整天都被那些名词所围绕,也在生活中使用着各种云,包括但不限于腾讯云,百度云等服务,但是却真正不知到他是什么。
云计算只要分文三种服务模式,分别为SaaS,PaaS,IaaS三个部分
SaaS平台逻辑架构
SaaS – Software-as-a-Service,通过这种模式,用于只需要直接在这个平台是面使用已有的应用,比如腾讯蓝鲸平台上面的一些应用。在SaaS平台架构上面,用户完全不需要考虑关于硬件及操作系统,网络,运行环境等方面的问题,用户只需要关注在软件使用本身而不需要考虑其他的事情,适用于初级用户。
PaaS平台逻辑架构
PaaS – Platform-as-a-Service,提供了一个开发环境,开发者可以在上面开发自己的应用,比如腾讯蓝鲸平台上面的开发者中心,你可以在上面开发自己的运维工具,但是完全不需要考虑关于硬件,操作系统,开发测试环境等问题,PaaS已经全部为你搭建好了,你只需要选择你需要的环境,而不需要自己去部署,开发者只需要关心软件本身的开发细节就好了,这一平台适用于应用开发者。
IaaS平台逻辑架构
IssS – Infrastructure-as-a-Service,用户从供应商里拿到的是其所需要的硬件之上的操作系统,在用户看来,其拿到的和物理机没有任何区别,具备了物理机所具备的一切功能,而在供应商看来,其只是在其服务器上面给用户提供了一个虚拟机而已。此类供应商全球范围内最有名的就是亚马逊的AWS,国内最大的应该就是阿里云了,接下来就是腾讯云。IaaS提供给用户的只是类似物理机的一个服务器,以及连解这个服务器的接口,用户需要自己搭建自己需要的环境,安装自己需要的应用软件或者服务,这就需要有一定的系统管理知识的人员来配置。这个平台主要适用于系统管理员。
云计算的基础—虚拟化
经过上面的讲解,云计算供应商要想给用户提供服务,就需要给每个用户独立的操作空间,存储空间或者是独立的计算机系统,但是显然给每个用户一个实际的物理机是不现实的,所以就需要供应商在其配置高,存储空间大,带宽高的服务器上面来虚拟出来多个虚拟操作系统来供用户使用。而关于虚拟化主要包括以下两个部分:一型虚拟化,二型虚拟化。
一型虚拟化
从图中可以看出,一型虚拟化直接是在硬件之上进行的虚拟化,实现这类方式的软件统称为Hypervisor,多个虚拟机可以直接在Hypervisor之上运行,其实现方式就是特殊定制的Linu系统,这类软件的代表有Xen和VMWare的ESXi。
二型虚拟化
二型虚拟化就是在硬件之上有一个操作系统,用来管理底层的硬件,网络等,这类操作系统一般都是Linux系统,在系统之上再进行虚拟化,由操作系统对这些虚拟的操作系统进行管理。KVM,VirtualBox,VMWare Workstation都属于这类。
其他
目前的虚拟化主要就是上面两种类型,而在这两类虚拟方式上面又包含下面几类对硬件的虚拟,而且现在许多的PC机上面都包含了这几类虚拟化技术。
CPU虚拟化
CPU虚拟化,简单来讲就是将一个CPU串行虚拟成多个CPU并行,允许在同一个平台上面运行多个虚拟的操作系统,各个操作系统之间相互独立的运行,且在一个虚拟操作系统上面可以同时运行多个应用程序,多个应用程序在自己的空间内独立运行,互不干扰,从而大大提升计算机的效率。但是虚拟化技术与多任务和超线程技术是完全不同的,尽管表现出来的结果很相似,更详细内容参见CPU虚拟化
内存虚拟化
如果操作系统之上没有运行虚拟机,那么宿主机只需要实现从机器内存到虚拟内存之间一级映射关系就可以了,但是在宿主机上面再运行客户机的话,就需要宿主机再做一级从物理内存到虚拟内存之间的二级映射。
具体实现参见内存虚拟化
存储虚拟化
存储虚拟化(Storage Virtualization)最通俗的理解就是对存储硬件资源进行抽象化表现。通过将一个(或多个)目标(Target)服务或功能与其它附加的功能集成,统一提供有用的全面功能服务。虚拟化的存储资源就像是一个巨大的“存储池”,用户不会看到具体的磁盘、磁带,也不必关心自己的数据经过哪一条路径通往哪一个具体的存储设备。详见存储虚拟化定义和存储虚拟化实现
网络虚拟化
网络虚拟化技术指的是将宿主机的一个单独网络通过虚拟化技术,虚拟成多个独立的网络给虚拟机来使用,在每个虚拟机看来,他自己使用的都是单独的,而非与其他客户机进行共享的网络,详见网络虚拟化技术
KVM
KVM 全称是 Kernel-Based Virtual Machine。也就是说KVM 是基于 Linux 内核实现的。kvm基本结构如上图。kvm已经是内核模块,被看作是一个标准的linux 字符集设备(/dev/kvm)。Qemu通过libkvm应用程序接口,用fd通过ioctl向设备驱动来发送创建,运行虚拟机命令,设备驱动kvm就会来解析命令。