Lazy loaded image
Openstack 云操作系统及核心组件概述
Words 15652Read Time 40 min
2025-12-19
2025-12-23
date
related_level
slug
type
relate_date
summary
status
tags
category
last_updated
Dec 23, 2025 10:17 PM
是否已更新
orginal_page
是否推荐
 

Openstack架构介绍

OpenStack简介
起源
  • 2006年:亚马逊推出AWS,开启云计算时代。
  • 2010年7月:NASA与Rackspace合作发布OpenStack,对标AWS并兼容其服务。
  • OpenStack从诞生之初对标AWS,一直在向AWS学习,同时开放接口去兼容各种AWS服务
定义
  • OpenStack是用于管理虚拟机、裸金属和容器的云基础设施。
  • 可统一控制数据中心的计算、存储和网络资源池。
  • 所有资源通过API或Web界面管理。
功能
  • 提供基础设施即服务(IaaS)解决方案。
  • 各服务通过API集成,支持大规模扩展、实施简单、标准统一。
工作原理概述
  • 由命令脚本组成的项目软件包构建云环境。
  • 依赖两类软件:
    • 虚拟化软件:抽象硬件资源。
    • 基础操作系统:执行OpenStack指令。
  • OpenStack本身不虚拟化资源,而是协调虚拟化层构建云。
  • 与虚拟化软件、操作系统协同工作。
版本演进
  • 首版代号Austin,后续版本按英文字母A–Z顺序命名,通常以峰会举办地命名。
  • 目前8家白金会员:AT&T、爱立信、华为、英特尔、Rackspace、红帽、SUSE、腾讯。
设计理念
  • 开放
    • 源码、设计与开发流程全部开放。
    • 不重复造轮子,不依赖私有/商业组件。
  • 灵活
    • 架构可裁剪,按需选择组件。
    • 广泛使用驱动与插件机制。
    • 通过配置项灵活启用功能。
  • 可扩展
    • 松耦合架构,组件间通过RESTful API通信,组件内消息总线通信。
    • 无中心节点,避免单点故障。
    • 无状态设计,所有持久化数据存于数据库。
OpenStack与虚拟化
  • OpenStack不是虚拟化平台,仅提供控制面。
  • 核心任务:将计算、存储、网络资源抽象为池,并封装为用户服务。
  • 数据面(如Hypervisor、存储设备)不属于OpenStack范畴。
  • 虚拟化是底层实现手段之一,非OpenStack核心关注点。
    • notion image
OpenStack与云计算
  • OpenStack是构建云计算的骨干组件(如内核、框架、总线)。
  • 云计算 vs 虚拟化:
    • 云计算:IT能力服务化、按需使用、按量计费、多租户隔离。
    • 虚拟化:环境隔离、资源复用、提升效率。
  • 完整云平台还需:
    • Cloud BSS(Cloud Business Support System,业务支撑系统)
    • Cloud OSS(Cloud Operation Support System ,运营支撑系统)
notion image
OpenStack架构
  • 架构概览
    • OpenStack由多个可插拔的服务组成,用户可根据需求灵活选用组件。
    • notion image
  • 逻辑架构
    • 每个服务由多个进程构成,除Keystone外,所有服务至少包含一个API进程,用于接收和预处理请求。
    • 服务内部进程通过AMQP消息代理(如RabbitMQ)通信,状态数据存储在数据库(如MySQL、MariaDB、SQLite)中。
    • 用户可通过Web界面、命令行工具或直接调用API(如curl)访问OpenStack。
  • 生产环境部署架构示例
    • 典型部署包括:部署服务节点、控制节点、计算节点、网络节点和存储节点。
    • 控制节点建议部署三台以上以实现高可用,其他节点按实际需求扩展。
    • notion image
  • OpenStack核心服务简介
    • 界面管理服务 Horizon
      • 提供基于Web的控制界面,用于管理OpenStack资源和服务。
      • 首次出现在“Essex”版本,依赖Keystone认证服务。
      认证服务 Keystone
      • 提供身份验证、服务发现和多租户授权支持(如LDAP、OAuth等)。
      • 首次出现在“Essex”版本,为其他服务提供认证支持。
      镜像服务 Glance
      • 功能包括发现、注册和检索虚拟机镜像,支持多种存储方式。
        • 如本地文件系统、Swift对象存储、Cinder块存储等
      • 首次出现在“Bexar”版本,依赖Keystone。
      计算服务 Nova
      • 提供大规模可扩展的计算资源管理,支持裸机、虚拟机和容器。
      • 首次出现在“Austin”版本,依赖Keystone、Neutron和Glance。
      存储服务 Cinder
      • 调用不同存储接口驱动,将存储设备转化成块存储池,使虚拟机实例获得持久化存储。
      • 首次出现在“Folsom”版本,依赖Keystone。
      对象存储服务 Swift
      • 提供高可用性、分布式、最终一致的对象存储服务,适合存储需要弹性扩展的非结构化数据。
      • 首次出现在“Austin”版本,为其他服务提供对象存储。
      网络服务 Neutron
      • 负责管理虚拟网络,提供网络即服务功能。
      • 首次出现在“Folsom”版本,依赖Keystone。
      编排服务 Heat
      • 支持云应用程序编排OpenStack基础设施资源,提供REST API及CloudFormation兼容API。
      • 首次出现在“Havana”版本,依赖Keystone。
      计量服务 Ceilometer
      • 数据收集服务,提供规范化数据处理能力,支持客户计费、资源跟踪和警报。
      • 首次出现在“Havana”版本。
OpenStack 创建 VM 时各主要项目间交互示例
  • 创建一个VM需要计算资源,存储资源,网络资源,镜像
notion image
按领域划分的其他组件
  • Compute
    • Ironic 裸金属即服务(BMaaS),用于在物理服务器上自动部署操作系统
    • Magnum 容器编排引擎即服务,支持部署 Kubernetes、Docker Swarm 等集群
    • Senlin 提供集群化资源管理(如 VM 组),支持自动伸缩和高可用策略
    • Storlet 在 Swift 对象存储中运行用户自定义代码(FaaS),实现数据处理前置
  • Storage
    • Manila 共享文件系统即服务,支持 NFS、CIFS 等协议,供多个虚拟机同时挂载
    • Karbor 数据保护即服务,提供备份、快照、容灾等统一数据保护框架
    • Freezer 专注于备份与恢复,支持文件系统、卷、数据库的增量/全量备份
  • Network
    • Designate DNS 即服务,提供多租户 DNS 记录管理
    • Kuryr 桥接容器网络与 Neutron,使 Kubernetes/Docker 容器使用 OpenStack 虚拟网络
    • Octavia 负载均衡即服务(LBaaS v2),替代旧版 Neutron LBaaS
    • Tacker NFV 编排器,用于部署和管理网络功能虚拟化(如 vRouter、vFW)服务链
    • Tricircle 支持跨多个 OpenStack 区域的统一网络和资源调度,适用于多数据中心场景
  • Security, identity & compliance
    • Barbican 密钥管理服务,安全存储密钥、证书、密码等敏感信息
    • Congress 策略即服务,用于定义和执行合规规则(如“禁止公网访问 DB”)
    • Mistral 工作流即服务,通过 YAML 编排自动化任务(如故障恢复、审批流程)
  • Data & analytics
    • Trove 数据库即服务,支持 MySQL、PostgreSQL、MongoDB 等一键部署与管理
    • Sahara 大数据即服务,快速部署 Hadoop、Spark 集群
    • Searchlight 基于 Elasticsearch 提供跨服务资源的全文搜索与索引
  • Management
    • Rally 性能测试与基准工具,用于验证 OpenStack 部署的稳定性与扩展性
    • Vitrage 根因分析(RCA)与告警聚合,关联多个服务告警以定位故障源头
    • Watcher 根据策略(如节能、负载均衡)提出或自动执行资源调整建议
OpenStack API 端口一览
  • 核心组件端口
Keystone, Barbican
服务
协议
端口
用途
网络类型
Keystone (API)
TCP
5000
内部/公共 API(非 TLS)
Internal API
Keystone (Admin)
TCP
35357
Undercloud 管理通信
Control Plane
Keystone (Public TLS)
TCP
13000
公共 API(TLS)
External
Barbican (Secrets)
TCP
9311 / 13311
内部 / 公共 API(TLS)
Internal API / External
Nova
服务
协议
端口
用途
网络类型
Nova API
TCP
8774 / 13774
内部 / 公共 API(TLS)
Internal API / External
Nova Placement
TCP
8778 / 13778
资源调度 API(TLS 可选)
Internal API / External
Nova Metadata
TCP
8775
实例元数据服务
Internal API
Nova VNC Proxy
TCP
6080 / 13080
控制台代理(TLS)
Internal API / External
Nova Libvirt (TLS)
TCP
16514
安全虚拟机管理
Internal API
Nova Live Migration
TCP
61152–61215
实时迁移
Internal API
Nova SSH Migration
TCP
2022
冷/热迁移(SSH)
Internal API
Ironic
服务
协议
端口
用途
网络类型
Ironic API
TCP
6385 / 13385
内部 / 公共 API(TLS)
Control Plane / External
Ironic Inspector
TCP
5050 / 13050
裸金属发现(TLS)
Control Plane / External
IPA (Python Agent)
TCP
9999
部署/清理代理
Control Plane
HTTP PXE
TCP
8088
镜像下载
Control Plane
TFTP PXE
UDP
69
引导文件传输
Control Plane
Glance, Cinder, Swift, Ceph
服务
协议
端口
用途
网络类型
Cinder
TCP
8776 / 13776
块存储 API(TLS)
Internal API / External
Glance
TCP
9292 / 13292
镜像服务 API(TLS)
Internal API / External
Swift
TCP
8080
对象存储代理(内部)
Internal API
Swift
TCP
6200–6202
后端服务(对象/容器/账户)
Swift专用
Ceph MON
TCP
6789
Monitor 通信
Storage
Ceph OSD/MDS/MGR
TCP
6800–7300
数据/元数据服务
Storage / Storage Mgmt
Ceph RadosGW
TCP
8080 / 13808
S3/Swift 兼容 API(TLS)
Storage / External
Ceph Dashboard
TCP
8444
Web 管理界面(含 Grafana/Prometheus)
Control Plane / External
iSCSI (LVM)
TCP
3260
Cinder iSCSI(不推荐)
Storage
Neutron, OVN, Octavia
服务
协议
端口
用途
网络类型
Neutron API
TCP
9696 / 13696
网络服务 API(TLS)
Internal API / External
VXLAN
UDP
4789
租户网络隧道
Tenant
GRE
GRE
-
隧道(无端口)
Tenant
Geneve (OVN)
UDP
6081
OVN 隧道
Tenant
OVN DBs
TCP
6641–6644
North/Southbound & 集群同步
Internal API
Octavia API
TCP
9876 / 13876
负载均衡 API(TLS)
Internal API / External
Amphora 管理
UDP/TCP
5555 / 514 / 9443
心跳、日志、控制
Tenant (lb-mgmt-net)
VRRP
IP Proto 112
-
L3 HA 故障转移
Provider/Tenant
Telemetry
服务
协议
端口
用途
网络类型
Aodh (Alarming)
TCP
8042 / 13042
告警服务(TLS)
Internal API / External
Gnocchi (Metrics)
TCP
8041 / 13041
指标存储(TLS)
Internal API / External
Collectd
UDP/TCP
25826 / 5666
指标采集(AMQP)
Internal API
SNMP
UDP/TCP
161 / 199
监控(Ceilometer)
Control Plane
Database, Cache
服务
协议
端口
用途
网络类型
MySQL/Galera
TCP
3306
客户端访问
Internal API
TCP
4567
节点间复制
Internal API
TCP
4568
增量状态传输
Internal API
TCP
4444
全量快照同步(rsync)
Internal API
TCP
9200
HAProxy 健康检查
Internal API
Memcached
TCP
11211
Token 缓存
Internal API
Redis
TCP
6379
服务/复制(通过 socat 支持 TLS)
Internal API
TCP
3124
Pacemaker 控制
Internal API
RabbitMQ
服务
协议
端口
用途
网络类型
RabbitMQ
TCP
5672
AMQP 消息
Internal API
TCP
25672
Erlang 节点集群
Internal API
TCP
4369
epmd(Erlang 端口映射)
Internal API
TCP
15672
管理 UI
Internal API
TCP
3122
Pacemaker 控制
Internal API
Pacemaker / Corosync
服务
协议
端口
用途
Pacemaker remote
TCP
3121
远程节点控制
Galera / OVN / Redis / RabbitMQ Pacemaker 控制
TCP
3123 / 3125 / 3124 / 3122
容器化服务 HA 控制
pcsd
TCP
2224
节点间通信
Corosync
UDP
5405
多播心跳
DLM
TCP
21064
分布式锁管理器
其他
服务
协议
端口
用途
网络类型
SSH (Ansible)
TCP
22
Undercloud → 所有节点
Control Plane
NTP
UDP
123 / 323
时间同步(外联)
External / Control Plane
DNS
UDP/TCP
53 / 853 / 953
域名解析 / DoT / rndc
External / Control Plane
Docker Registry
TCP
8787
容器镜像拉取(Undercloud)
Control Plane
HAProxy Stats
TCP
1993
负载均衡监控
Control Plane
 

Openstack Horizon 界面管理

Horizon 简介
界面管理服务 Horizon
  • 提供基于 Web 的控制界面,供云管理员和用户管理 OpenStack 资源与服务
  • 首次出现在 OpenStack “Essex” 版本
  • 仅依赖 Keystone 认证服务
Horizon 在 OpenStack 中的定位
  • 作为全局组件,提供 Web 管理界面,与其他 OpenStack 服务交互
  • 支持资源管理、实例生命周期管理及插件集成等
Horizon 核心价值
  • 核心支持:开箱即用支持所有核心 OpenStack 项目
  • 可扩展性:开发者可轻松添加组件
  • 易于管理:架构清晰,代码易维护
  • 视图一致:保持统一的视觉与交互体验
  • 易于使用:界面友好且功能强大
  • 兼容性强:API 注重向后兼容
Horizon 与其他服务的交互
  • 唯一强制依赖 Keystone
  • 可与镜像、计算、网络等服务协同工作
  • 也适用于含独立服务(如对象存储)的环境
基于 Django 的 Horizon 体系结构
notion image
  • 底层通过 openstack_dashboard.api 模块封装 OpenStack 各项目的 API(仅暴露子集),供上层调用
  • 面板结构分三层:Dashboard → PanelGroup → Panel
    • 所有界面元素模块化,表单、表格等封装为 Python 类(如 View 模块)
  • 基于 Django 框架构建,结合现代前端技术
    • 遵循 Django 的业务逻辑与表现分离原则
    • 视图处理业务逻辑,模板控制系统表现
    • 践行 DRY 原则,强调代码复用与可扩展性,便于快速开发管理面板
Horizon 界面介绍
项目视图
  • 页面由 Dashboard、PanelGroup、Panel 及单击Panel 后渲染的内容组成
  • 示例:当前 Dashboard 为“项目”,PanelGroup 为“计算”,Panel 为“概况”
  • 项目(租户)是云中的组织单位,用户在其中创建和管理实例
notion image
管理员视图
notion image
身份管理视图
notion image
 

Openstack Keystone 认证管理

Keystone 简介
认证服务 Keystone
  • 提供身份验证、服务发现和多租户授权
    • 支持 LDAP、OAuth、OpenID Connect、SAML 和 SQL
  • 首次出现在 OpenStack “Essex” 版本
  • 为其他 OpenStack 服务提供统一认证支持
Keystone 在 OpenStack 中的定位
  • 是 OpenStack 默认的身份管理系统(Identity Service)
  • 属于共享服务层,为所有其他项目提供认证与授权能力
Keystone 基本概念
  • Domain:代表机构或数据中心,必须全局唯一;是 User、Group、Project 的容器
  • Project:资源集合单位,在所属域内唯一即可
  • Role:权限定义单元,必须全局唯一
  • 其他核心概念:
    • User:可访问 OpenStack 服务的个体或系统,属于某个 Domain
    • Group:User 的集合,便于批量授权,也属于某个 Domain
    • Service:OpenStack 提供的服务类型(如计算、网络)
    • Endpoint:服务的访问地址(Public / Internal / Admin)
    • Token:临时访问凭证
    • Credential:用于身份验证的数据(如用户名+密码)
Domain/Project、Role 与 Group/User 的逻辑关系
  • 角色分配(Role Assignment)是一个三元组:Role + Identity(Group/User)+ Resource(Domain/Project)
notion image
Keystone 在 OpenStack 中的作用
  • 作为用户与服务之间的桥梁
  • 用户从 Keystone 获取 Token 和服务目录,在访问服务时附带 token;服务通过 Keystone 验证 Token 合法性
Keystone 与其他服务的交互
  • 所有外部请求和内部服务调用均需先通过 Keystone 获取 Token
  • 类似服务总线,是 OpenStack 安全体系的核心
Keystone 架构
  • 主要组件
    • Keystone API:对外接收认证、鉴权及其他身份管理请求
    • Keystone Middleware:嵌入其他服务,缓存并验证 Token,减轻主服务负载
    • Keystone Services:实现核心认证与授权逻辑,不同服务模块负责处理特定类型的身份管理任务
    • Keystone Backends:实现 Keystone 各项服务的具体逻辑
      • 不同的功能(如用户管理、角色分配等)可由不同的后端驱动(如 SQL、LDAP 等)提供支持
    • Keystone Plugins:扩展认证方式(如 OAuth、Federation)
notion image
Keystone 对象模型
核心对象包括:Identity、Resource、Assignment、Token、Catalog、Policy、Service
  • Token 包含 User、Scope(Project/Domain/Trust)、Role 信息
  • 访问控制由 Policy(policy.json)定义
notion image
Service
  • Keystone 内部由多个服务(如 Identity、Token)组合形成,并通过 Endpoint 暴露
  • 也管理外部 OpenStack 服务(如 Nova、Glance)的注册与端点
Identity 提供身份凭据验证以及 User 和 Group 的数据
  • 提供身份凭据验证,管理 User 和 Group,均隶属于某个 Domain
  • 用户名/组名仅在所属 Domain 内唯一
Resource 提供有关 Project 和 Domain 的数据
  • 管理 Project 和 Domain
    • Project是OpenStack资源拥有者的基本单元,OpenStack中所有资源都属于特定项目
  • 所有资源归属特定 Project;未指定 Domain 的 Project 自动归入 “Default” 域
Assignment 提供有关 Role 和 Role Assignment 的数据
  • 管理 Role 与 Role Assignment
  • Role 可在 Domain 或 Project 级别分配给 User 或 Group
Token 提供用户访问服务的凭证
  • 代表用户访问权限的临时凭证
  • Token一般包含User信息、Scope信息(Project、Domain或者Trust)、Role信息
Catalog 提供用于 Endpoint 的端点注册表
  • 维护服务端点注册表,以便外部访问OpenStack服务
  • Endpoint 分三类:Public(外部用户)、Internal(内部用户)、Admin(管理员)
Policy 定义其资源的访问策略
  • 实现基于角色的访问控制(RBAC)
  • 以 JSON 文件定义访问规则
    • 策略文件的路径是/etc/SERVICE_NAME/policy.json,如 /etc/keystone/policy.json
    • notion image
使用示例
  • 普通用户:获取 Token 和服务目录
  • 管理员:管理用户、项目、角色、服务与端点
  • 服务自身:验证 Token、查询其他服务位置
notion image
Keystone 对象模型分配关系示例
notion image
Region,Service, Endpoint 关系
  • Catalog 中包含不同Region中的不同Service(Keystone的服务),每个 Service 一般提供不同类型的Endpoint
notion image
Keystone 工作原理与流程
支持多种认证方式
  • 基于令牌(UUID / PKI / PKIZ / Fernet)
  • 基于外部系统(如 REMOTE_USER)
  • 基于本地凭证(用户名+密码,默认方式)
UUID 令牌
  • 32 字节随机 ID,无附加信息
    • 发送请求时,将这个Token ID以X-Auth-Token的方式传入
  • 每次请求需向 Keystone 验证,增加服务负载
  • 存储于数据库
notion image
PKI 令牌
  • 使用私钥签名,包含用户和目录信息
  • 支持本地验证(无需每次查 Keystone)
  • 体积大(KB 级),可能超出 HTTP 头限制
  • 工作过程
    • 用户将用户名和密码发送给Keystone
    • Keystone使用私钥加密秘钥生成令牌返回给客户端
    • 客户每次向OpenStack 发送调用资源和服务请求时会携带这个Token令牌
    • OpenStack 服务API会使用本地公钥对令牌进行验证
    • notion image
PKIZ 令牌
  • PKI 的压缩版本,体积约为 90%,效果有限
  • 验证流程与 PKI 相同
    • 唯一的差别是在Keystone生成Token并返回给客户端时进行了压缩
    • notion image
Fernet 令牌(当前默认)
  • 对称加密(AES),携带少量的用户信息,不存储于数据库
  • 体积小(约 255 字节),适合大规模或多区域部署
  • 每次验证需联系 Keystone(不支持本地验证)
  • 需定期轮换密钥
  • 验证流程
    • 用户将用户名和密码发送给Keystone
    • Keystone使用秘钥生成临时令牌并返回给客户端
    • 客户每次向OpenStack发送调用资源和服务请求时,会携带这个Token令牌
    • OpenStack服务API接收到请求后会将Token发送到Keystone进行验证,由Keystone验证其有效性和合法性。验证成功返回信息
    • notion image
令牌类型对比
  • Region的数量影响PKI/PKIZ令牌的大小
  • 从安全的角度上看,UUID无需维护密钥,PKI需要妥善保管Keystone server上的私钥,Fernet需要周期性的更换密钥
  • 从安全、维护成本和成熟度上看,UUID > PKI/PKIZ > Fernet
特性
UUID
PKI
PKIZ
Fernet
大小
32 Byte
KB 级别
KB 级别
约 255 Byte
支持本地认证
不支持
支持
支持
不支持
Keystone 负载
存储于数据库
携带信息
User,Catalog 等
User,Catalog 等
User 等
涉及加密方式
非对称加密
非对称加密
对称加密 (AES)
是否压缩
是(90%)
令牌类型选择涉及多个因素,包括 Keystone 负载、region数量、安全因素、 维护成本以及令牌本身的成熟度
  • Keystone server 负载低 → UUID
  • Region < 3 且 Keystone 负载高 → PKI/PKIZ(旧版适用)
  • Region ≥ 3 或 Keystone 新部署 → Fernet(推荐)
RBAC 原理
  • Policy模块在检测时需要三方面的数据:
    • 1、policy.json策略配置文件
    • 2、auth_token添加到http头部的token数据
    • 3、用户的请求数据
  • 在图中实例policy.json文件中,定义了all_admin包含了 admin 和 internal_admin
    • 定义了list_project针对all_admin的具体规则,create project时需要admin角色
    • notion image
RBAC 与 Policy
  • 在 RBAC 中,权限与角色相关连,用户通过成为适当角色的成员而得到这些角色的权限
  • 权限 = Who(User/Role) + What(操作/资源) + How(权限)
  • policy.json 定义规则(如 “create_project 需 admin 角色”)
  • 验证时结合:策略文件 + Token 信息 + 用户请求
notion image
OpenStack 认证流程(以创建 VM 为例)
  • 用户 → Keystone:认证获取 Token
    • 一般是用户名和密码
  • 用户 → Nova:携带 Token 请求创建 VM
  • Nova → Keystone:验证 Token
  • Nova → Glance/Neutron:携带 Token 获取镜像/网络
  • Glance/Neutron → Keystone:各自验证 Token
  • 最终返回结果给用户
notion image
总结:Keystone 实现认证与权限控制
  • 用户凭凭证获取 Token
  • 所有服务调用均携带 Token 并由 Keystone 验证
  • 具体操作权限由各服务根据 RBAC 和 policy.json 判断
notion image
 

Openstack Glance 镜像管理

Glance 简介
镜像服务 Glance
  • 提供发现、注册和检索虚拟机镜像功能
  • 镜像可存储于本地文件系统、Swift、Cinder 等后端
  • 首次出现在 OpenStack “Bexar” 版本
  • 依赖 Keystone 进行认证
在 OpenStack 中的定位
  • 即 OpenStack Image Service,提供 RESTful API 查询镜像元数据并获取镜像
  • 属于共享服务层,用于上传和发现可被其他服务使用的数据资产(包括镜像和元数据定义)
    • 镜像:支持发现、注册、检索;可存于多种存储后端(文件系统,Swift 对象存储系统等)
    • 元数据定义:通过 metadefs 目录提供标准化的元数据键/值参考,需配合其他服务实际应用
主要作用
  • 查询与获取镜像及其元数据
    • 元数据存数据库,镜像通过 Glance Store Drivers 存到不同类型后端存储
  • 注册、上传、下载和管理 VM 镜像
  • 支持多种存储方式
  • 创建 VM 快照以备份状态或生成新镜像
与其他服务的关系
  • 依赖 Keystone 认证
  • Nova 调用 Glance 获取镜像以创建实例
  • 镜像可存于 Swift 对象存储
Glance 架构
架构概览
notion image
各组件作用
  • Client:如命令行工具、Horizon、Nova 等使用 Glance 的应用
  • REST API:提供镜像操作接口
  • Glance Domain Controller:核心调度中间件,分发请求至 Auth、Policy、DB 等模块
  • Registry Layer(已废弃):曾用于隔离元数据访问,Newton 后整合进 API,Stein 起完全移除
  • Glance DB:存储配置与元数据,供内部组件共享
  • Database Abstraction Layer (DAL):统一数据库访问接口
  • Glance Store:统一接口,处理与各类存储后端(如文件系统、Swift)的交互
架构简化历程
  • V1 API:镜像元数据操作经 Glance-Registry
    • Glance-API在接收到用户的RESTful请求后,如果该请求与元数据相关,则将其转发给Glance-Registry
  • V2 API:Glance-Registry 功能并入 Glance-API,直接操作数据库
  • Stein 版本起:Glance-Registry 彻底废弃,由 Glance-API + Store 模块替代
Glance 工作原理与流程
基本概念:镜像、实例和规格
  • 镜像(Image):含可引导操作系统的虚拟磁盘模板
  • 实例(Instance):运行中的虚拟机
  • 规格(Flavor):定义 CPU、内存、临时磁盘大小
镜像、实例和规格关系
  • 同一镜像可启动多个实例,互不影响
    • 每个启动的实例都是基于镜像的一个副本
  • 启动实例必须指定规格
  • 添加镜像时需指定磁盘格式和容器格式
支持的磁盘格式
  • 其他镜像,可以先转换成OpenStack支持的格式,再导入使用
  • raw:非结构化格式
  • vhd / vhdx:VMware/Xen/Hyper-V 等使用
  • vmdk:VMware 常用
  • vdi:VirtualBox/QEMU 支持
  • iso:光盘镜像
  • qcow2:QEMU 格式,支持动态扩展与写时复制(推荐)
  • aki / ari / ami:Amazon 镜像类型
  • ploop:Virtuozzo 容器格式
容器格式(当前未被实际使用,建议设为 bare
  • bare:无容器封装(最常用)
  • ovf / ova:OVF/OVA 格式
  • docker:Docker tar 归档
  • compressed:通用压缩格式
  • aki / ari / ami:对应 Amazon 类型
镜像状态和转换图
  • queued:仅元数据存在,未上传数据
  • saving:正在上传镜像数据
  • uploading / importing:通过 import 接口上传中
  • active:可用状态
  • deactivated:禁止非管理员访问
  • killed:上传失败,不可用
  • deleted / pending_delete:已删除或待清理(后者可恢复)
notion image
任务状态
  • pending → processing → success / failure
镜像和实例交互流程
  • 启动前:从 Glance 存储复制基础镜像到计算节点(作为 vda)
    • notion image
  • 启动时:
    • 镜像越小,启动越快
    • 自动创建临时磁盘 vdb(随实例删除而清除)
    • 计算节点使用 iSCSI 挂载 Cinder 卷为 vdc(通过 iSCSI)
      • 如果 Cinder 卷位于单独的网络上,则存储节点配置文件中 my_block_storage_ip 选项会将镜像流量定向到计算节点
    • 实例从 vda 启动并运行
    • notion image
  • 删除后:
    • 释放 vCPU、内存、临时磁盘
    • Cinder 卷保留
    • 原始镜像不受影响
Glance 镜像制作
直接下载官方镜像
  • 多数预装 cloud-init,支持 SSH 密钥登录和用户数据注入
手动制作(以 Ubuntu 18.04 为例)
  1. 用 virt-manager 安装系统
  1. 虚拟机安装 cloud-init:sudo apt install cloud-init
      • cloud-init 用于初始化虚拟机配置
      • 华为云 stack 可以安装 UVP-vmtools 用于虚拟机管理,优化虚拟机 IO 性能
  1. 虚拟机关机:sudo shutdown –h now
  1. 清理虚拟机:sudo virt-sysprep –d VM_ID
  1. 释放虚拟机定义:virsh undefine VM_ID
  1. 制作/转换镜像(如用 qemu-img create
  1. 上传:openstack image create ...
常用工具
  • Diskimage-builder:自动化构建 Fedora/RHEL/Ubuntu/Debian/CentOS/openSUSE 镜像
  • virt-builder:快速生成本地或云用镜像
  • Packer:跨云平台镜像构建
    • 自定义私有镜像推荐使用
镜像格式转换
  • 使用 qemu-img convert 支持多种格式互转:
    • 镜像格式
      qemu-img参数
      QCOW2 (KVM, Xen)
      qcow2
      QED (KVM)
      qed
      RAW
      raw
      VDI (VirtualBox)
      vdi
      VHD (Hyper-V)
      vpc
      VMDK (Vmware)
      vmdk
  • 示例:
    • VDI → RAW:VBoxManage clonehd image.vdi image.img -format raw
    • RAW → QCOW2:qemu-img convert -f raw -O qcow2 image.img image.qcow2
 

Openstack Nova 计算管理

Nova 简介
计算服务 Nova
  • 提供大规模、可扩展、按需自助服务的计算资源
  • 支持管理裸机、虚拟机和容器
  • 首次出现在 OpenStack 的 “Austin” 版本中
  • 依赖 Keystone(认证)、Neutron(网络)和 Glance(镜像)服务
Nova 在 OpenStack 中的定位
  • 即 OpenStack Compute service,是提供计算资源的核心模块
  • 不包含虚拟化软件,而是通过驱动与底层虚拟化机制交互,并通过 Web API 暴露功能
Nova 的使命与作用
  • 实现对计算资源(包括裸金属、虚拟机和容器)的大规模、可扩展、按需、自助访问
  • 负责:
    • 虚拟机生命周期管理
    • 其他计算资源生命周期管理
  • 不负责:
    • 物理主机自身管理
    • 全面系统状态监控
Nova 与其他服务的交互关系
  • 依赖 Keystone 进行认证
  • 创建实例时调用 Glance 获取镜像
  • 实例启动时由 Neutron 提供网络连接
Nova 架构
Nova 系统架构
  • 基于消息传递的“无共享”架构,主要组件可多节点部署,通过 RPC 监听消息
    • DB:SQL 数据库存储数据
    • API:接收 HTTP 请求,转换命令并通过 oslo.messaging 或 HTTP 通信
    • Scheduler:为虚拟机选择合适的物理主机
    • Conductor:协调复杂操作(如创建、调整规格),充当数据库代理
    • Compute:执行虚拟机生命周期操作
    • Placement:跟踪资源提供者库存与使用情况
  • API 服务器处理 REST 请求,读写数据库,并通过 oslo.messaging 发送 RPC 消息
notion image
Nova 物理部署实例
  • 无中心架构,各组件无本地持久化状态,支持水平扩展
  • 通常将 nova-api、nova-scheduler、nova-conductor 部署在控制节点
  • 多控制节点实现高可用与负载均衡,增加节点即可扩容
Nova 服务运行架构
  • 组件可分布式部署,通过 virtDriver 对接不同虚拟化平台
notion image
Nova 资源池管理架构
  • 层级结构:Region > Availability Zone > Host Aggregate
notion image
Nova 组件 - API
  • 提供 REST 接口,处理请求
  • 参数校验、配额检查、资源 CRUD、虚拟机生命周期入口
notion image
Nova 组件 - Conductor
  • 功能:
    • 解耦 nova-compute 与数据库访问
    • 执行创建、迁移、规格调整、重建等复杂流程
    • 支撑 nova-compute 启动依赖与心跳上报
  • 优势:
    • 安全:避免 compute 节点直连数据库
    • 易升级:数据库变更无需更新 compute
    • 性能:RPC 调用支持绿色线程并发,避免阻塞
notion image
Nova 组件 - Scheduler
  • 决定虚拟机部署在哪台物理机
  • 调度两步:过滤满足条件的节点 → 按权重选最优节点
notion image
Nova 组件 - Compute
  • 虚拟机操作的实际执行者,调用对应 hypervisor 驱动
  • 功能:
    • 周期任务(资源刷新、状态同步)
    • 资源统计(resource_tracker + 插件)
    • 支持 KVM、VMware、Xen、LXC、QEMU 等虚拟化平台
  • 架构:Manager + Driver
notion image
Nova 工作原理和流程
虚拟机状态类型及关系
  • vm_state:数据库记录的状态
  • task_state:当前任务状态(中间态或 None)
  • power_state:从 hypervisor 获取的真实电源状态
  • Status:对外展示状态,由 vm_state 和 task_state 联合生成
    • 系统内部只记录 vm_state、task_state、power_state
虚拟机状态组合
vm_state: active
task_state
status
rebooting
REBOOT
reboot_pending
REBOOT
reboot_started
REBOOT
rebooting_hard
HARD_REBOOT
reboot_pending_hard
HARD_REBOOT
reboot_started_hard
HARD_REBOOT
rebuild_block_device_mapping
REBUILD
rebuilding
REBUILD
rebuild_spawning
REBUILD
migrating
MIGRATING
resize_prep
RESIZE
resize_migrating
RESIZE
resize_migrated
RESIZE
resize_finish
RESIZE
default
ACTIVE
vm_state: stopped
task_state
status
resize_prep
RESIZE
resize_migrating
RESIZE
resize_migrated
RESIZE
resize_finish
RESIZE
default
SHUTOFF
虚拟机状态变迁图
notion image
Nova 创建虚拟机流程
  1. 用户通过 Dashboard/CLI 请求创建虚拟机,Keystone 授权并返回 token
  1. nova-api 接收请求,验证 token 有效性
  1. 初始化数据库记录
  1. nova-scheduler 通过调度算法选出合适主机,更新数据库
  1. nova-compute 从队列获取任务,通过 nova-conductor 获取实例详情
  1. nova-compute 分别向 Glance、Neutron、Cinder 获取镜像、网络、存储信息(均经 Keystone 认证)
  1. 调用虚拟化驱动创建虚拟机
notion image
Nova 调度过程
  • 过滤器筛选 → 权重排序 → 选择最优主机
notion image
Nova 过滤调度器
  • 所有权重位于 nova/scheduler/weights 目录下
  • 默认使用 RAMWeigher,空闲内存越多,权重越高
notion image
Live Migration 原理
  • 成功:清除源节点信息
  • 失败:回滚并清除目标节点信息
notion image
Nova 典型操作
  • 虚拟机生命周期管理
    • 创建、删除、启停、重启、重建、规格变更、暂停/恢复、挂起/继续、迁移(含在线)、锁定/解锁、疏散、拯救/解救、搁置/恢复、备份、导出镜像、查询、改密等
  • 卷和快照管理
    • 封装 Cinder API:卷/快照的 CRUD 与查询
  • 虚拟机卷操作
    • 挂卷、卸卷、列表、详情查询
  • 虚拟网络操作
    • 封装 Neutron API:网络 CRUD 与查询
  • 虚拟机虚拟网卡操作
    • 挂载/卸载网卡、网卡列表
  • 虚拟机镜像操作
    • 封装 Glance API:镜像 CRUD 与查询
  • 其他资源操作
    • Flavor、主机组、keypairs、quota 等
Nova 主要操作对象
  • Server:虚拟机,核心资源对象
  • Server metadata:键值对形式的虚拟机描述信息
  • Flavor:虚拟机规格模板(vCPU、内存、磁盘)
  • Quota:租户资源使用上限
  • Hypervisor / node:物理主机(KVM/Xen)或 vCenter 集群
  • Host:物理主机(KVM/Xen)或 vCenter 部署单元
  • Host aggregate:具有相同硬件特性的主机组
  • Server group:定义虚拟机亲和性/反亲和性调度策略
  • Service:Nova 各服务(compute、conductor 等)的状态管理
  • BDM (Block device mapping):块设备映射,描述虚拟机存储设备
  • Image:含操作系统的镜像文件,用于创建虚拟机
 

Openstack Cinder & Swift 存储管理

OpenStack 存储类型
  • 按数据保存时间分为:临时存储(非持久)和 持久存储
  • 临时存储(Ephemeral Storage)
    • 虚拟机关机、重启或删除后,数据丢失
    • 仅部署 Nova 时,默认分配的磁盘为临时存储
    • 默认以文件形式存于计算节点本地磁盘,也可使用 NFS 等外部存储
  • 持久存储(Persistent Storage)
    • 数据生命周期独立于虚拟机,保障长期可用与安全
    • 包括:块存储、对象存储、共享文件系统存储
OpenStack 存储类型对比
类型
用途
访问方式
客户端
管理服务
数据生命周期
容量来源
典型用例
临时存储
运行 OS、提供启动盘
文件系统访问
虚拟机
Nova
随虚拟机终止而释放
Flavor 指定
虚拟机系统盘(如 10GB + 20GB)
块存储
为虚拟机添加持久磁盘
挂载为块设备(如 /dev/vdc)
虚拟机
Cinder
用户主动删除
创建时指定
1TB 数据盘
对象存储
存储海量非结构化数据
REST API
任意客户端
Swift
用户主动删除
物理空间 + 副本策略
10TB 镜像/备份
共享文件系统存储
多虚拟机共享持久存储
挂载为文件系统(如 NFS)
虚拟机
用户主动删除
创建/扩容/配额/管理员设定
NFS 共享目录
OpenStack 持久存储简介
  • 块存储(Cinder):操作对象为磁盘,挂载到主机,适用于数据库等场景,支持 DAS/SAN
  • 对象存储(Swift):操作对象为“对象”,通过唯一 URL 和 REST API 访问
  • 文件存储(Manila):共享文件系统,通过 NFS/CIFS 协议访问;目前使用较少
块存储服务 Cinder
Cinder 简介
  • 提供持久化块存储,支持多种后端存储驱动
  • 首次出现在 “Folsom” 版本,依赖 Keystone
  • 为 Nova 虚拟机、Ironic 裸机、容器提供卷服务
  • 前身为 nova-volume,架构与 Nova 相似
  • 本身不实现存储,仅提供统一抽象层,由厂商驱动对接实际设备
  • 与 Nova 协同提供卷挂载,卷备份可存入 Swift
Cinder 架构
  • Cinder Client:封装 REST 接口,提供 CLI
  • Cinder API:处理卷、快照、备份、volume type、挂载等请求
  • Cinder Scheduler:基于过滤器和权重选择合适后端
  • Cinder Volume:多节点部署,通过驱动对接不同存储(默认 LVM)
  • Cinder Backup:支持将卷备份至 Swift、Ceph、TSM 等
  • SQL DB:存储元数据,支持 MySQL、PostgreSQL 等
notion image
后端存储支持
  • 默认使用 LVM:将物理卷组成卷组,再划分逻辑卷
  • 支持 SAN、Ceph、Sheepdog 及 EMC、华为等厂商设备
部署模式(以 SAN 后端为例)
  • API、Scheduler、Volume 可合设或分离
  • API 与 Scheduler 采用 AA 模式,通过 HAProxy + RabbitMQ 实现高可用与负载均衡
  • Volume 多实例上报同一后端信息,协同处理请求
  • RabbitMQ 与 MySQL 支持主备或集群
notion image
组件功能
notion image
  • API:处理卷/快照/备份 CRUD、挂载/卸载、配额、类型管理
  • Scheduler
      1. 列出所有后端
      1. 用过滤器筛选(如 AZ、容量、能力、亲和性)
      1. 用权重器排序(如容量、随机、自定义)
      1. 返回最优后端
  • Volume:调用驱动在不同的后端设备创建卷,默认驱动为 LVM
    • notion image
工作原理
  • 创建卷流程
      1. Volume 定期上报后端容量 → Scheduler 更新内存状态
      1. API 校验参数、预留配额、写 DB、发消息至 Scheduler
      1. Scheduler 过滤+加权 → 选择后端 → 发消息至对应 Volume
      1. Volume 调用驱动创建实际卷 → 更新 DB 记录
      notion image
  • 挂载卷流程
    • Nova 调用 Cinder API,传递主机信息(如 iSCSI initiator)
    • Cinder Volume 通知存储授权该主机访问
    • 返回连接信息(如 IQN、FC WWPN、NFS 路径)
    • Nova 使用 brick 模块识别设备并通知 hypervisor 挂载到虚拟机
    • notion image
主要操作
  • 卷(Volume):创建、删除、扩容、挂载/卸载
  • 快照(Snapshot):创建、删除、回滚
  • 备份(Backup):备份与恢复
对象存储服务 Swift
对象存储和 Swift 服务概述
  • 对象存储是具有成本效益的横向扩展存储的理想选择。它提供了一个完全分布式的、API可访问的存储平台,可以直接集成到应用程序中或用于备份、归档和数据保留
  • OpenStack Object Storage(Swift)用于冗余、可扩展的数据存储,使用标准化服务器集群来存储 PB 级的可访问数据。它是一种适用于长期检索和更新大量静态数据的存储系统。
  • 对象存储采用无中央控制点的分布式架构,提供更高的可扩展性、冗余性和持久性。对象被写入多个硬件设备,OpenStack 软件负责确保整个集群的数据复制和完整性。
  • 存储集群通过添加新节点实现水平扩展。当一个节点发生故障时,OpenStack 会从其他活动节点复制其内容。OpenStack 使用软件逻辑确保数据在不同设备间的复制与分发
Swift 简介
  • 提供高可用、分布式、最终一致的对象存储
  • 适合存储镜像、图片、邮件、归档等静态非结构化数据
  • 首次出现在 “Austin” 版本,依赖 Keystone
  • 为 Glance、Cinder Backup 等提供后端存储
  • 无中心节点,通过多副本保障数据持久性(理论可达 10 个 9)
Swift 特点
  • 高持久性:多副本跨 Zone 存储
  • 完全对称架构:所有节点对等,维护成本低
  • 无限扩展:容量与性能线性增长,扩容自动均衡
  • 无单点故障:元数据与数据同样分布存储
Swift 架构
  • 采用完全对称、面向资源的分布式系统架构设计,所有组件都可扩展,避免因单点失效影响整个系统运转
  • 访问层(Access Tier)
    • Authentication:集成 Keystone,验证身份并颁发 Token
    • Proxy Node:运行 Proxy Server 处理 REST 请求,转发至 Storage Node
      • Cache Server:基于 Memcached 缓存 Token 和元数据存在性
  • 存储层(Storage Nodes)
    • 分层结构:Region > Zone > Storage Node > Device > Partition
      • Partition:指 Device 上文件系统中的目录,与传统硬盘分区概念不同
notion image
Swift 数据三层逻辑模型:Account → Container → Object
  • 使用 swift stat 可查看 Swift 中 Account、Container 和 Object 的信息
    • /account
      • 唯一命名的逻辑存储区域,包含账户元数据及所属容器列表
      • 注:此处“账户”指存储命名空间,非用户身份
    • /account/container
      • 用户在账户内创建的存储单元,包含容器元数据及所含对象列表
    • /account/container/object
      • 存储实际数据对象,由内容和关联元数据组成
      • 不可嵌套到多个 Container
  • 每层对应服务:Account Server、Container Server、Object Server
  • 使用 Ring(环)映射 Partition 到物理设备,确保副本跨 Zone
    • 通过 ZoneDevicePartitionPartitionReplica 维护该映射信息
notion image
Swift 组件
  • Proxy Server:无状态 API 入口,支持横向扩展
  • Authentication Server:验证身份信息并颁发 Token
  • Cache Server:缓存对象访问令牌、账户和容器的存在性信息(不缓存对象数据本身)
    • 基于 Memcached 集群实现,Swift 使用一致性哈希算法分配缓存地址
  • Account/Container/Object Server:分别管理元数据与对象内容
    • Account, Container 存储在 SQLite 数据库中,Object 内容以文件形式存储在文件系统(推荐 XFS)中,Object 元数据作为文件的扩展属性存储
  • Auditor:定期校验数据完整性,修复损坏副本
  • Replicator:同步副本,推式更新,清理已删对象
  • Updater:异步处理高负载下的更新请求
Swift API
  • 基于 HTTP 的 RESTful 接口
  • 单对象默认上限 5GB(可配置),支持大对象分片上传
  • 支持压缩、批量删除
  • 操作总结:
    • 资源
      URL
      GET
      PUT
      POST
      DELETE
      HEAD
      Account
      /account/
      容器列表
      获取元数据
      Container
      /account/container
      对象列表
      创建
      更新元数据
      删除
      获取元数据
      Object
      /account/container/object
      获取内容+元数据
      创建/覆盖
      更新元数据
      删除
      获取元数据
Swift 工作原理
  • 用户请求 → Proxy Server → 认证 → 转发至对应存储服务
  • 基于 一致性哈希 分布对象,减少扩容迁移量
  • 采用 最终一致性 模型,牺牲强一致换取高可用与扩展性
    • 对象及其副本之间的数据一致性由 Auditor、Updater、Replicator 共同保障
  • Ring 将虚拟 Partition 均匀映射到物理设备,并强制 Partition 副本位于不同 Zone,实现容灾隔离
 

Openstack Neutron 网络管理

Linux 网络虚拟化基础
物理网络与虚拟化网络
  • Neutron 的核心功能是对二层物理网络进行抽象和管理。
  • 虚拟机网络由虚拟网卡(vNIC)和虚拟交换机(vSwitch)实现:vNIC 连接到 vSwitch 端口,vSwitch 最终通过物理网卡接入外部网络。
notion image
网卡虚拟化TAP / TUN / VETH
  • TAP:模拟二层设备,收发以太帧
  • TUN:模拟三层设备,收发 IP 包
    • TAP/TUN 在用户空间创建虚拟接口,可配置 IP 和路由,但流量仅限主机内流通
  • VETH(Virtual Ethernet):成对虚拟接口,一端发包,另一端收包。
    • 常用于连接 Linux Bridge、OVS、容器等组件,构建虚拟网络拓扑。
notion image
交换机虚拟化:Linux Bridge、Open vSwitch
Linux Bridge
  • 二层虚拟交换机,绑定其他网络设备作为桥接端口。
  • 对上层协议栈透明,仅暴露 br0 接口。
  • 绑定设备 ≈ 物理交换机插网线。
  • 配置命令(brctl):
    • brctl addbr BRIDGE:创建网桥
    • brctl addif BRIDGE DEVICE:添加端口
notion image
Open vSwitch (OVS)
  • 产品级虚拟交换机,连接 vNIC 与物理网卡,支持跨 VM 桥接
  • 相比 Linux Bridge,更适合大规模、多租户场景
  • 常用命令(ovs-vsctl):
    • ovs-vsctl add-br BRIDGE:创建网桥
    • ovs-vsctl add-port BRIDGE PORT:添加端口
    • ovs-vsctl show:查看整体配置
    • ovs-vsctl dump-ports-desc BRIDGE:端口详情
    • ovs-vsctl dump-flows BRIDGE:流表条目
notion image
网络隔离Network Namespace
  • 创建隔离的网络空间,每个拥有独立设备、路由表、iptables 规则等
  • 不同命名空间中的 VM 如同在独立物理网络中
  • 常与 VRF(Virtual Routing Forwarding, 虚拟路由转发)配合使用
Neutron 简介
  • OpenStack 的网络即服务(NaaS)组件,自 Folsom 版本引入。
  • 定位为 SDN(软件定义网络)项目,提供虚拟网络基础设施(VNI)和物理网络(PNI)的统一管理。
  • 核心抽象对象:
    • Network:包含一个或多个 Subnet
    • Subnet:IP 地址段
    • Router:跨 Subnet/Network 路由流量
  • 与其他服务交互:
    • 依赖 Keystone 认证
    • 为 Nova 实例提供网络连接
    • 为 Ironic 提供 PXE 网络
Neutron 核心概念
基本对象概览:Network、Subnet、Port、Router、Floating IP
notion image
Network:虚拟二层广播域(逻辑交换机)
  • 类型:
    • Local:单节点隔离,用于测试
    • Flat:无 VLAN,同一 Flat 网络跨节点互通,单广播域
    • VLAN:基于 802.1Q,生产常用
    • VXLAN:UDP 封装 Overlay,突破 VLAN 二层限制
    • GRE:IP 封装 Overlay
  • 生产环境常用 VLAN、VXLAN、GRE。
Subnet:IPv4/IPv6 地址段,分配 VM IP
  • 必须关联 Network。
  • 可分配网关、DNS、静态路由等。
Port:虚拟交换机端口,VM 通过 Port 接入 Network。
  • 可分配 MAC 和 IP
Router:连接 Subnet 或内外网
notion image
Fixed IP 与 Floating IP
  • Fixed IP:Port 的固定 IP,类似物理网卡 IP。
  • Floating IP:从 External Network 分配的可绑定 IP,通过 NAT 映射到 Fixed IP,实现外网访问。
notion image
Physical Network:连接 OpenStack 节点的真实网络
  • 可承载多个虚拟网络
notion image
Provider Network:直接映射 Physical Network
  • 由管理员创建,通常采用 VLAN 或 Flat 模式,可在多个租户之间共享
  • 可跨租户共享,用于连通外部网络。
notion image
External Network:特殊 Provider Network,直连 Internet
  • Router 接入此网络,绑定 Floating IP 实现双向通信。
notion image
Self-service Network(租户网络)
  • 租户自行创建,通常采用 VXLAN 或 GRE 模式,仅本租户内可见和连通
  • 可通过 Router 的 SNAT 访问 Provider Network。
  • 不同租户可使用相同网段
notion image
Security Group
  • 基于 iptables 的 Port 级防火墙策略
    • 可以基于不同的协议,不同的端口号,不同的目的和源地址进行策略配置
  • 每个项目含 default 安全组
    • 默认拒绝所有入站,允许所有出站
Neutron 架构
  • 设计原则:统一 API、核心最小化、可插拔、可扩展。
主要组件:Neutron Server、Message Queue、L2 Agent、L3 Agent、DHCP Agent
  • Neutron Server:提供 API,维护网络资源状态,调用 Plugin 处理请求
    • Advanced Services:LB、Firewall、VPN
  • Message Queue:Server 与各 Agent 通信的通道(不用于 Nova 等外部服务)
  • L2 Agent:实现二层连接(如 ovs-agent)
    • 通常运行在 Hypervisor 节点上
  • L3 Agent:处理路由、SNAT/DNAT、Floating IP
    • 负责将租户网络(Self-service Network)连接到数据中心网络或 Internet
    • 在实际生产环境中,通常部署多个 L3 Agent 以实现高可用和负载分担
  • DHCP Agent:自动配置虚拟机网络
notion image
Neutron Server 提供 API,维护网络资源(如 Network、Subnet、Port 等)的状态,调用 Plugin 处理请求
  • Core Plugin(ML2, Modular Layer 2)
    • 通过 Type Driver 和 Mechanism Driver 支持多后端二层技术
    • Type Driver:定义网络类型(VLAN/VXLAN 等),管理 ID 分配。
    • Mechanism Driver:对接具体实现(OVS/Linux Bridge 等)
      • 从 Type Driver 获取底层网络信息(如 segmentation ID、网络类型),并据此在计算或网络节点上正确配置二层网络连接
  • Service Plugin 提供高阶服务:
    • L3(路由/Floating IP)
    • LB(负载均衡)
    • Firewall(FWaaS)
      • 运行在三层
    • VPN
notion image
Agent 通过调用底层的虚拟或物理网络设备执行 Plugin 下发的任务
  • L2 Agent:管理虚拟交换机和端口
  • L3 Agent:三层路由/NAT/Floating IP
  • DHCP Agent:提供 DHCP 服务
  • Metadata Agent:提供实例 Neutron Metadata 服务访问
    • 如 instance metadata、user data 等
Neutron 常用命令
  • neutron net-create:创建网络
  • neutron net-list:列出网络
  • neutron subnet-list:列出子网
  • neutron port-create:创建端口
  • neutron router-interface-add:添加路由器接口
  • neutron agent-list:查看 Agent 状态
Neutron 网络流量分析
  • 典型场景
    • Linux Bridge + Flat/VLAN:架构简单,依赖物理设备,适合中小私有云。
    • OVS + VXLAN:支持多租户、大规模隔离,适合公有云/大型私有云。
Linux Bridge + Flat 网络概览
  • Flat 网络类似于使用网线直接连接物理网络,OpenStack不负责网络隔离
notion image
Linux Bridge + VLAN 实现
  • ML2 Type Driver:VLAN
  • Mechanism Driver:Linux Bridge
  • L2 Agent:Linux Bridge Agent
notion image
Linux Bridge + VLAN 流量分类
  • 南北向:VM ↔ 外网
  • 东西向:VM ↔ VM
  • Provider ↔ 外网:由物理设备处理
Linux Bridge + VLAN 示例网络
  • Provider Net 1:VLAN 101, 203.0.113.0/24, 网关在物理设备
  • Provider Net 2:VLAN 102, 192.0.2.0/24, 网关在 vRouter
南北向流量(Fixed IP)
  • VM → veth → Bridge → 安全组 → VLAN 子接口 → 物理网卡(打 VLAN tag)→ 物理交换机(剥 tag)→ 路由器 → 外网
notion image
东西向流量(同网络)
  • VM1 → veth → Bridge → 安全组 → VLAN 子接口 → 计算节点 1 物理网卡(打 VLAN tag) → 交换机(按 MAC 转发)→ 计算节点2 物理网卡(剥 tag)→ VLAN 子接口 → 安全组 → Bridge → veth → VM2
notion image
东西向流量(不同 Provider 网络)
  • VM1 → VLAN 101 → 路由器(剥 tag → 路由 → 打 VLAN 102)→ VM2
notion image
OVS 核心组件
  • br-int(集成网桥):连接 VM(tap/veth)
    • 打/剥内部 VLAN 标签(local VLAN)实现租户隔离
  • br-tun(隧道网桥):跨节点通信,VXLAN/GRE 封装
    • VLAN ↔ Tunnel ID 映射
      • Tunnel ID: VNI / TUN_ID
    • 示例流程:VM → br-int(VLAN 100)→ br-tun(映射 VNI 5000)→ VXLAN → 目标节点解封装 → br-int(VLAN 100)→ VM
  • 路由器命名空间:实现三层路由
    • 东西向:子网间转发
    • 南北向:SNAT 出外网
OVS + VXLAN 实现
  • ML2 Type Driver:VXLAN
  • Mechanism Driver:Open vSwitch
  • L2 Agent:OVS Agent
notion image
OVS + VXLAN 流量分类
  • 南北向:VM ↔ 外网
  • 东西向:VM ↔ VM
    • 包括同一或不同 Self-service 网络内
  • Provider ↔ 外网:由物理设备处理
OVS + VXLAN 示例拓扑
  • Provider Net:VLAN 101
  • Self-service Net 1:VXLAN VNI 101
  • Self-service Net 2:VXLAN VNI 102
  • Self-service Router:外接 VLAN 101,内接两个 VXLAN 网络
南北向流量(Self-service + Fixed IP)
  • 计算节点:
      1. 虚拟机流量经安全组网桥进行安全规则检查。
      1. 进入 OVS 集成网桥(br-int),打上内部 VLAN 标签。
      1. 映射为 VXLAN 隧道 ID(VNI=101)。
      1. 经 OVS 隧道网桥(br-tun)进行 VXLAN 封装。
      1. 通过物理网卡发往网络节点。
  • 网络节点:
      1. 解封装 VXLAN,还原内部 VLAN 标签。
      1. 流量进入路由器命名空间,进行三层路由。
      1. 从 Self-service 网络侧路由到 Provider 网络侧。
      1. 流量进入 OVS Provider 网桥(br-provider),内部 VLAN 转为物理 VLAN 101。
      1. 经物理网卡发送至外网。
notion image
外网访问 Floating IP
  • 网络节点:
      1. 外网流量经物理网卡进入,带物理 VLAN 101 标签。
      1. OVS Provider 网桥将物理 VLAN 转为内部 VLAN 标签。
      1. 流量进入路由器命名空间,进行 DNAT(将 Floating IP 转为 Fixed IP)。
      1. 从 Provider 网络侧路由到 Self-service 网络侧。
      1. 流量被打上对应网络的内部 VLAN 标签,并映射为 VXLAN VNI。
      1. 经隧道网桥封装为 VXLAN,发往计算节点。
  • 计算节点:
      1. 解封装 VXLAN,还原内部 VLAN 标签。
      1. 流量经集成网桥转发至安全组网桥进行安全规则检查。
      1. 最终送达目标虚拟机。
notion image
东西向流量(同 Self-service 网络)
  • 源计算节点:
      1. 虚拟机流量经安全组检查。
      1. 进入集成网桥,打上内部 VLAN 标签。
      1. 映射为 VXLAN VNI(如 101)。
      1. 经隧道网桥封装后,直接通过 overlay 网络发往目标计算节点。
  • 目标计算节点:
      1. 解封装 VXLAN,还原内部 VLAN 标签。
      1. 流量经集成网桥转发至安全组进行检查。
      1. 送达目标虚拟机。
notion image
东西向流量(不同 Self-service 网络)
  • 源计算节点:
      1. 流量经安全组检查后进入集成网桥,打上源网络的内部 VLAN 标签。
      1. 映射为 VNI(如 101),经 VXLAN 封装发往网络节点。
  • 网络节点:
      1. 解封装 VXLAN,还原 VLAN 标签。
      1. 流量进入路由器命名空间,在不同 Self-service 网络接口间路由。
      1. 从目标网络接口流出,被打上目标网络的内部 VLAN 标签。
      1. 映射为新 VNI(如 102),重新封装为 VXLAN。
      1. 通过 overlay 网络发往目标计算节点。
  • 目标计算节点:
      1. 解封装 VXLAN,还原内部 VLAN 标签。
      1. 经安全组检查后送达目标虚拟机。
notion image
 

Openstack Heat 编排管理

Heat 简介
编排服务Heat
  • 为云应用程序编排OpenStack基础架构资源
  • 提供OpenStack原生REST API和CloudFormation兼容API
  • 首次出现在OpenStack的"Havana"版本中
  • 依赖Keystone认证服务
Heat在OpenStack中的定位
  • Heat是OpenStack的编排服务,用于自动化部署和管理云基础设施资源
  • 提供两种API接口:
    • OpenStack原生REST API
    • AWS CloudFormation兼容查询API
Heat作用
  • 通过声明式模板格式(YAML)编排复合云应用
  • 模板可读写,支持版本控制(如Git)
  • 明确定义资源间依赖关系,自动按顺序创建和配置资源
Heat与其他服务的交互
  • Heat位于Nova、Neutron等服务之上,充当OpenStack对外接口
  • 用户只需定义Heat模板,Heat自动调用相关服务API配置资源
Heat 架构
架构概览
  • 用户提交模板和参数请求 → Heat-api/Heat-api-cfn验证 → Heat-engine处理
  • Heat模板描述资源集合(虚拟机、网络、存储等),可多次创建相同资源
notion image
核心组件
  • Heat-api:提供OpenStack原生REST API
    • 通过 RPC 将请求转发给 Heat-engine 进行处理
  • Heat-api-cfn:提供AWS CloudFormation 兼容 Query API
  • Heat-engine:核心组件,负责模板解析、资源调度、调用其他 OpenStack 服务API
Heat Engine工作流程
  • 第一层:接收请求,创建Stack(资源集合)
  • 第二层:解析资源依赖关系,生成DAG(有向无环图)
  • 第三层:按依赖顺序调用OpenStack服务API,执行资源操作
notion image
Heat 模板
  • 默认使用YAML格式
    • notion image
  • 必需字段:heat_template_versionresources
    • heat_template_version 可选项
      • 2013-05-23
      • 2014-10-16
      • 2015-04-30
      • 2015-10-15
      • 2016-04-08
      • 2016-10-14(对应 OpenStack Newton
      • 2017-02-24(对应 OpenStack Ocata
      • 2017-09-01(对应 OpenStack Pike
      • 2018-03-02(对应 OpenStack Queens
      • 2018-08-31(对应 OpenStack Rocky
  • 可选字段:descriptionparametersoutputsconditions
Heat 模板示例-“Hello World”
  • 每个HOT模板必须包含带有有效HOT版本的heat_template_version键
    • 上图由于QA要求未呈现
notion image
Heat 模板 Resource 字段定义
  • openstack orchestration resource type list
    • 查找需要创建的资源
  • openstack orchestration resource type show <typename>
    • 列出资源详情
Stack:资源的集合,Heat 管理资源的基本单位
  • 从模板创建 Stack
    • openstack stack create --template server_console.yaml --parameter "image=ubuntu" STACK_NAME
  • Heat Stack常用命令
    • stack list
    • stack create
    • stack show
    • stack delete
    • stack output list
    • stack resource list
    • stack event show
Heat 典型编排场景
Heat 从多方位支持对资源进行设计和编排
  • 基础架构资源编排:对计算、存储和网络等基础资源进行编排,支持用户自定义脚本配置虚拟机
  • 应用资源编排:实现对虚拟机的复杂配置,例如安装软件、配置软件
  • 高级功能编排:例如应用的负载均衡和自动伸缩
  • 第三方工具集成编排:例如复用用户环境中现有的 Ansible Playbook 配置,节省配置时间
notion image
基础架构资源编排
  • 使用资源类型如OS::Nova::ServerOS::Neutron::Port
  • 示例:openstack stack create -template server.yaml --parameter image=ubuntu
应用资源编排:软件配置和部署
  • 提供了多种资源类型来支持软件配置和部署的编排,例如:
    • OS::Heat::CloudConfig:VM 引导程序启动时的配置,由 OS::Nova::Server 引用。
    • OS::Heat::SoftwareConfig:描述软件配置。
    • OS::Heat::SoftwareDeployment:执行软件部署。
    • OS::Heat::SoftwareDeploymentGroup:对一组 VM 执行软件部署。
    • OS::Heat::SoftwareComponent:针对软件的不同生命周期部分,对应描述软件配置
    • OS::Heat::StructuredConfig:与 OS::Heat::SoftwareConfig 类似,但使用 Map 来表述配置
    • OS::Heat::StructuredDeployment:执行 OS::Heat::StructuredConfig 对应的配置
    • OS::Heat::StructuredDeploymentGroup:对一组 VM 执行 OS::Heat::StructuredConfig 对应的配置
notion image
高级功能编排:自动伸缩
  • 使用Heat自动伸缩组和策略,结合Ceilometer实现负载自动伸缩
notion image
高级功能编排:负载均衡
  • 使用资源类型:
    • OS::Neutron::Pool:定义资源池
    • OS::Neutron::PoolMember:定义资源池成员
    • OS::Neutron::HealthMonitor:定义健康检查
    • OS::Neutron::LoadBalancer:定义负载均衡配置
notion image
配置管理工具集成
  • 支持与Chef、Puppet和Ansible等配置管理工具集成
  • 通过OS::Heat::SoftwareConfigOS::Heat::SoftwareDeployment协同工作
notion image
 

Openstack Ceilometer 计量管理

Ceilometer 简介
计量服务Ceilometer
  • OpenStack数据收集服务,提供跨核心组件规范化和转换数据能力
  • 支持客户计费、资源跟踪和警报功能
  • 首次出现在OpenStack "Havana"版本
Ceilometer在OpenStack中的定位
  • OpenStack监控服务之一,负责计量与监控
  • 提供基础设施收集OpenStack项目所需信息
Ceilometer发展与衍生
  • Telemetry项目提供计量与监控功能,Ceilometer是其源头
  • Telemetry子项目:
    • Aodh:警报服务,违反规则时发送警报
    • Panko:事件信息存储
    • Ceilometer:统一框架获取和保存资源使用数据
    • Gnocchi:解决数据存储性能问题,存储时间序列数据
Ceilometer 核心架构
  • 高度可扩展设计,支持水平扩展
  • 核心服务:
    • Polling Agent:轮询OpenStack服务生成Meters
    • Notification Agent:监听消息队列通知,转换为事件和样本
Ceilometer 工作流程
数据获取方式:轮询,通知消息
  • 轮询:Polling Agent定期主动获取数据
    • notion image
  • 通知消息:第三方发送到消息总线,Notification Agent处理
    • notion image
  • 数据处理:
    • 转换为标准格式Sample
    • Notification Agent根据Pipeline处理
  • 数据发布目的地:
    • Gnocchi(存储)
    • 消息队列
    • Prometheus
    • Zaqar
    • 文件
Ceilometer 数据处理 Pipeline 机制
  • Pipeline 机制解决采样频率与发布方式的灵活性问题:
    • 源(source):定义采集数据、频率、Endpoint,以及对应的目标 sink
    • 目标(sink):定义转换器和发布器(Publisher)
  • 支持 Publisher:
    • Gnocchi
    • UDP
    • HTTP
    • File
    • Prometheus
  • 支持多 Publisher 发布
    • notion image
Ceilometer 数据存储/访问
  • 推荐使用 Gnocchi 存储采样数据
  • Gnocchi是开源时间序列库,高效处理大规模数据存储与索引
  • 适用于大规模、动态变化、多租户云平台
Ceilometer 告警处理 Aodh 服务
  • Aodh 服务构成:
    • API:提供RESTful接口
    • Alarm Evaluator:检查非事件类型告警
    • Alarm Listener:监听事件消息检查告警
    • Alarm Notifier:执行用户定义动作
notion image
 
上一篇
k8s 部署 buildkit 容器镜像构建服务
下一篇
k3s 部署 longhorn 提供轻量级分布式块存储

Comments
Loading...