Skip to content

OpenStack 云平台

OpenStack 是一个开源的云计算基础设施即服务(IaaS)平台,通过模块化的组件提供计算、网络、存储等核心云服务。作为 Linux 基金会旗下的明星项目,OpenStack 已成为企业构建私有云和混合云的首选方案。

概述

什么是 OpenStack

OpenStack 是一套用于构建公有云和私有云的开源软件平台。它由多个相互协作的服务组成,每个服务提供特定的 API 接口,通过 RESTful API 进行交互。用户可以通过 Web 界面(Horizon)、命令行工具(OpenStack CLI)或 SDK 来管理云资源。

OpenStack 的核心目标是:

  • 提供可扩展的虚拟计算资源(虚拟机)
  • 提供虚拟网络和存储资源
  • 提供统一的身份认证和权限管理
  • 支持多租户隔离
  • 提供自助服务的门户界面

版本演进

OpenStack 采用字母顺序命名版本,从 A 开始到 Z。以下是主要版本及其发布时间:

版本代号名称发布时间重要特性
Bexar比克斯塔尔2011.02首个正式版本
Cactus仙人掌2011.04镜像服务正式版
Diablo恶魔城2011.10块存储正式版
Essex埃塞克斯2012.04Horizon 界面稳定版
Folsom福尔瑟姆2012.09Quantum 网络服务
Grizzly大灰熊2013.04分布式路由
Havana哈瓦那2013.10Heat 编排服务
Icehouse冰屋2014.04嵌套虚拟机
Juno朱诺2014.10DVR 分布式路由
Kilo千克2015.04Magnum 容器服务
Liberty自由2015.10分层网络命名空间
Mitaka御夫座2016.04Nova Cell v2
Newton牛顿2016.10Ironic 裸金属服务
Ocata奥卡塔2017.02Placement API
Pike派克2017.08统一资源管理
Queens女王2018.02Ironic 支持 IPMI
Rocky落基山2018.08Cyborg 硬件加速
Stein施泰因2019.04Nova 优化
Train火车2019.10Cyborg 正式版
Ussuri乌苏里2020.05Nova 支持 IPU
Victoria维多利亚2020.10Neutron 优化
Wallaby袋鼠2021.04Placement 正式版
Xena泽纳2021.10Nova 支持 EFK
Yoga瑜伽2022.04Zun 容器运行时
Zed泽德2022.10Cyborg 增强
Antelope羚羊2023.04Nova 性能优化
Bobcat山猫2023.10现代化部署

部署方式对比

OpenStack 有多种部署方式,适用于不同规模的场景:

部署方式描述适用场景优点缺点
DevStack单节点开发环境开发测试快速部署、简单不适合生产
PackStackRed Hat 自动部署小规模生产自动化程度高定制化有限
Kolla-Ansible容器化部署中大型生产高可用、易维护学习曲线陡
TripleOOpenStack on OpenStack大规模生产自动化、可扩展复杂度高
OpenStack-HelmHelm Chart 部署Kubernetes 集成云原生友好依赖 K8s
MAAS裸金属部署物理机环境自动化装机硬件要求高

整体架构

OpenStack 采用分布式架构,由多个独立的服务组件构成。这些服务通过消息队列(RabbitMQ)和数据库(MySQL)进行通信和数据存储。

节点角色划分

控制节点(Controller Node)

控制节点是 OpenStack 的核心,运行所有管理面服务:

  • Keystone:身份认证服务,管理用户、项目、角色和 Token
  • Glance:镜像服务,存储和管理虚拟机镜像
  • Nova-API:计算服务的 API 前端
  • Neutron-server:网络服务的 API 和插件管理
  • Cinder-API:块存储服务的 API
  • Placement-API:资源调度服务
  • Horizon:Web 管理界面
  • MySQL:主数据库,存储所有服务的元数据
  • RabbitMQ:消息队列,处理服务间异步通信
  • Memcached:缓存服务,加速 Token 验证

计算节点(Compute Node)

计算节点负责运行虚拟机实例:

  • Nova-Compute:虚拟机生命周期管理
  • Neutron-Agent:虚拟网络代理(OVS/OVN)
  • Cinder-Volume:本地块存储(可选)
  • KVM/QEMU:底层 Hypervisor

网络节点(Network Node)

网络节点处理虚拟网络流量:

  • Neutron-Agent:DHCP、NAT、路由服务
  • OVS/OVN:虚拟交换机
  • HAProxy:负载均衡(可选)
  • Keepalived:VRRP 高可用

存储节点(Storage Node)

存储节点提供块存储和对象存储:

  • Cinder-Volume:块存储后端(LVM、Ceph、iSCSI)
  • Swift-Proxy:对象存储代理
  • Swift-Account/Container/Object:对象存储数据服务

核心架构图

                         ┌─────────────────┐
                         │   Horizon/Web   │
                         │   OpenStack CLI │
                         └────────┬────────┘

                         ┌────────▼────────┐
                         │   Keystone     │
                         │ (认证服务)      │
                         └────────┬────────┘

         ┌────────────────────────┼────────────────────────┐
         │                        │                        │
┌────────▼────────┐    ┌─────────▼─────────┐    ┌────────▼────────┐
│  Nova-API       │    │  Neutron-Server   │    │  Cinder-API     │
│ (计算API)       │    │  (网络API)        │    │  (存储API)      │
└────────┬────────┘    └─────────┬─────────┘    └────────┬────────┘
         │                        │                        │
         │              ┌─────────▼─────────┐             │
         │              │  Placement-API    │             │
         │              │  (资源调度)        │             │
         │              └─────────┬─────────┘             │
         │                        │                        │
┌────────▼────────┐    ┌─────────▼─────────┐    ┌────────▼────────┐
│ Nova-Conductor  │    │  Neutron-Agent     │    │ Cinder-Volume  │
│ (计算调度)       │    │  (网络代理)        │    │  (块存储)       │
└────────┬────────┘    └─────────┬─────────┘    └────────┬────────┘
         │                        │                        │
         │              ┌─────────▼─────────┐             │
         │              │   RabbitMQ       │             │
         │              │  (消息队列)       │             │
         │              └─────────┬─────────┘             │
         │                        │                        │
┌────────▼────────┐    ┌─────────▼─────────┐    ┌────────▼────────┐
│ Nova-Compute    │    │  Nova-Compute      │    │  Nova-Compute   │
│ (计算节点1)     │    │  (计算节点2)       │    │  (计算节点N)    │
│ ┌────────────┐  │    │  ┌────────────┐    │    │  ┌────────────┐  │
│ │ KVM/QEMU   │  │    │  │ KVM/QEMU   │    │    │  │ KVM/QEMU   │  │
│ │ VM Instance│  │    │  │ VM Instance│    │    │  │ VM Instance│  │
│ └────────────┘  │    │  └────────────┘    │    │  └────────────┘  │
└─────────────────┘    └─────────────────────┘    └─────────────────┘

         │                        │                        │
         │                        │                        │
┌────────▼────────┐    ┌─────────▼─────────┐    ┌────────▼────────┐
│  Glance         │    │  Neutron           │    │  Cinder         │
│ (镜像存储)       │    │  (虚拟网络)        │    │  (块存储后端)    │
└─────────────────┘    └─────────────────────┘    └─────────────────┘

消息队列 RabbitMQ

RabbitMQ 是 OpenStack 各服务间异步通信的核心组件。所有服务通过消息队列进行解耦通信,确保系统的可扩展性和可靠性。

核心交换器类型

  • Direct Exchange:点对点消息投递
  • Topic Exchange:基于主题的消息路由
  • Fanout Exchange:广播消息

Nova 服务消息队列使用示例

bash
# 查看 Nova 相关队列
rabbitmqctl list_queues name messages

# 查看队列详细信息
rabbitmqctl list_queues name durable arguments

# 查看消费者状态
rabbitmqctl list_consumers

# 查看 vhost 信息
rabbitmqctl list_vhosts

常见队列名称

  • nova.compute:计算节点接收任务
  • nova.conductor:conductor 服务处理请求
  • nova.scheduler:调度器筛选主机
  • neutron:网络服务消息
  • cinder.volume:块存储操作

数据库 MySQL

OpenStack 使用 MySQL(或 MariaDB)作为主数据库,存储所有服务的元数据。每个服务有独立的数据库实例或表。

服务数据库对应关系

服务数据库名用途
Keystonekeystone用户、项目、角色、Token
Novanova虚拟机实例、主机信息
Novanova_apiAPI 数据库
Neutronneutron网络、端口、子网、路由器
Cindercinder卷、快照、备份
Glanceglance镜像元数据
Placementplacement资源追踪
Heatheat栈、模板、资源

数据库连接配置示例(/etc/nova/nova.conf):

ini
[database]
connection = mysql+pymysql://nova:password@controller/nova?charset=utf8

常用数据库操作

bash
# 连接 Nova 数据库
mysql -u nova -p -h controller nova

# 查看虚拟机实例表
mysql> SELECT id, uuid, display_name, status FROM instances;

# 查看主机聚合表
mysql> SELECT id, name, availability_zone FROM host_aggregates;

# 查看 Neutron 端口表
mysql> SELECT id, mac_address, device_id, network_id FROM ports;

核心组件

OpenStack 由多个核心组件构成,每个组件负责特定的功能领域。详细组件说明请参阅 核心组件详解

企业部署实践

生产环境的 OpenStack 部署需要考虑高可用、可扩展性和运维便利性。详细部署方案请参阅 企业部署实践

生产运维

生产环境的运维管理包括日常巡检、日志管理、监控告警等。详细运维指南请参阅 运维监控

故障排查与性能调优

生产环境中常见的故障场景和性能优化方案请参阅 故障排查与性能调优

相关文档