Openstack架构解析
最后更新于:2022-04-01 21:48:59
OpenStack 是一个面向 IaaS 层的开源项目,用于实现公有云和私有云的部署及管理,是一个云计算的管理平台.
**需要弄明白一点,openstack是虚拟化资源的管理平台.不实现具体的资源虚拟化技术细节.**
## OpenStack 架构
### 概念架构图
![openstack概念图](http://7xqnvr.com1.z0.glb.clouddn.com/openstack%E6%9E%B6%E6%9E%84%E8%A7%A3%E6%9E%901.png)
从概念架构图我们主要需要了解:openstack为我们提供什么服务?
图片解析:
|Integration整合|Presentation表现层|Logic逻辑层(控制层)|Resources(资源曾)|Management(管理层)|
|--|--|--|--|--|
|Identity认证|Compute API计算接口|Orchestration部署|Compute计算|Admin API管理员API|
|Billing计费|Image API映像接口|Scheduling调度|Volume卷(硬盘上的存储区域)|Monitoring测控|
||User dashboard仪表盘(显示系统各种参数)|Policy策略|Network网络||
||Customer portal顾客门户(就是UI)|Image Register映像注册表|||
|||Logging日志|||
OpenStack是一个云平台管理的项目,这个项目由几个主要的组件组合起来完成一些具体的工作。
截至 Grizzly 版本, OpenStack 含七个核心项目:
|英文概念|中文|项目|功能描述|
|--|--|--|--|
|Compute|计算|Nova|OpenStack Compute (Nova) 控制云计算架构(基础架构服务的核心组件)。它是用 Python 编写的,创建一个抽象层,让CPU、内存、网络适配器和硬盘驱动器等商品服务器资源实现虚拟化管理(但并不实现具体的虚拟化技术),并具有提高利用率和自动化的功能。它的实时 VM 管理具有启动、调整大小、挂起、停止和重新引导的功能,这是通过集成一组受支持的虚拟机管理程序来实现的。还有一个机制可以在计算节点上缓存 VM 镜像,以实现更快的配置。在运行镜像时,可以通过应用程序编程接口(API)以编程方式存储和管理文件。|
|Networking|网络|Neutron/Quantum|Networking (Neutron) 之前被称为 Quantum,它提供了管理局域网的能力,具有适用于虚拟局域网(VLAN)、动态主机配置协议和 Internet Protocol 版本 6 的一些功能。用户可以定义网络、子网和路由器,以配置其内部拓扑,然后向这些网络分配 IP 地址和 VLAN。浮动 IP 地址允许用户向 VM 分配(和再分配)固定的外部 IP 地址。|
|Identity Management|认证|Keystone|OpenStack Identity Management (Keystone) 管理用户目录以及用户可以访问的 OpenStack 服务的目录。其目的是跨所有 OpenStack 组件暴露一个中央身份验证机制。Keystone 本身没有提供身份验证,它可以集成其他各种目录服务,如 Pluggable Authentication Module、Lightweight Directory Access Protocol (LDAP) 或 OAuth。通过这些插件,它能够实现多种形式的身份验证,包括简单的用户名密码凭据,以及复杂的多因子系统。|
|Object Storage|对象存储|Swift|Swift 是一个分布式存储系统,主要用于静态数据,比如 VM 镜像、备份和存档。该软件将文件和其他对象写入可能分布在一个或多个数据中心内的多个服务器上的一组磁盘驱动器,在整个集群内确保数据复制和完整性。|
|Block Storage|块存储|Cinder|OpenStack Block Storage (Cinder) 管理计算实例所使用的块级存储。块存储非常适用于有严格性能约束的场景,比如数据库和文件系统。与 Cinder 配合使用的最常见存储是 Linux 服务器存储,但也有一些面向其他平台的插件,其中包括 Ceph、NetApp、Nexenta 和 SolidFire。|
|Image Service|镜像服务|Glance|OpenStack Image Service (Glance) 为 VM 镜像(尤其是为启动 VM 实例中所使用的系统磁盘)提供了支持。除了发现、注册和激活服务之外,它还有快照和备份功能。Glance 镜像可以充当模板,快速并且一致地部署新的服务器。API 服务器暴露了 Representational State Transfer(REST,具象状态传输)接口,用户可以利用它来列出并获取分配给一组可扩展后端存储(包括 OpenStack Object Storage)的虚拟磁盘镜像。用户可采用多种格式为服务提供私有和公共镜像,这些格式包括 VHD(Microsoft(® Hyper-V®)、VDI(VirtualBox)、VMDK(VMware)、qcow2(Qemu/基于内核的虚拟机),以及 Open Virtualization Format。其他一些功能包括注册新的虚拟磁盘镜像、查询已公开可用的磁盘镜像的信息,以及流式传输虚拟磁盘镜像等。|
|User Interface Dashboard|图形用户界面|Horizon|图形用户界面,管理员可以很容易地使用它来管理所有项目|
此图为Grizzly版本组件调用关系图,简述了套件之间是如何运作的:
![openstack组件调用关系图](http://7xqnvr.com1.z0.glb.clouddn.com/openstack%E6%9E%B6%E6%9E%84%E8%A7%A3%E6%9E%902.png)
### 逻辑架构图:
![openstack逻辑架构](http://7xqnvr.com1.z0.glb.clouddn.com/openstack%E6%9E%B6%E6%9E%84%E8%A7%A3%E6%9E%903.png)
* 终端用户通过和nova-api对话来与OpenStack Compute交互。
* OpenStack Compute守护进程之间通过队列(行为)和数据库(信息)来交换信息,以执行API请求。(交换信息的方式我们以后会讲)
* OpenStack Glance基本上是独立的基础架构,OpenStack Compute通过Glance API来和它交互。
#### 其各个组件的情况如下:
1. nova-api守护进程是OpenStack Compute的中心。它为所有API查询(OpenStack API 或 EC2 API)提供端点,初始化绝大多数部署活动(比如运行实例),以及实施一些策略(绝大多数的配额检查)。
因此很多相对于openstack独立的基础架构是跟nova-api交换信息的,而不是向其他进程那样使用队列和数据库;
2. nova-compute进程主要是一个创建和终止虚拟机实例的Worker守护进程。基本原理很简单:从队列中接收行为,然后在更新数据库的状态时,执行一系列的系统命令执行他们。
3. nova-volume(cinder)管理映射到计算机实例的卷的创建、附加和取消。这些卷可以来自很多提供商,比如,ISCSI和AoE。
4. Nova-network(Neutron/Quantum) worker守护进程类似于nova-compute和nova-volume。它从队列中接收网络任务,然后执行任务以操控网络,比如创建bridging interfaces或改变iptables rules。
5. Queue提供中心hub,为守护进程传递消息。当前用RabbitMQ实现。但是理论上能是python ampqlib支持的任何AMPQ消息队列。
6. SQL database存储云基础架构中的绝大多数编译时和运行时状态。当前广泛使用的数据库是sqlite3(仅适合测试和开发工作),MySQL和PostgreSQL。
7. OpenStack Glance,是一个单独的项目,它是一个compute架构中可选的部分,分为三个部分:
```
glance-api:glance-api接受API调用;
glance-registry: glance-registry负责存储和检索镜像的元数据,实际的Image Blob存储在Image Store中;
the image store:Image Store可以是多种不同的Object Store,包括OpenStack Object Storage (Swift);
```
8. user dashboard(Horizon)是另一个可选的项目。OpenStack Dashboard提供了一个OpenStack Compute界面来给应用开发者和devops staff类似API的功能。当前它是作为Django web Application来实现的。当然,也有其他可用的Web前端。(说白了就是个UI)
### 逻辑图在概念图上的映射:
![openstack逻辑图概念图映射](http://7xqnvr.com1.z0.glb.clouddn.com/openstack%E6%9E%B6%E6%9E%84%E8%A7%A3%E6%9E%904.png)
## 参考
http://448230305.iteye.com/blog/2081977
';