1、什么是openstack
openstack是一套iaas解决方案
OpenStack是由美国国家宇航局(NASA)和RackSpace合作开发的旨在为共有云和私有云提供软件的开源项目,其目的在于提供可靠的云部署方案及良好的可扩展性。简单的说OpenStack就是云操作系统,或者说是云管理平平台,自身并不提供云服务,只是提供部署和管理平平台。
2、什么是云计算
基于互联网的相关服务的增加,使用和交付模式
-这种模式提供可用的,编辑的,按需的网络访问,进行可配置的计算资源共享池
-这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互
-通常涉及互联网来提供动态衣扩展且经常是虚拟化资源
3、三层网络
openstack学习笔记之一:基础知识_第1张图片
(1)infrastructure as server(IaaS):基础设施即服务,物理机的管理,虚拟机的管理,存储资源的管理。
---提供给消费者的服务是对所有计算机基础设施的利用,包括处理CPU,用户能够部署和运行任意软件,包括操作系统和应用程序.
---iaas 通常分为三种用法:公有云,私有云,混合云、
(2)platform as a service(PaaS):平台及服务,虚拟机搭建的开发平台,比如配置好的Apache、MySql或者PHP环境,
---以服务器平台或开发环境作为服务进行提供就成为paas
---运营商所需提供的服务,不仅仅是单纯的基础平台,还针对该平台的技术支持服务,甚至针对该平台而进行的应用系统开发,优化等服务
---简单地说,paas平台是指定云环境中的应用基础设施服务,也可以说是中间件即服务
(3) software-as a service(SaaS):软件即服务,比如购物网站、博客网站、微博网站等。
---是一种通过internet 提供软件的模式,厂商将应用软件统一部署在自己的服务器上
---客户可以根据自己的实际需求,通过互联网向厂商订购所需的应用软件服务.
---用户不用在购买软件,而是向提供商租用基于web的软件.来管理企业经营活动,不用对软件进行维护,提供商会全权管理和维护软件,同时也提供软件的离线操作和本地数据存储.
4、什么是kvm
1)kvm的来源
KVM—基于内核的虚拟机(Kernel-Based Virtual Machine),将Linux内核变成Hypervisor的一种虚拟化技术,属于硬件级虚拟化类型的全虚拟化的解决方案。是Linux的内核特性,KVM需要两个条件:硬件支持全虚拟化,操作系统是Linux。
2)KVM的架构如图2-1所示。
openstack学习笔记之一:基础知识_第2张图片
KVM作为Hypervisor运行在宿主机内核(Host OS Kernel),支持对CPU、内存、I/O的模拟,对虚拟机的监控,并为Qemu提供实体支撑。
Qemu作为进程运行在宿主机的用户态,它基于KVM及内核的特性,为Guest OS模拟出CPU、内存、I/O等硬件,支撑Guest OS在进程中运行。
虚拟化管理服务有多种,大部分都基于libvirt实现,libvirt 库是一种实现 Linux 虚拟化功能的 Linux API,它支持各种虚拟机监控程序。
3)qemu、kvm、qemu-kvm、libvert之间的关系
(1)qemu
Qemu是一个独立的虚拟化解决方案,通过intel-VT 或AMD SVM实现全虚拟化,安装qemu的系统,可以直接模拟出另一个完全不同的系统环境,虚拟机的创建通过qemu-image既可完成。QEMU本身可以不依赖于KVM,但是如果有KVM的存在并且硬件(处理器)支持比如Intel VT功能,那么QEMU在对处理器虚拟化这一块可以利用KVM提供的功能来提升性能。
(2)kvm
KVM是集成到Linux内核的Hypervisor是X86架构且硬件支持虚拟化技术(IntelVT或AMD-V)的Linux的全虚拟化解决方案。它是Linux的一个很小的模块,利用Linux做大量的事,如任务调度、内存管理与硬件设备交互等。准确来说,KVM是Linux kernel的一个模块。可以用命令modprobe去加载KVM模块。加载了模块后,才能进一步通过其他工具创建虚拟机。但仅有KVM模块是远远不够的,因为用户无法直接控制内核模块去作事情,你还必须有一个运行在用户空间的工具才行。这个用户空间的工具,kvm开发者选择了已经成型的开源虚拟化软件QEMU。说起来QEMU也是一个虚拟化软件。它的特点是可虚拟不同的CPU。比如说在x86的CPU上可虚拟一个Power的CPU,并可利用它编译出可运行在Power上的程序。KVM使用了QEMU的一部分,并稍加改造,就成了可控制KVM的用户空间工具了。所以你会看到,官方提供的KVM下载有两大部分(qemu和kvm)三个文件(KVM模块、QEMU工具以及二者的合集)。也就是说,你可以只升级KVM模块,也可以只升级QEMU工具。这就是KVM和QEMU的关系。
KVM内核模块本身只能提供CPU和内存的虚拟化,所以它必须结合QEMU才能构成一个完整的虚拟化技术,这就是下面要说的qemu-kvm。
(3)kvm-qemu
Qemu将KVM整合进来,通过ioctl调用/dev/kvm接口,将有关CPU指令的部分交由内核模块来做。kvm负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但kvm不能模拟其他设备。qemu模拟IO设备(网卡,磁盘等),kvm加上qemu之后就能实现真正意义上服务器虚拟化。因为用到了上面两个东西,所以称之为qemu-kvm。
Qemu模拟其他的硬件,如Network, Disk,同样会影响这些设备的性能,于是又产生了pass through半虚拟化设备virtio_blk, virtio_net,提高设备性能。
openstack学习笔记之一:基础知识_第3张图片
(4)libvert
a)概念
虚拟云实现的三部曲:虚拟化技术实现-->虚拟机管理-->集群资源管理(云管理)。各种不同的虚拟化技术都提供了基本的管理工具。比如,启动,停用,配置,连接控制台等。这样在构建云管理的时候就存在两个问题:
((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的虚拟机管理方式如图所示:
openstack学习笔记之一:基础知识_第4张图片
为支持各种虚拟机监控程序的可扩展性,libvirt实施一种基于驱动程序的架构,该架构允许一种通用的API以通用方式为大量潜在的虚拟机监控程序提供服务。下图展示了libvirt API与相关驱动程序的层次结构。这里也需要注意,libvirtd提供从远程应用程序访问本地域的方式。
openstack学习笔记之一:基础知识_第5张图片
irt的控制方式有两种:
((1))管理应用程序和域位于同一节点上。管理应用程序通过libvirt工作,以控制本地域。
openstack学习笔记之一:基础知识_第6张图片
(((2))管理应用程序和域位于不同节点上。该模式使用一种运行于远程节点上、名为libvirtd的特殊守护进程。当在新节点上安装libvirt时该程序会自动启动,且可自动确定本地虚拟机监控程序并为其安装驱动程序。该管理应用程序通过一种通用协议从本地libvirt连接到远程libvirtd。
openstack学习笔记之一:基础知识_第7张图片
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管理。
6)openstack的架构
openstack学习笔记之一:基础知识_第8张图片
Dashboard
Horizon
---用于管理openstack各种服务的,基于web的管理接口
---通过图形界面实现创建用户,管理网络,启动实例等操作
Networking
Neutron
1)、一种软件定的网络服务,提供网络连接服务,比如OpenStack计算。为用户提供API定义网络和使用,基于插件的架构,其支持众多的网络提供商和技术。
---用于创建网络,子网,路由器,管理浮动ip地址
---可以实现虚拟交换机,虚拟路由器
---管理OpenStack环境中所有虚拟网络基础设施(VNI),物理网络基础设施(PNI)的接入层。
neutron架构:
openstack学习笔记之一:基础知识_第9张图片
(1)位于最上层的Neutron Server充当一个门派中的“掌门人”角色(RESTful Server),负责接受来自外部门派(项目)的API请求,比如Nova API创建网络的请求。
(2)位于中间层的Neutron plugin充当一个门派中的“信使”角色,负责传达最高层指令给下面的人。
(3)位于下层的Neutron Agent充当一个门派中“干活”角色,负责执行一些具体的任务和操作。
2)、Neutron分别提供了二层(L2)vSwitch交换和三层(L3)Router路由抽象的功能,对应于物理网络环境中的交换机和路由器实现。具体实现了如下功能:
(1)Router:为租户提供路由、NAT等服务。
(2)Network:对应于一个真实物理网络中的二层局域网(VLAN),从租户的的角度而言,是租户私有的。
(3)Subnet:为网络中的三层概念,指定一段IPV4或IPV6地址并描述其相关的配置信息。它附加在一个二层Network上,指明属于这个network的虚拟机可使用的IP地址范围。
存储
Object Storage---Swift
---通过一个 RESTful,基于HTTP的应用程序接口存储和任意检索的非结构化数据对象。
---它拥有高容错机制,基于数据复制和可扩展架构。
---Swift的目的是使用普通硬件来构建冗余的、可扩展的分布式对象存储集群,存储容量可达PB级。
---Swift并不是文件系统或者实时的数据存储系统,它是对象存储,用于永久类型的静态数据的长期存储,这些数据可以检索、调整,必要时进行更新。最适合存储的数据类型的例子是虚拟机镜像、图片存储、邮件存储和存档备份。
---Swift无需采用RAID(磁盘冗余阵列),也没有中心单元或主控结点。Swift通过在软件层面引入一致性哈希技术和数据冗余性,牺牲一定程度的数据一致性来达到高可用性(High Availability,简称HA)和可伸缩性,支持多租户模式、容器和对象读写操作,适合解决互联网的应用场景下非结构化数据存储问题。

Block Storage---Cinder
为运行实例而提供的持久性块存储。它的可插拔驱动架构的功能有助于创建和管理块存储设备。
1)、理解 Block Storage,操作系统获得存储空间的方式一般有两种:
(1)通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,然后分区、格式化、创建文件系统;或者直接使用裸硬盘存储数据(数据库)
(2)通过 NFS、CIFS 等 协议,mount 远程的文件系统
第一种裸硬盘的方式叫做 Block Storage(块存储),每个裸硬盘通常也称作 Volume(卷)。
第二种叫做文件系统存储。NAS 和 NFS 服务器,以及各种分布式文件系统提供的都是这种存储。
2)、Block Storage Servicet 提供对 volume 从创建到删除整个生命周期的管理。从 instance 的角度看,挂载的每一个 Volume 都是一块硬盘。OpenStack 提供 Block Storage Service 的是 Cinder,其具体功能是:
(1)提供 REST API 使用户能够查询和管理 volume、volume snapshot 以及 volume type。
(2)提供 scheduler 调度 volume 创建请求,合理优化存储资源的分配。
(3)通过 driver 架构支持多种 back-end(后端)存储方式,包括 LVM,NFS,Ceph 和其他诸如 EMC、IBM 等商业存储产品和方案。
共享服务
Identity service--Keystone
---用于组件之间的统一认证,提供认证和授权的集中身份管理服务
---提供了集中的目录服务
---支持多种身份认证模式,如密码认证,令牌认证,以即AWS(亚马逊web服务)登录
---为用户和其他服务提供SSO认证服务
Image service--Glance
---存储和检索虚拟机磁盘镜像,OpenStack计算会在实例部署时使用此服务。
---运行用户为直接存储拷贝服务器镜像
---这些镜像可以用于新建虚拟机的模板
Telemetry--Ceilometer
为OpenStack云的计费、基准、扩展性以及统计等目的提供监测和计量。
高层次服务
Orchestration--Heat
Orchestration服务支持多样化的综合的云应用,通过调用OpenStack-native REST API和CloudFormation-compatible Query API,支持:term:HOT <Heat Orchestration Template (HOT)>格式模板或者AWS CloudFormation格式模板
Compute
Nova
---在OpenStack环境中计算实例的生命周期管理。
---按需响应包括生成、调度、回收虚拟机等操作。
---在节点上用于虚拟机的服务
---Nova是一个分布式的服务
---Nova被设计成在标准硬件上能够进行水平扩展
Nova 处于 Openstak 架构的中心,其他组件都为 Nova 提供支持:
---Glance 为 VM 提供 image
---Cinder 和 Swift 分别为 VM 提供块存储和对象存储
---Neutron 为 VM 提供网络连接
nova compute通过libvirt管理kvm,计算节点是真正运行虚拟机的地方

openstack学习笔记之一:基础知识_第10张图片