本文系统梳理 OpenStack 七大核心服务的基础概念、架构原理、运维命令与落地实操,覆盖身份认证、镜像管理、计算调度、块存储、对象存储、资源编排、网络虚拟化全栈能力,兼顾原理深度与可执行性,适用于 OpenStack 运维学习、环境部署与排障参考。
第1章 身份认证服务 Keystone
Keystone 是 OpenStack 的统一入口,负责全平台的身份认证(Authentication)与权限鉴权(Authorization),管理用户、服务、端点与权限体系,是所有服务的认证中枢。
1.1 核心概念
| 概念 | 定义与说明 | 唯一性规则 |
|---|---|---|
| Domain 域 | 用户、用户组、项目、角色的顶层容器,对应机构、数据中心等组织单元 | 全局唯一 |
| User 用户 | 访问 OpenStack 的实体(个人、系统、服务账号),通过凭证验证身份 | 域内唯一 |
| Group 用户组 | 用户的集合容器,可直接为组分配角色,组内用户自动继承权限,用于批量授权 | 域内唯一 |
| Project 项目 | 资源的隔离与分组单元(也叫租户 Tenant),计算、存储、网络资源都归属于项目 | 域内唯一 |
| Role 角色 | 权限的集合,定义用户可执行的操作范围;分为域级角色(域内所有项目生效)和项目级角色(仅单个项目生效) | 全局唯一 |
| Service 服务 | OpenStack 各功能组件(如 Nova、Glance、Neutron),每个服务对外暴露 API 端点 | - |
| Endpoint 端点 | 服务的网络访问地址,分为 admin、internal、public 三类,分别对应管理、内部调用、公网访问场景 | - |
| Token 令牌 | 认证通过后签发的访问凭证,替代密码用于后续服务调用,默认有效期 24 小时 | - |
| Credential 凭证 | 验证用户身份的数据,包括用户名密码、Token、API Key 等形式 | - |
补充说明:资源所有权属于 Project 而非 User;用户必须绑定项目才能访问该项目下的资源,一个用户可同时属于多个项目。
1.2 全链路认证流程
以创建虚拟机为例,OpenStack 跨服务认证的完整逻辑:
- 用户向 Keystone 提交用户名密码,认证通过后获取 Token。
- 用户携带 Token 向 Nova API 发起创建虚拟机请求。
- Nova API 将 Token 转发给 Keystone 校验有效性与权限。
- 校验通过后,Nova 执行资源调度;过程中调用 Glance、Neutron、Cinder 时,均会携带 Token 向 Keystone 做二次鉴权。
- 各服务验证 Token 合法后,执行对应资源操作,最终返回结果。
1.3 常用运维命令
域管理
bash
# 加载管理员环境变量
source keystonerc_admin
# 查看域列表
openstack domain list
# 创建域
openstack domain create domain-test
# 禁用并删除域
openstack domain set --disable domain-test
openstack domain delete domain-test
用户与用户组管理
bash
# 查看用户列表
openstack user list
# 创建用户
openstack user create --password HUAWEI user1
# 创建用户组
openstack group create group1
# 将用户加入用户组
openstack group add user group1 user1
# 验证用户组成员关系
openstack group contains user group1 user1
角色与权限分配
bash
# 查看系统角色列表
openstack role list
# 为用户组授予项目内的 admin 角色
openstack role add --project admin --group group1 admin
# 查看角色分配
openstack role assignment list --names --group group1
项目与配额管理
bash
# 创建项目
openstack project create ProjectA
# 为用户绑定项目
openstack user set --project ProjectA user1
# 为项目内用户授予角色
openstack role add --user user1 --project ProjectA admin
# 设置项目配额(实例数、vCPU、内存)
openstack quota set --instance 3 --cores 5 --ram 5000 ProjectA
1.4 Dashboard 多域支持配置
bash
# 编辑 Horizon 配置
vim /etc/openstack-dashboard/local_settings
# 开启多域支持
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
# 重启服务生效
systemctl restart httpd
1.5 排障说明
- Keystone 主日志路径:
/var/log/keystone/keystone.log - 开启调试:修改
/etc/keystone/keystone.conf中debug=True,重启服务后可获取最详细的请求日志。
第2章 镜像服务 Glance
Glance 负责虚拟机镜像的全生命周期管理,提供镜像的上传、查询、下载与元数据管理,支持多种存储后端。
2.1 镜像基础分类
| 镜像类型 | 说明 |
|---|---|
| 公共镜像 | 平台官方提供的标准系统镜像,所有用户可见,稳定性高 |
| 私有镜像 | 用户基于虚拟机或外部文件创建的镜像,仅创建者可见 |
| 共享镜像 | 其他用户共享的私有镜像,可作为自有镜像使用 |
| 市场镜像 | 第三方提供的预装软件镜像,可一键部署业务环境 |
2.2 架构与存储后端
- 架构演进:Newton 版本后废弃独立的 Registry 组件,由 Glance API 直接对接数据库与存储后端;通过 Store 模块兼容文件系统、Swift、Ceph、S3 等多种存储。
- 默认配置 :默认使用本地文件系统存储,镜像数据存放在
/var/lib/glance/images/,元数据存于 MariaDB 数据库。 - 配置文件 :
/etc/glance/glance-api.conf,核心配置包含数据库连接、认证地址、存储后端类型。
2.3 镜像状态机
Glance 定义了完整的镜像生命周期状态:
queued:已在数据库创建元数据,镜像文件尚未上传saving:镜像文件正在上传中active:上传完成,镜像可用deactivated:非管理员用户禁止访问、下载killed:上传出错,镜像不可用deleted / pending_delete:已标记删除,等待后台自动清理
2.4 镜像管理实操
本地文件后端上传镜像
bash
# 查看镜像文件格式
qemu-img info cirros-0.5.2-x86_64-disk.img
# 命令行上传镜像(支持进度条,推荐大文件使用)
glance image-create --name cirros-0.5.2 \
--file cirros-0.5.2-x86_64-disk.img \
--disk-format qcow2 --container-format bare --progress
切换 Swift 为存储后端
bash
# 修改 glance-api.conf
default_store = swift
swift_store_region = RegionOne
swift_store_container = gqdglance
swift_store_auth_address = http://192.168.108.10:5000/v3
swift_store_user = swift
swift_store_key = f8715a7c2bf640b9
# 重启服务
systemctl restart openstack-glance*
2.5 官方镜像获取
主流 Linux 发行版均提供适配 OpenStack 的官方云镜像,预安装 cloud-init 支持密钥注入与初始化配置,常用镜像默认登录账号:
- Ubuntu:
ubuntu - CentOS / RHEL:
cloud-user - Debian:
debian - Alpine:
alpine - CirrOS:
cirros(默认密码gocubsgo,仅用于测试)
第3章 计算服务 Nova
Nova 是 OpenStack 的计算核心,负责虚拟机生命周期管理、资源调度与计算资源编排,采用分布式无共享架构。
3.1 核心架构与组件
Nova 由多个松耦合组件协同工作,通过消息队列通信:
| 组件 | 核心功能 |
|---|---|
| nova-api | 接收 REST API 请求,做参数校验与权限验证,初始化数据库记录,通过消息队列转发任务 |
| nova-scheduler | 调度器,通过过滤+权重算法,为虚拟机选择最优的计算节点 |
| nova-conductor | 数据库代理,解耦计算节点与数据库,提升安全性与并发能力 |
| nova-compute | 计算节点代理,调用虚拟化驱动(KVM 等)真正创建、管理虚拟机 |
| nova-placement | 资源库存跟踪,管理计算节点的资源使用情况 |
3.2 调度机制
Nova 调度器默认采用 FilterScheduler,分为**过滤(Filter)和权重(Weight)**两个阶段。
常用过滤器
- RetryFilter:过滤掉之前调度失败的节点,避免重复失败
- AvailabilityZoneFilter:按可用区筛选节点,实现容灾隔离
- RamFilter :过滤内存不足的节点,支持超售(
ram_allocation_ratio,默认 1.5) - CoreFilter :过滤 vCPU 不足的节点,支持超售(
cpu_allocation_ratio,默认 16) - DiskFilter :过滤磁盘不足的节点,支持超售(
disk_allocation_ratio,默认 1) - ComputeFilter:确保只有 nova-compute 服务正常的节点参与调度
- ComputeCapabilitiesFilter:根据架构(x86/ARM)等硬件特性筛选
- ImagePropertiesFilter:根据镜像要求的 Hypervisor 类型筛选
- ServerGroupAffinity/AntiAffinityFilter:根据服务器组策略,实现同节点部署或分散部署
权重计算
过滤后剩余的节点,默认按空闲内存量计算权重,空闲内存越多得分越高,虚拟机最终部署到得分最高的节点。
3.3 实例生命周期操作
| 操作 | 说明 |
|---|---|
| 软重启 | 重启虚拟机内操作系统,实例进程不中断,相当于执行 reboot |
| 硬重启 | 重启虚拟机实例,相当于关机后再开机 |
| Pause 暂停 | 将实例状态保存在宿主机内存,恢复速度快,状态为 Paused |
| Suspend 挂起 | 将实例状态保存到磁盘,释放内存资源,状态为 Shut Down |
| Shelve 搁置 | 将实例保存为镜像后删除,释放宿主机资源,需要时可恢复 |
| Lock 锁定 | 防止误删除,普通用户无法删除锁定的实例,管理员可直接操作 |
3.4 消息队列监控
Nova 组件间通过 RabbitMQ 通信,可开启管理界面监控队列状态:
bash
# 启用管理插件
rabbitmq-plugins enable rabbitmq_management
# 创建管理员用户
rabbitmqctl add_user user_admin passwd_admin
rabbitmqctl set_user_tags user_admin administrator
rabbitmqctl set_permissions -p / user_admin ".*" ".*" ".*"
访问地址:http://控制节点IP:15672,重点关注 Unacked 消息数,持续增长说明队列积压、服务异常。
3.5 排障说明
- 各组件日志路径:
/var/log/nova/,对应nova-api.log、nova-scheduler.log、nova-compute.log - 开启调试:
/etc/nova/nova.conf中debug=True,可跟踪完整调度与创建流程。
第4章 块存储服务 Cinder
Cinder 为虚拟机提供持久化块存储(云硬盘),在虚拟机与物理存储之间提供抽象层,兼容多种后端存储设备。
4.1 功能定位
Cinder 本身不实现底层存储,只提供统一的 API 接口,通过驱动对接 LVM、Ceph、SAN 存储、厂商存储设备等后端,实现卷的创建、挂载、快照、备份等能力。
4.2 核心架构
| 组件 | 功能 |
|---|---|
| cinder-api | 对外提供 REST API,处理卷、快照、备份的增删改查请求 |
| cinder-scheduler | 调度器,通过过滤+权重选择合适的存储后端创建卷 |
| cinder-volume | 存储节点服务,调用后端驱动执行实际的卷操作 |
| cinder-backup | 备份服务,支持将卷备份到 Swift、Ceph 等介质 |
4.3 卷调度机制
与 Nova 调度逻辑类似,Cinder 调度也分为过滤与权重:
- 可用区过滤(AvailabilityZoneFilter):匹配指定可用区的存储节点
- 容量过滤(CapacityFilter):筛选剩余空间满足卷大小的后端
- 能力过滤(CapabilitiesFilter):根据卷类型匹配对应特性的存储后端
- 容量权重(CapacityWeigher):默认按剩余容量排序,优先选择空闲空间多的后端
4.4 卷挂载流程
- Nova 调用 Cinder API 发起挂载请求,传递虚拟机所在主机信息。
- Cinder Volume 驱动通知存储设备允许该主机访问卷,返回连接信息(iSCSI、FC 等)。
- Nova 在宿主机识别磁盘设备,通过 Hypervisor 将磁盘映射到虚拟机内部。
4.5 LVM 后端实操
实验环境默认使用 LVM 作为后端存储:
bash
# 查看卷组信息
vgdisplay cinder-volumes
# 创建 1G 云硬盘
openstack volume create --size 1 volume1
# 指定可用区创建
openstack volume create --size 1 --availability-zone az1 volume1
第5章 对象存储服务 Swift
Swift 是分布式对象存储服务,提供高可用、高扩展、高冗余的静态数据存储能力,适合存放镜像、备份、图片等非结构化数据。
5.1 核心特性
- 无中心架构,无单点故障,扩展性强
- 多副本冗余,默认 3 副本,数据持久化高
- 最终一致性,适合静态数据长期存储,不适合实时读写场景
- 三层结构:Account(账户)> Container(容器)> Object(对象)
5.2 Ring 环机制
Ring 是 Swift 的核心元数据,记录对象与物理存储位置的映射关系,分为 Account Ring、Container Ring、Object Ring 三类。
- Ring 维护分区到物理设备的映射,通过 Zone、Device、Partition、Replica 保障数据冗余。
- 新增/删除存储节点时,通过
rebalance操作重新均衡数据分布。
5.3 部署实操
1. 存储磁盘准备
bash
# 分区并格式化为 xfs
mkfs.xfs /dev/sdb1
mkfs.xfs /dev/sdb2
# 配置挂载
mkdir -p /srv/node/obs1 /srv/node/obs2
echo "/dev/sdb1 /srv/node/obs1 xfs defaults 0 0" >> /etc/fstab
echo "/dev/sdb2 /srv/node/obs2 xfs defaults 0 0" >> /etc/fstab
mount -a
# 修改目录权限
chown swift:swift /srv/node/obs1 /srv/node/obs2
2. 创建 Ring 并添加设备
bash
cd /etc/swift
# 创建 Ring(分区数2^12,2副本,1小时内禁止迁移)
swift-ring-builder account.builder create 12 2 1
swift-ring-builder container.builder create 12 2 1
swift-ring-builder object.builder create 12 2 1
# 添加存储节点
swift-ring-builder account.builder add z1-192.168.108.10:6002/obs1 100
swift-ring-builder account.builder add z2-192.168.108.10:6002/obs2 100
# container、object 同理添加对应端口设备
# 数据再平衡
swift-ring-builder account.builder rebalance
swift-ring-builder container.builder rebalance
swift-ring-builder object.builder rebalance
5.4 数据冗余验证
上传对象后,可在两个存储目录下找到对应的数据文件,验证 2 副本冗余机制生效。
第6章 编排服务 Heat
Heat 是声明式编排服务,通过模板描述云资源架构,自动调用 OpenStack 各服务 API,按依赖顺序批量创建、管理资源。
6.1 功能定位
- 用户只需在模板中定义所需的虚拟机、网络、存储、安全组等资源及依赖关系,Heat 自动完成编排部署。
- 模板支持版本管理,可重复部署,大幅提升复杂环境的部署效率。
6.2 核心架构
- heat-api:提供原生 REST API 入口
- heat-api-cfn:兼容 AWS CloudFormation 格式的 API
- heat-engine:编排引擎,解析模板、管理资源生命周期、按依赖顺序调度任务
6.3 模板语法
Heat 模板采用 YAML 格式,核心结构:
heat_template_version:模板版本description:模板描述parameters:输入参数,支持默认值resources:资源定义,声明需要创建的 OpenStack 资源及属性outputs:输出信息,部署完成后返回关键数据
6.4 编排示例
通过 Heat 模板可一键部署包含私有网络、路由器、浮动IP、安全组、密钥对、虚拟机的完整业务环境,实现基础设施即代码(IaC)。
第7章 网络服务 Neutron
Neutron 提供软件定义网络能力,实现二层交换、三层路由、防火墙、负载均衡等网络服务,支持多租户网络隔离。
7.1 Linux 网络虚拟化基础
Neutron 基于 Linux 原生网络技术实现:
- 网卡虚拟化
- TAP:模拟二层网络设备,处理以太网帧
- TUN:模拟三层网络设备,处理 IP 包
- VETH Pair:成对的虚拟接口,用于连接两个网络命名空间/网桥
- 交换机虚拟化
- Linux Bridge:轻量二层虚拟交换机,适用于主机内部通信
- Open vSwitch(OVS):企业级虚拟交换机,支持 VLAN、隧道、QoS、流量监控,适用于多节点分布式场景
- 网络隔离:Network Namespace,提供独立的网络协议栈、路由表、iptables 规则,实现租户网络隔离。
7.2 核心概念
| 概念 | 定义 |
|---|---|
| Network 网络 | 隔离的二层广播域,支持 flat、vlan、vxlan、gre 等类型 |
| Subnet 子网 | IP 地址段,实例的 IP 从子网分配;一个网络可包含多个不重叠的子网 |
| Port 端口 | 虚拟交换机上的端口,定义 MAC 与 IP 地址,虚拟机网卡绑定到端口 |
| Router 路由器 | 实现三层转发,支持跨子网通信与 NAT 访问外网 |
| Security Group 安全组 | 基于 iptables 的防火墙,控制虚拟机端口的进出流量 |
7.3 Neutron 架构
- Neutron Server:提供 API 服务,处理网络资源请求
- Plugin 插件:维护逻辑网络状态,调用 Agent 执行操作
- Agent 代理:部署在节点上,真正配置虚拟网络设备
- ML2 插件:模块化二层插件,支持多种网络类型与机制驱动(如 OVN)
7.4 OVN 网络实操
OVN(Open Virtual Network)是 Open vSwitch 推出的 SDN 控制器,是 Neutron 主流的网络实现方案。
1. 确认 OVN 组件状态
bash
openstack network agent list
2. 创建外部网络与子网
bash
# 创建外部扁平网络
openstack network create --external --provider-network-type flat --provider-physical-network provnet public_net
# 创建外部子网
openstack subnet create --network public_net --subnet-range 192.168.108.0/24 --gateway 192.168.108.1 --allocation-pool start=192.168.108.100,end=192.168.108.200 public_subnet
3. 创建私有网络与路由器
bash
# 创建私有网络
openstack network create private_net
# 创建私有子网
openstack subnet create --network private_net --subnet-range 192.168.11.0/24 private_subnet
# 创建路由器,连接内外网
openstack router create router1
openstack router set --external-gateway public_net router1
openstack router add subnet router1 private_subnet
4. 验证连通性
创建两台接入私有网络的虚拟机,可验证同子网互通、跨子网路由、外网访问等网络能力。
7.5 排障说明
- Neutron 数据库:存放网络、子网、端口、路由器等所有网络状态信息
- OVN 状态查看:
ovn-nbctl show可查看逻辑交换机、路由器、端口的详细配置