OpenStack 的基本结构可以分为几个核心组件,每个组件都有明确的功能定位,并且通过标准化的 API 进行通信。它本质上是一个“分布式云计算平台”,组件之间通过消息队列和数据库进行协调,配合 REST API 对外提供管理接口。


OpenStack 基本结构与组件说明

控制平面与数据平面

在逻辑架构上,OpenStack 主要分为:

  1. 控制平面(Control Plane)
    管理云平台的所有资源与调度,包括虚拟机、网络、存储等。所有核心服务都运行在控制节点。

  2. 数据平面(Data Plane)
    实际承载计算任务和存储数据的物理/虚拟资源,包括计算节点、存储节点等。


核心组件

1. Keystone(身份认证服务)

  • 功能:负责用户认证(Authentication)、授权(Authorization)和服务目录(Service Catalog)。

  • 运行方式:独立服务进程(通常是 WSGI 应用),监听 HTTP API 请求。

  • 通信方式

    • 组件调用 Keystone 的 REST API 获取 Token。

    • 其他组件在接收到 API 请求时,通过 Keystone 验证 Token 合法性。

    • 数据存储通常在 MySQL/MariaDB,缓存可用 Memcached/Redis。


2. Glance(镜像服务)

  • 功能:提供虚拟机镜像的存储、查询与分发。

  • 运行方式

    • API 服务:响应镜像管理的 HTTP 请求。

    • Registry 服务(可选,已逐渐废弃):存储镜像元数据。

  • 通信方式

    • 与 Swift(对象存储)或 Ceph RBD 等后端通信存放镜像数据。

    • 与 Nova 通信,在创建虚拟机时提供镜像。

    • 数据存储元信息在数据库,镜像文件通过 HTTP、RBD、NFS 等方式传输。


3. Nova(计算服务)

  • 功能:管理计算资源(虚拟机、宿主机)。

  • 子组件

    • nova-api:对外提供 REST API。

    • nova-scheduler:调度虚拟机到合适的计算节点。

    • nova-compute:运行在计算节点上,调用虚拟化后端(KVM、QEMU、VMware 等)创建/销毁虚拟机。

    • nova-conductor:协调 compute 节点与数据库的访问(防止 compute 直接访问 DB)。

  • 通信方式

    • 组件间通过 RabbitMQ/ZeroMQ/Kafka 消息队列通信。

    • 与 Keystone 验证用户,与 Glance 获取镜像,与 Neutron 分配网络,与 Cinder 分配存储。


4. Neutron(网络服务)

  • 功能:为虚拟机提供网络连接与网络资源管理(包括 VLAN/VXLAN、路由、NAT、安全组等)。

  • 子组件

    • neutron-server:核心 API 服务。

    • 插件与代理(如 L3 agent、DHCP agent、Open vSwitch agent)。

  • 运行方式:API 服务+各节点上的网络代理。

  • 通信方式

    • 通过 RPC 与 Nova、其他 Neutron agent 通信。

    • 与 OVS/OVN 或 Linux Bridge 交互配置网络。

    • 数据存储在数据库。


5. Cinder(块存储服务)

  • 功能:提供持久化块存储卷(类似云硬盘)。

  • 运行方式

    • API 服务:响应卷的创建、挂载、删除等请求。

    • Volume 服务:与存储后端(LVM、Ceph RBD、FC SAN 等)交互。

  • 通信方式

    • 通过 REST API 接收 Nova 或用户请求。

    • 后端通过驱动调用存储系统 API。

    • 元数据存数据库,数据存储在存储系统。


6. Swift(对象存储服务,可选)

  • 功能:存储和获取非结构化数据(镜像、备份、日志等)。

  • 运行方式:多进程 HTTP 服务,支持水平扩展。

  • 通信方式

    • API 调用(RESTful HTTP)。

    • 数据分片存储,元数据存储在容器数据库。


7. Horizon(Web 控制台)

  • 功能:基于 Django 的 Web 管理界面,调用各服务 API。

  • 运行方式:WSGI Web 应用。

  • 通信方式

    • 调用 Keystone 认证获取 Token,再调用其他服务的 REST API。

OpenStack 的通信方式总结

  1. 对外 API 调用

    • 所有服务都通过 REST API 提供功能,HTTP(S) 协议。

    • API 通常运行在控制节点,经过 Keystone 认证。

  2. 组件间通信

    • 消息队列(RabbitMQ/ZeroMQ/Kafka):Nova、Neutron、Cinder 等的异步消息传递。

    • 数据库(MySQL/MariaDB/PostgreSQL):存储元数据。

  3. 数据传输

    • 镜像分发:HTTP、RBD、NFS。

    • 块存储:iSCSI、RBD、FC。

    • 网络:VXLAN、GRE、VLAN。


OpenStack 组件部署位置与内部功能区分

管理端(控制节点)

主要运行 API、调度、认证、数据库、消息队列等控制服务,不直接运行虚拟机或存储数据。
通常高可用部署为 多控制节点(HA)。

组件 角色 说明
Keystone 身份认证 用户认证、授权、服务目录,全在管理端。
Glance 镜像管理 镜像 API 服务和元数据存储在管理端,镜像文件可放对象存储(Swift/Ceph)。
Nova API / Scheduler / Conductor 计算管理 所有 API、调度器、数据库访问协调器都在管理端。
Neutron Server 网络 API 核心 API 服务和调度逻辑在管理端。
Cinder API / Scheduler 块存储管理 提供 API 和卷调度功能的服务在管理端。
Horizon Web 控制台 Web 界面在管理端部署。
数据库(MySQL/MariaDB) 元数据存储 所有组件的元数据集中在管理端数据库。
消息队列(RabbitMQ/ZeroMQ/Kafka) 组件通信 所有节点与管理端的消息交互中心。

节点端(计算节点、存储节点、网络节点)

计算节点(Compute Node)

主要负责运行虚拟机实例,直接与虚拟化后端(KVM、QEMU 等)交互。

组件 角色 说明
nova-compute 计算执行 调用虚拟化驱动(libvirt/KVM)创建、销毁虚拟机。
Neutron Agent(如 OVS Agent) 网络配置 负责虚拟机网络接口配置、VXLAN/VLAN 隧道建立。

网络节点(Network Node)

专门负责三层路由、NAT、防火墙、安全组等功能(可与计算节点合并部署)。

组件 角色 说明
L3 Agent 三层路由 管理虚拟路由器、SNAT/DNAT。
DHCP Agent DHCP 服务 给虚拟机分配 IP。
Metadata Agent 元数据代理 虚拟机启动时提供配置信息(cloud-init)。

存储节点(Storage Node)

存放持久化数据,包括块存储和对象存储。

组件 角色 说明
Cinder Volume 块存储执行 负责与存储后端(LVM、Ceph RBD、FC)交互,创建/挂载/删除卷。
Swift Account / Container / Object 对象存储 Swift 的多进程服务,管理对象数据。
Ceph OSD / MON / MDS 分布式存储 提供 RBD、CephFS、对象存储等功能。

总结部署关系(简化版)

控制节点(管理端)
  ├─ Keystone
  ├─ Glance
  ├─ Nova API / Scheduler / Conductor
  ├─ Neutron Server
  ├─ Cinder API / Scheduler
  ├─ Horizon
  ├─ 数据库
  └─ 消息队列

计算节点
  ├─ nova-compute
  ├─ Neutron Agent (OVS/OVN)
  
网络节点
  ├─ L3 Agent
  ├─ DHCP Agent
  ├─ Metadata Agent

存储节点
  ├─ Cinder Volume
  ├─ Swift 服务进程
  └─ Ceph OSD / MON / MDS