OpenStack学习笔记(二)计算服务NOVA
本篇记录OpenStack的计算服务NOVA一些内容(很多看不懂,汗!只捡一小部分记录)
一、逻辑图
OpenStack 计算服务NOVA 是基础设施服务IAAS的主要部分,采用Python实现:
1、 因为认证,与OpenStack 身份认证keystone 交互
2、因为磁盘和服务器镜像, 与镜像服务Glance 交互
3、因为提供图形界面,与仪表盘Dashboard交互
二、计算服务NOVA的组件构成
1、应用程序接口 API
nova-api service: 接收和响应最终用户的计算api请求,支持OpenStack的计算服务API 和 Amazon EC2 API
nova-api-metadata service :接收实例发来的元数据请求,通常在nova-network 安装多主机模式下,使用这个服务
2、 计算服务核心
nova-compute service :持续的守护进程,通过Hypervior的API 来创建和销毁实例
nova-scheduler service:请求的调度器,决定在哪台计算服务主机运行实例
nova-conductor 模块: 计算服务和数据库之间的中介交互,隔离了nova直接访问数据库的可能
nova-cert模块: 为X509证书服务,用于EC2 API
3、虚拟机网络
nova-network守护进程: 与计算服务类似,接收网络任务操作网络
4、终端接口
nova-consoleauth守护进程: 终端授权的守护进程
nova-novncproxy 守护进程: 提供代理访问运行实例
nova-spicehtml5proxy 守护进程: 提供一个代理访问运行实例,支持H5 客户端浏览器
nova-xvpvncproxy守护进程: 提供一个代理访问运行实例,支持VNC协议的java 客户端
nova-cert守护进程: x509证书
6、镜像管理(EC2 场景)
nova-objectstore 守护进程: 用户支持euca2tools,注册到Openstack镜像服务的S3接口
euca2tools 客户端: 命令行解释器
7、命令行客户端和其他接口
nova 客户端 : 用户作为租户管理员或最终用户来提交命令
8、其他组件:
队列: 由RabbitMQ来实现
SQL数据库: 存储构建时和运行时的状态
++++++++++扩展理解+++++++++
1、Hypervior 是什么?
Hypervisor——一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。也可叫做VMM( virtual machine monitor ),即虚拟机监视器。Hypervisors是一种在虚拟环境中的“元”操作系统。他们可以访问服务器上包括磁盘和内存在内的所有物理设备。Hypervisors不但协调着这些硬件资源的访问,也同时在各个虚拟机之间施加防护。当服务器启动并执行Hypervisor时,它会加载所有虚拟机客户端的操作系统同时会分配给每一台虚拟机适量的内存,CPU,网络和磁盘。(关于Hypervisor这部分描述,采自百度百科)
Hypervisor 有三种
I型:虚拟机直接运行在系统硬件上,创建硬件全仿真实例,被称为“裸机”型。
· II型:虚拟机运行在传统操作系统上,同样创建的是硬件全仿真实例,被称为“托管(宿主)”型。
Ⅲ型:虚拟机运行在传统操作系统上,创建一个独立的虚拟化实例(容器),指向底层托管操作系统,被称为“操作系统虚拟化”。
实际应用中,裸架构用的最多。服务器虚拟化需要评估、选择和部署hypervisor,组织通常会选择一种主流的hypervisor:VMware的ESXi、微软的Hyper-V或者思杰的XenServer。然而,对很多组织来说,单独的hypervisor已经不能满足所有的虚拟化需求。因此这牵引出了一个需求,就是有一个统一的管理工具来管理各种各样的Hypervisor。 libvirt 就是在这种情况下诞生的
2、libvirt 功能
libvirt 为多种hypervisor提供统一管理方式,是一个软件集合,含API库、后台运行程序Libvirtd,命令行工具virsh。目前Libvirt 支持Xen、QEMU、LXC、Open VZ和VirturalBox,KVM。 目前对KVM支持的最好。
3、EC2 是什么?
亚马逊弹性计算云(EC2,Elastic Compute Cloud)是一个让使用者可以租用云端电脑运行所需应用的系统。EC2借由提供Web服务的方式让使用者可以弹性地运行自己的Amazon机器映像档,使用者将可以在这个虚拟机器上运行任何自己想要的软件或应用程式。提供可调整的云计算能力。
EC2使用Xen虚拟化技术。每个虚拟机,又称作实例,能够运行小、大、极大三种能力的虚拟私有服务器。Amazon利用EC2 Compute Units去分配硬件资源(一个ECU相当与一个Sandy Bridge级Xeon)。
++++++++++++++++++++++++++
三、OpenStack计算的系统架构
1、虚拟机管理器(Hypervisor)
大部分的openstack 都在使用KVM和基于Xen的Hypervisor上完成,支持下面的Hypervisor
1)裸金属
2)Docker
3)Hyper-V
4)KVM(基于内核的虚拟机)
5)LXC(Linux容器)
6)QEMU(快速模拟器)
7)UML(用户模式Linux)
8)VMware vSphere
9)Xen
2、OpenStack提供两种类型的块存储: 临时存储和持久卷
3、计算服务架构
1)Cloud Controller:由许多组件构成,代表了全局状态,并且负责和所有其他组建的交互。
2) API服务器
云框架的核心就是API服务,发出指令和控制Hypervisor,存储和网络,为用户提供可编程的方法。 API的端点是基于HTTP web服务的,处理认证、授权和基本命令。
2) 消息队列
消息队列安排计算节点(进程)、网络控制节点(控制节点上的网络基础设施软件)、API端点、调度器(决定将那个屋里硬件分配给虚拟资源)和类似组件之间的交互。
3)Compute controller 计算worker
主机中的计算worker 管理着计算实例,API分发器会给计算worker下达命令,从而让其完成任务:
运行实例
终结实例
重启实例
挂接卷
分离卷
请获取控制台输出
4)网络控制器
管理主机中的网络资源
分配确定的IP地址
为项目配置VLAN
为计算节点配置网络
5)Object Store:提供存储服务。
6)Auth manager:提供认证与授权服务。
7)Volume controller:为计算服务器提供快速,跟持久化块级存储。
8)Scheduler :选择一个合适的实例的计算控制器。
OpenStack Compute 是一个无共享,基于消息的框架。Cloud Controller与Object Store之间通过HTTP进行交互,与Network controller,Volume controller,Scheduler 之间采用 AMQP进行交互,为防止阻塞,OpenStack Compute采用异步调用机制。
四、 计算服务项目包源码内容
针对上面地各个模块,在nova项目包中有相应的源代码结构如下:
1、nova.api.ec2:实现Amazon EC2 AWS的API。注意euca2ools就是通过这个API接口实现对云平台的管理
2、nova.api.openstack:实现Openstack的API。nova-manage使用该接口,这是Openstack云管理平台的标准,目前还在制定过程中。Openstack网站上的“OpenStack Compute Developer Guide API 1.1”就是描述的这个部分。由于这一部分还在进化过程中,我们不能完全地据此进行。
3、nova.auth:与认证和授权的相关内容都在这里。基本按照Amazon EC2的IAM结构进行管理的。
4、nova.cloudpipe: 为project创建VPN服务器的代码。从代码上看,VPN实际上是云中一个tiny类型的虚拟机,在上面有一个VPN服务器。
5、nova.compute: 计算节点的相关代码,api.py中定义了compute节点的详细接口。Api.py将请求转化成在AMQP消息发送出去,交给manager.py中的ComputeManager去运行。
6、nova.console:Nova增强了它的控制台服务。控制台服务允许用户可以通过代理服务器访问虚拟化实例。这就涉及了一对新的守护进程(nova-console和nova-consoleauth).
7、nova.db:数据库操作
8、nova.image: image管理的代码都在这里。service.py定义了image管理的相关接口,后端有三个driver: glance, local, 和s3. 分别使用不同的后端存储来存放image。service.BaseImageService定义了image管理的接口。每个成员方法都有详细的描述。
9、nova.ipv6: ipv6地址操作类
10、nova.network: 与网络相关的配置都在这里
11、nova.notifier: 事件通知器,就目前的代码来看,这个通知器好像还没有被使用起来。
12、nova-object store 提供的是简单存储服务
13、nova.scheduler:各种Scheduler。。。
14、nova.test:各种test。
还没有评论,来说两句吧...