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.04 | Horizon 界面稳定版 |
| Folsom | 福尔瑟姆 | 2012.09 | Quantum 网络服务 |
| Grizzly | 大灰熊 | 2013.04 | 分布式路由 |
| Havana | 哈瓦那 | 2013.10 | Heat 编排服务 |
| Icehouse | 冰屋 | 2014.04 | 嵌套虚拟机 |
| Juno | 朱诺 | 2014.10 | DVR 分布式路由 |
| Kilo | 千克 | 2015.04 | Magnum 容器服务 |
| Liberty | 自由 | 2015.10 | 分层网络命名空间 |
| Mitaka | 御夫座 | 2016.04 | Nova Cell v2 |
| Newton | 牛顿 | 2016.10 | Ironic 裸金属服务 |
| Ocata | 奥卡塔 | 2017.02 | Placement API |
| Pike | 派克 | 2017.08 | 统一资源管理 |
| Queens | 女王 | 2018.02 | Ironic 支持 IPMI |
| Rocky | 落基山 | 2018.08 | Cyborg 硬件加速 |
| Stein | 施泰因 | 2019.04 | Nova 优化 |
| Train | 火车 | 2019.10 | Cyborg 正式版 |
| Ussuri | 乌苏里 | 2020.05 | Nova 支持 IPU |
| Victoria | 维多利亚 | 2020.10 | Neutron 优化 |
| Wallaby | 袋鼠 | 2021.04 | Placement 正式版 |
| Xena | 泽纳 | 2021.10 | Nova 支持 EFK |
| Yoga | 瑜伽 | 2022.04 | Zun 容器运行时 |
| Zed | 泽德 | 2022.10 | Cyborg 增强 |
| Antelope | 羚羊 | 2023.04 | Nova 性能优化 |
| Bobcat | 山猫 | 2023.10 | 现代化部署 |
部署方式对比
OpenStack 有多种部署方式,适用于不同规模的场景:
| 部署方式 | 描述 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|---|
| DevStack | 单节点开发环境 | 开发测试 | 快速部署、简单 | 不适合生产 |
| PackStack | Red Hat 自动部署 | 小规模生产 | 自动化程度高 | 定制化有限 |
| Kolla-Ansible | 容器化部署 | 中大型生产 | 高可用、易维护 | 学习曲线陡 |
| TripleO | OpenStack on OpenStack | 大规模生产 | 自动化、可扩展 | 复杂度高 |
| OpenStack-Helm | Helm 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 服务消息队列使用示例:
# 查看 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)作为主数据库,存储所有服务的元数据。每个服务有独立的数据库实例或表。
服务数据库对应关系:
| 服务 | 数据库名 | 用途 |
|---|---|---|
| Keystone | keystone | 用户、项目、角色、Token |
| Nova | nova | 虚拟机实例、主机信息 |
| Nova | nova_api | API 数据库 |
| Neutron | neutron | 网络、端口、子网、路由器 |
| Cinder | cinder | 卷、快照、备份 |
| Glance | glance | 镜像元数据 |
| Placement | placement | 资源追踪 |
| Heat | heat | 栈、模板、资源 |
数据库连接配置示例(/etc/nova/nova.conf):
[database]
connection = mysql+pymysql://nova:password@controller/nova?charset=utf8常用数据库操作:
# 连接 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 部署需要考虑高可用、可扩展性和运维便利性。详细部署方案请参阅 企业部署实践。
生产运维
生产环境的运维管理包括日常巡检、日志管理、监控告警等。详细运维指南请参阅 运维监控。
故障排查与性能调优
生产环境中常见的故障场景和性能优化方案请参阅 故障排查与性能调优。
