分享

Openstack核心,nova详细介绍

hyj 发表于 2014-3-12 21:07:37 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 1 94000
本帖最后由 hyj 于 2014-3-12 21:26 编辑
nova的作用是什么?
Glance的作用是什么?
nova具体如何工作?
nova-schedule的作用是什么?
创建实例,nova的那个组件来接受请求?
启动虚拟机,更新数据库的状态,由谁来完成?
安装网桥接口和改变iptable规则由nova的哪个组件来完成?
为各个模块之间的通信使用那个组件?

思考:
nova与Glance是如何配合的?


已有(2)人评论

跳转到指定楼层
hyj 发表于 2014-3-12 21:15:36
本帖最后由 hyj 于 2014-3-12 21:47 编辑

1.1 openstack是什么

Openstack是一个跟Eucalyptus,AWS(Amazon web Services)类似的IaaS框架,目前它包括三个主要的项目:Nova,Swift,Glance。下面分别对3个项目做简单介绍:


Nova


提供虚拟服务器后的需求、主要是为虚拟服务器提供自动创建和管理,负责管理所有的资源、网络、认证以及可扩展性。与amazon的EC2和Rackspace的云服务器类似。


Swift:


提供对象/blob存储,该项目类似于Rackspace的云文件存储和Amazon的S3.


Glance


是一个镜像项目,为Nova的虚拟机镜像提供发现,检索和存储功能。


1.2云服务提供商的概念架构

1.png


从上图,我们可以清晰的看到,该概念性架构层次清晰,用户可能有开发者,普通的用户,及其管理员,分成了5个层次:


表示层:


组件这里与用户交互,接受和提供信息。在这一层,框架为非开发人员提供门户网站和为开发人员提供API。


逻辑层(控制层)


提供我们的云智能和控制功能。这一层将内部业务流程(对应于复杂任务的工作流程),调度(确定资源工作的映射),政策(配额等),镜像注册表(实例镜像的元数据),日志(对事件进行记录)。


资源层:


为整个框架提供提供网络,计算,存储等资源。


管理层:


为云框架管理者提供管理和监控功能。


集成:


框架提供集成功能,比如服务提供商已经有一个客户的身份和计费系统。任何云架构将需要与这些系统集成。


1.3 OpenStack Compute逻辑框架

2.png



nova-api


起到Cloud Controller的作用,主要为所有的API查询提供了一个接口(比如Openstack API ,EC2 API),引发多数业务流程的活动(如运行一个实例),并实施一些政策(主要是配额检查)。


疑问:具体如何工作??


nova-schedule :


接受一个消息队列的虚拟实例请求,通过算法决定该请求应该在那台主机上运行,这个算法可以由我们指定。即起到调度器(Scheduler)的作用.


nova-compute:


是一个非常重要的守护进程,负责创建和终止虚拟机实例,即管理着虚拟机实例的生命周期。该模块内部非常复杂,基本原理是简单的,就是接受来自队列的动作然后执行一些列的系统操作(如启动一个KVM实例),并且更新数据库的状态。


疑问:更新数据库的一些什么状态?


nova-network :


该守护进程跟nova-compute and nova-volume 2个模块的功能是相似的。接受来自队列的任务,然后执行相应的任务对网络进行操作(比如:安装网桥接口和改变iptable规则)


疑问:网桥结构是如何的,iptable的内容是什么呢?


Queue:


为各个模块之间的通信提供起到一个集线器的作用,即数据交换中心。目前是采用RabbitMQ ,理论上是可以采用任何的基于python ampqlib的AMPQ message queue。


SQL database


存储云基础设施构建时和运行时状态。包括可用的实例类型,正在使用的实例类型,可用的网络和项目。理论上,OpenStack Compute是支持所有基于 SQL-Alchemy的数据库,但目前广泛使用的数据库主要是Sqlite3,Mysql,PostgreSQL。


疑问:具体存储的这些内容的那些具体参数呢?


Glance:该项目独立于Openstack Compute,起到镜像的作用。在该项目中,主要包括三个部分: glance-api, glance-registry and 镜像存储。Glance-api接受API调用,glance-registry存储和检索镜像的元数据。镜像存储Image blobs。存储可以选择不同的存储方案,比如用Swift实现存储。

Dashboard:该项目是一个可选的项目,主要是为开发者等提供API。



针对上面地各个模块,在nova项目包中有相应的


源代码结构如下:


nova.api.ec2:实现Amazon EC2 AWS的API。注意euca2ools就是通过这个API接口实现对云平台的管理


nova.api.openstack:实现Openstack的API。nova-manage使用该接口,这是Openstack云管理平台的标准,目前还在制定过程中。Openstack网站上的“OpenStack Compute Developer Guide API 1.1”就是描述的这个部分。由于这一部分还在进化过程中,我们不能完全地据此进行。


nova.auth:与认证和授权的相关内容都在这里。基本按照Amazon EC2的IAM结构进行管理的。


nova.cloudpipe: 为project创建VPN服务器的代码。从代码上看,VPN实际上是云中一个tiny类型的虚拟机,在上面有一个VPN服务器。


nova.compute: 计算节点的相关代码,api.py中定义了compute节点的详细接口。Api.py将请求转化成在AMQP消息发送出去,交给manager.py中的ComputeManager去运行。


nova.consoleNova增强了它的控制台服务。控制台服务允许用户可以通过代理服务器访问虚拟化实例。这就涉及了一对新的守护进程(nova-console和nova-consoleauth).

nova.db:数据库操作


nova.image: image管理的代码都在这里。service.py定义了image管理的相关接口,后端有三个driver: glance, local, 和s3. 分别使用不同的后端存储来存放image。service.BaseImageService定义了image管理的接口。每个成员方法都有详细的描述。


nova.ipv6: ipv6地址操作类


nova.network: 与网络相关的配置都在这里


nova.notifier: 事件通知器,就目前的代码来看,这个通知器好像还没有被使用起来。


nova-object store 提供的是简单存储服务

nova.scheduler:各种Scheduler。。。

nova.test:各种test。


1.4概念框架与逻辑框架的对应关系

3.png


从上图可以看出,根据设计该框架的预想,目前还有集成层的计费系统,跟身份系统和逻辑层的日志系统还未实现。其他部分均由了相应的是实现。


1.5 系统框架

4.png




根据上图,下面简单对各个模块进行简单的描述:


Cloud Controller:由许多组件构成,代表了全局状态,并且负责和所有其他组建的交互。


API Server:为Cloud Controller担当一个Web Service的前端角色.


Compute controller:提供计算服务。


Object Store:提供存储服务。


Auth manager:提供认证与授权服务。


Volume controller:为计算服务器提供快速,跟持久化块级存储。


Network controller:提供了计算服务器之间及其计算服务器和公共网络之间的交互。


Scheduler :选择一个合适的实例的计算控制器。


OpenStack Compute 是一个无共享,基于消息的框架。Cloud Controller与Object Store之间通过HTTP进行交互,与Network controller,Volume controller,Scheduler 之间采用 AMQP进行交互,为防止阻塞,OpenStack Compute采用异步调用机制。


1.6 服务架构
5.png


二. Openstack Compute的一些具体功能及其模块介绍


2.1 权限管理

角色有全局角色和项目角色2种。一个用户对特别的镜像的访问是受项目限制的(即只有一些相应的项目才能访问到相应的镜像),为每一个用户分配密钥跟私有密钥,用户可通过密钥对去访问实例。对项目的资源配额是具体到每一个项目的。


Openstack采用 Role-Based Access Control (RBAC) model 来进行权限管理,分为5种权限:


admin(clound administrator):全局的角色,享有和管理nova的所有访问权限。

itsec(It security): 限于IT安全管理人员,允许隔离所有project的实例。

project manager:项目权限,提供添加用户到一个项目的权限,终止和启动实例,查询project images。

netadmin(network administrator): 项目一级的角色,允许分配和分配IP地址,创建和修改防火墙规则。

Developer :默认的一个角色。


2.2 网络管理

目前,nova支持三种网络,前2种均是将所有的虚拟机连接到一个网桥,没有实现访问权限的控制,第3种为每一个项目建立一个VLAN,每一个项目的虚拟机连接到一个网桥,用户通过密钥等才能访问项目,3种模式具体说明如下:


Flat Network Mode:

由网络管理员指定子网。虚拟机实例的ip地址从子网中抓取,并且在启动时是注入到镜像。每个实例从可用地址池中获得一个固定ip(Fixed IP)。一个网络管理者必须在管理网络的网络控制器上和管理实例的云控制器上配置Linux网桥。系统所有的实例都连接到同一个桥,由网管手动配置。


说明:通过对每台虚拟机分配固定ip地址,让他们都连接到一个桥,没有实现访问的权限控制。


Flat DHCP NetworkMode:

通过DHCP Server从子网中为虚拟机分配ip地址。虚拟实例的ip地址从网管分配的子网中抓取。像Flat Mode,所有的实例都连接到一个网桥。此外一个DHCP Server 运行服务于所有配置的实例。在这种模式里面,compute做了多一点的配置就是尝试桥接到一个以太网设备上。


说明:用工具DHCPServer为虚拟机分配ip地址,让他们都连接到一个桥,没有实现访问的权限控制。


VLAN Network Mode

(默认模式):在这种模式中,Compute为每一个项目创建一个VLAN和网桥。对于多机器安装,VLAN Network Mode需要一个支持VLAN标记的交换机,该项目获得一个范围内的私有ips,该范围的ips仅VLAN内能够访问。为了让一个用户访问在他们项目内的实例,一个专门的VPN的实例(code named cloudpipe)需要被创建。Compute产生一个用户访问VPN的认证跟密钥,并且自动开始VPN。它为每一个项目实例提供了私有网段。这些实例能够通过来自于互联网的VPN被访问。在这种模式里面,每个项目拥有他们自己的VLAN,Linux网桥,和子网。子网由网管分配,当需要时被动态分配到项目。DHCP Server会为每一个项目从相应的子网中为每个虚拟机分配ip。属于一个项目的所有实例被桥接到相同的VLAN,当需要的时候,OpenStack Compute会创建Linux网桥和VLANs。


注:该方式为每个项目建立一个VLAN,项目内所有的实例桥接到该VLAN,用户通过密钥可以访问该项目。


Cloudpipe:是一个特别的VPN实例,在VLAN  networking mode 中,Cloudpipe是将终端用户连接到他们的项目实例的一种方法。


Cloudpipe的支持代码实现了管理命令(通过nova-manage)来自动为一个项目创建一个虚拟机,这个虚拟机允许用户vpn进入他们项目的私有网络。访问这个vpn通过项目的网络主机提供的一个公共端口。这允许用户自由地访问项目中得虚拟机而不用把他们的机器暴露给公共网络。


Cloudpipe镜像实际上是一台安装了openvpn的linux实例。它需要一段简单脚本用于从metadata server上获取用户数据,b64解码成一个zip文件,运行zip文件的autorun.sh脚本。


这autorun脚本将配置和运行openvpn,运行使用来自nova的数据。


创建一个Cloudpipe的镜像:


1在一个linux镜像上安装openvpn;


2在/etc/openvpn下安装一个server.conf.template;


3在/etc/openvpn下设置up.sh,down.sh.


4在系统启动时,从/etc/rc.local下载并且运行payload(有效负载)。


5 安装配置/etc/network/interfaces。


6 在flagfile文件(nova.conf)中注册镜像和设置镜像id:

  --vpn_image_id=ami-xxxxxxxx


7 在flagfile文件(nova.conf)中配置其他一些vpns参数:

  --use_project_ca

--cnt_vpn_clients=5


8 用nova-manage设置一些参数:

  设置密钥对<project_id>-vpn,然后保存在密钥目录;

  创建一个安全组<project_id>-vpn;

  为vpn创建一个证书和私钥并且保存在CA/projects/

<project_id>/ directory里。


VPN访问:

在VLAN模式,每个私有的第一个IP是为cloudpipe实例保留的。给这个指定ip给该实例目的是让nova-network能够创建来自外部的访问的转发规则。每个项目的网络在网络主机上面为其给了一个高编号的端口。在vpn实例上,这个端口将自动转发到1194端口。


创建网络


1. 创建子网:如nova-manage network create 192.168.0.0/24 1255

Vlan方式网络创建


1. 首先配置nova.conf文件,--network_manager=nova.network.manager.VlanManager。

2. 用命令创建4个vlans网络:


nova-manage--flagfile=/etc/nova/nova.conf network create 10.1.171.0/24 1 256

nova-manage--flagfile=/etc/nova/nova.conf network create 10.1.172.0/24 1 256

nova-manage--flagfile=/etc/nova/nova.conf network create 10.1.173.0/24 1 256

nova-manage--flagfile=/etc/nova/nova.conf network create 10.1.174.0/24 1 256

3.登录数据库,去设定每个VLAN的网络ID。同时数据库中涉及到的更新字段包括vlan,bridge(br_vlan), gateway, dhcp_start, reserved(属于表fixed_ips)。

4. 为项目创建项目管理器:

nova-manage --flagfile=/etc/nova/nova.conf  user  admin  $username

创建一个项目,并且将上面的user做为其管理员:

nova-manage --flagfile=/etc/nova/nova.conf  project  create  $projectname  $username

获得为这个项目分配网络的凭据:

nova-manage --flagfile=/etc/nova/nova.confproject zipfile $projectname

$username


实例的IP地址分配跟关联:


将一个保留ip分配给一个实例:

euca-associate-address –i [instance_id] [floating_ip].并且将这个ip从池中删除。当想将ip跟实例断开时:

euca-disassociate-address [floating_ip]

euca-deallocate-address [floating_ip]


关联公共IP:


Openstack对于公共IP使用NAT。


将一个网络从项目中删除:


nova-manage project scrub projectname。


2.3 云管理工具

云管理主要用到2种工具: nova-manage  和 Euca2ools 。前者仅能被拥有管理员权限的人使用,而后者可以被所用的用户使用。


2.4 关于镜像

镜像可以用于发现,登记检索虚拟机镜像,镜像服务提供了一个 RESTful API,该API提供了一个查询VM image元数据和检索实际的镜像, Image的框架涉及到2个重要的部分:API Server,Registry Server(s)。通过 euca2ools  对镜像进行添加,绑定,删除操作。有2种方式提供镜像服务OpenStack Image Service(Glance)和 nova-objectstore service,镜像存储可以通过S3,OpenStack Object Storage(Swift),和本地文件系统。OpenStack 只接受 ext4 文件系统格式的镜像。


2.5关于实例

一个实例就是一台虚拟机。由OpenStack Compute管理实例的生命周期。


2.6 监控程序

Openstack支持多种监视器,常用的涉及到2种虚拟机监视器:XEN,KVM,系统默认选择的KVM。


2.7 证书(Credentials)

Nova能够产生2种证书:一种是用于绑定镜像的CA证书,另外一种是用于设置euca2ools工具的环境变量。


2.8 nova会涉及到配置的地方

配置日志,配置管理系统(Hypervisor)(默认情况下是KVM,可以的配置项有kvm, qemu, uml, xen),ipv6地址,镜像跟存储,live migration,数据库,消息系统,认证跟授权。

三 nova中的数据库跟RabbitMQ


2.9 几个概念的注释

地区(zone):一组可用性区域,构成了单独一个地理上得集群。

可用性区域:相当于数据中心。


3.0 nova数据库中表

共有29张表,包括可用的实例类型,正在使用的实例类型,可用的网络和项目,密钥证书等内容。具体表如下:



表 名
表的作用
auto_tokens
所有API事物认证令牌相关参数
certificates
x509证书相关参数
compute_nodes
运行的计算结点服务相关参数
console_pools

consoles
实例控制台会话
export_devices

fixed_ips
分配的固定ip
floating_ips
动态ip
instances_action
客户端实例的创建,更新,删除等动作和结果相关参数
instance_metadata
实例元数据key/value对
instance_types
实例类型相关,有五种实例:m1.medium,m1.tiny,m1.large,m1.xlarge,m1.small
instances
客户端虚拟机实例相关参数,包括相关属性跟动作
iscsi_targets
主机的iscsi 目标器
key_pairs
存储密钥对的相关信息,私钥发给用户公钥存储数据库
migrate_version

migrations
运行实例迁移
networks
网络相关的参数
projects
项目相关的参数
quotas
项目的配额
security_group_instance_association

security_group
_rules

security_groups

services
在主机上运行的服务
user_project_
association

user_project_role
_association

user_role_
association

users
用户相关参数
volumes
块存储设备
zones





回复

使用道具 举报

行走的风景 发表于 2014-3-14 01:37:20
看起来很复杂的样子。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条