OpenStack的架构及组件(Havana)
服务 | 项目名 | 描述 |
控制台 | Horizon | 用户通过该服务与OpenStack的各服务进行交互,如启动虚机实例、分配IP地址、设置访问控制等; |
计算 | Nova | 按需分派并管理虚机; |
网络 | Neutron | 通常是计算服务通过该服务管理网络设置之间的连接,也可以允许终端用户创建并添加网络接口;通过一个插件式架构支持大量网络广商设备及网络技术; |
存储类 | ||
对象存储 | Swift | 存取文件,但并不提供传统挂载式的文件服务; |
块存储 | Cinder | 向虚机提供可用于持久存储的块存储服务; |
共用服务 | ||
身份服务 | Keystone | 为OpenStack提供认证及授权服务。 |
镜像服务 | Glance | 提供虚机镜像的注册服务;同时计算服务也使用该服务分派实例; |
计量/监控服务 | Ceilometer | 用于计费、基准测试及数据统计等功能 |
更高层服务 | ||
编排组织服务 | Heat | 使用自带的HOT模板或AWS的CloudFormation模板,通过OpenStack中各服务的REST API,将各组件的资源组织形成云应用; |
Nova
计算服务是OpenStack的核心服务,它由nova-compute模块通过libvirt、XenAPI等管理hypervisor,从而管理虚机,此外它还通过nova-api服务向外提供如EC2兼容、管控功能等的接口,通过nova-scheduler模块提供虚机调研逻辑等;这些模块间的通信全部通过消息队列完成;
Swift
对象存储服务是OpenStack最早期的两个服务之一(另一个是计算服务),在OpenStack平台中,任何的数据都是一个对象;swift-proxy模块对外提供如HTTP(S)、OpenStack Object API及与S3兼容的存取接口。对象的存取经swift-proxy接入后,还需要经三个模块进行定位,即account、container、object;这是因为在OpenStack中一个对象被描述为:某个帐户下某个容器中的某个对象;
Glance
Glance的出现是解决虚机镜像的管理问题;在生成一个镜像后,需要将镜像注册到系统的数据库中;当要实例化一个虚机时,需要将镜像分派到一台具体的实机上用来以启动虚机;因而Glance最重要的接口是镜像的注册和分派;
Cinder
Essex将nove的卷管理api独立化后,Folsom终于将卷管理服务抽离成了Cinder;Cinder管理所有的块存储设备,块设备可以挂接在虚机的实例中,然后虚机里的guest系统可以像操作本地卷一样操作块存储设备;
Cinder需要处理的主要问题应该是接入各种块设备,如本地磁盘、LVM或各大广商提供的设备如EMC、NetApp、HP、HuaWei,还有如Vmware提供的虚拟块设备等。
值得一提的是发现在Cinder的驱动列表中出现了NFS,按理说NFS提供的不是块访问接口,而是文件访问接口,走到文档中看到说明为:NFS based cinder driver. Creates file on NFS share for using it as block device on hypervisor.竟然是用NFS上的文件模拟块设备。为什么不直接写一个将本地文件模拟为块设备的驱动呢?应该是写成NFS驱动,可以将NFS的挂载动作封装在驱动中。
Neutron
经过一定时间的演变,网络管理也抽离成一个独立的服务;在OpenStack的网络管理流程中,通常需要经过以下几个步骤:
1. 创建一个网络;
2. 创建一个子网;
3. 启动一个虚机,将一块网卡对接到指定的网络上;
4. 删除虚机;
5. 删除网络端口;
6. 删除网络;
Keystone
身份服务需要进行认证凭证的验证及关于用户、角色等的信息,及所有相关的元数据;这些数据全都由Keystone服务管理,并提供CRUD的操作方法;另外这些信息可以从另一个认证服务中获取,例如使用LDAP做Keystone的后端。
OpenStack与VM
以上这些服务与服务、服务与虚机的关系如下图所示:
- 真正服务于VM的服务只有Nova、Glance、Neutron、Cinder:
- Nova调派资源实例化虚机;
- Glance提供虚机实例化时需要的镜像;
- Neutron提供网络连接;
- Cinder提供外接的块存储服务;
- Ceilometer从上面与虚机相关的几个服务中收集数据,用于统计、监控、计费、报警等;
- Swift可以为Glance提供镜像的存储服务,可以为Cinder提供卷的备份服务;
- Keystone为所有服务提供认证、授权等服务;
- Horizon为所有服务提供基于Web的操作接口;
- 通过Heat可以方便地将各组件组织起来;