用户 / 管理员
│
├── Horizon Web 控制台
├── OpenStack CLI
└── REST API
│
Keystone 身份认证
│
┌────────────┼────────────┐
│ │ │
Nova Neutron Cinder
计算 网络 块存储
│ │ │
│ │ └── 存储后端
│ └────────────── OVS / OVN / Linux Bridge
└── KVM / QEMU / VMware / Hyper-V
│
计算节点与虚拟机核心
通过独立的组件分别管理计算、存储、网络等底层物理资源,并统一通过 RESTful API 进行交互与集成
核心组件
- Keystone(身份认证服务):
- 整个云平台的“看门人”。
- 负责管理用户、项目、权限,并为其他所有组件提供认证和授权令牌(Token),同时维护服务目录。
- Nova(计算服务):
- OpenStack 的“大脑”。
- 负责管理虚拟机的整个生命周期(创建、调度、销毁),它并不直接提供虚拟化能力,而是通过驱动管理底层的 Hypervisor(如 KVM、Xen 等)。
- Neutron(网络服务):
- 负责云平台的网络构建。
- 提供虚拟交换机、路由器、防火墙、IP 地址分配(DHCP)以及负载均衡等网络服务的管理。
- Glance(镜像服务):
- 虚拟机的“模板库”。
- 负责存储和管理虚拟机的磁盘镜像,当 Nova 需要创建虚拟机时,会从 Glance 下载镜像。
- Cinder(块存储服务):
- 为虚拟机提供持久化的“云硬盘”。
- 支持即插即用,即使虚拟机被销毁,Cinder 上的数据依然存在。
- Swift(对象存储服务):
- 用于存储海量非结构化数据(如图片、视频、备份文件等)。
- 具有极高的容错性、弹性和扩展性,其存储不需要挂载给虚拟机即可直接通过 API 访问。
- Horizon(仪表盘/Web 界面):
- 提供了一个可视化的网页控制台,让管理员和最终用户能够通过鼠标点击来轻松申请和管理上述所有资源。
通信
| 通信机制 | 作用对象 | 技术选型示例 | 说明 |
|---|---|---|---|
| RESTful API | 组件之间 / 用户与组件 | HTTP/HTTPS | 外部用户发起的请求,或者组件与组件之间的高层逻辑调用,均采用公开的标准 API 接口。 |
| AMQP 消息队列 | 组件内部进程之间 | RabbitMQ / Qpid | 每个组件(如 Nova)内部有多个子进程,为了实现异步处理和高并发,它们通过消息队列进行内部的数据传递。 |
| 数据库 | 状态存储 | MySQL / MariaDB | 用于保存云平台的所有配置信息和运行状态(如虚拟机列表、网络拓扑等)。 |
节点类型
-
控制节点 (Control Node): 运行所有核心管理服务的 API、消息队列(RabbitMQ)和数据库(MySQL),是平台的控制中枢。
服务:- Keystone
- Glance API
- Nova API
- Nova Scheduler
- Neutron Server
- Horizon
- Placement
- 数据库
- 消息队列
- Memcached
-
计算节点 (Compute Node): 真正承载虚拟机运行的物理服务器,主要运行
nova-compute服务及底层的虚拟化软件。
服务:nova-compute- KVM/QEMU
- libvirt
- Neutron Agent 或 OVN 组件
-
网络节点 (Network Node): 专门负责处理进出云平台的数据流量,运行 Neutron 服务,负责 NAT、路由和 DHCP 等网络流量的分发。
-
存储节点 (Storage Node): 专用于部署 Cinder 或 Swift 服务的物理服务器,提供磁盘阵列或分布式存储集群。
可能运行- Cinder Volume
- Swift 存储服务
- Ceph OSD
- NFS
- iSCSI
工作流程
1. 认证与请求接入
- 用户身份认证 (Keystone):
用户(通过 Web 界面 Horizon 或命令行 CLI)输入账号密码向 Keystone 发起请求。Keystone 验证通过后,会返回一个 Token(令牌) 和一份 服务目录(Catalog)。 - 提交创建请求 (Nova-API):
用户拿着这个 Token 和虚拟机的配置参数(几核几G、什么镜像、什么网络),向 Nova-API 发起“创建虚拟机”的 HTTP 请求。Nova-API 再次向 Keystone 校验该 Token 的有效性,验证通过后,在数据库中生成一条处于Scheduling(调度中)状态的虚拟机记录。
2. 大脑决策与调度
- 节点筛选 (Nova-Scheduler):
Nova-API 将任务通过 RabbitMQ 消息队列 丢给 Nova-Scheduler(调度器)。调度器采用两步算法选出最合适的物理机(计算节点):- 过滤 (Filtering): 排除掉内存不足、CPU 满了、或者不符合用户特定标签的物理机。
- 权重 (Weighting): 对剩下的合格物理机进行打分(比如谁的剩余内存最多谁分数高),最终选出一个最优的物理节点。
3. 计算节点接管与资源拼装
-
任务下发 (Nova-Compute):
确定了物理机后,调度器通过消息队列把创建任务发送到该特定物理机上的 Nova-Compute 进程。从这一步开始,这台物理机正式接管控制权,开始向其他组件“要资源”: -
获取系统镜像 (Glance):
Nova-Compute 向 Glance 发起请求,把用户指定的操作系统镜像(如 CentOS)下载到这台物理机的本地缓存中(如果本地已经有缓存,则直接克隆,提速创建)。 -
配置网络与 IP (Neutron):
Nova-Compute 向 Neutron 发起网络配置请求。Neutron 负责在底层的虚拟交换机上为该虚拟机创建虚拟网卡接口(Port)、分配局域网 IP 地址,并配置好安全组(防火墙规则)。 -
挂载云硬盘 (Cinder,可选):
如果用户在创建时勾选了“需要额外挂载一块数据盘”,Nova-Compute 会向 Cinder 发起请求。Cinder 会在后台存储(如 Ceph)中划分好空间,并通过 iSCSI 或 Ceph RBD 协议将这块“云硬盘”连接并映射到这台物理机上。
4. 底层虚拟化启动
- 驱动翻译与拉起 (Hypervisor/KVM):
当镜像、网络、磁盘全部到位后,Nova-Compute 会把所有的配置信息组合起来,翻译成底层的XML配置文件。然后调用本地的虚拟化驱动(通常是 Libvirt),由 Libvirt 去通知底层的 KVM / QEMU 真正拉起虚拟机进程。 - 状态回写:
虚拟机成功开机引导后,Nova-Compute 会向消息队列发送一条状态更新消息,将数据库中该虚拟机的状态由Networking/Spawning变更为Active(运行中)。至此,用户就可以在界面上看到虚拟机已开机。
存储架构
本地存储
计算节点使用本地磁盘保存虚拟机磁盘
优点:
- 延迟低
- 配置简单
- 成本较低
缺点:
- 迁移困难
- 节点故障可能影响虚拟机
- 扩展能力有限
Ceph
Note
Ceph 是 OpenStack 中常见的统一分布式存储后端,可同时提供:
- RBD:块存储
- RGW:对象存储
- CephFS:文件存储
优点:
- 分布式
- 可扩展
- 支持副本和纠删码
- 适合多计算节点共享存储
- 便于在线迁移
缺点:
- 部署复杂
- 对网络和磁盘要求高
- 需要监控和容量规划
网络架构
| 网络 | 作用 |
|---|---|
| 管理网络 | 服务之间的控制通信 |
| 租户网络 | 虚拟机之间的业务通信 |
| 外部网络 | 浮动 IP 和外网访问 |
| 存储网络 | 访问 Cinder、Ceph、NFS |
| 隧道网络 | VXLAN、Geneve 等封装流量 |
与KVM的关系
OpenStack
├── Keystone:认证
├── Nova:管理虚拟机
├── Neutron:管理网络
├── Cinder:管理云硬盘
├── Glance:管理镜像
└── 调用 libvirt
libvirt
└── 调用 QEMU/KVM
KVM
└── 在物理服务器上运行虚拟机- KVM 是虚拟化技术
- QEMU 是虚拟硬件和设备模拟器
- libvirt 是虚拟机管理接口
- OpenStack 是面向多租户和大规模资源池的云管理平台