openstack核心指南

本文系统梳理 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 跨服务认证的完整逻辑:

  1. 用户向 Keystone 提交用户名密码,认证通过后获取 Token。
  2. 用户携带 Token 向 Nova API 发起创建虚拟机请求。
  3. Nova API 将 Token 转发给 Keystone 校验有效性与权限。
  4. 校验通过后,Nova 执行资源调度;过程中调用 Glance、Neutron、Cinder 时,均会携带 Token 向 Keystone 做二次鉴权。
  5. 各服务验证 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.confdebug=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)**两个阶段。

常用过滤器
  1. RetryFilter:过滤掉之前调度失败的节点,避免重复失败
  2. AvailabilityZoneFilter:按可用区筛选节点,实现容灾隔离
  3. RamFilter :过滤内存不足的节点,支持超售(ram_allocation_ratio,默认 1.5)
  4. CoreFilter :过滤 vCPU 不足的节点,支持超售(cpu_allocation_ratio,默认 16)
  5. DiskFilter :过滤磁盘不足的节点,支持超售(disk_allocation_ratio,默认 1)
  6. ComputeFilter:确保只有 nova-compute 服务正常的节点参与调度
  7. ComputeCapabilitiesFilter:根据架构(x86/ARM)等硬件特性筛选
  8. ImagePropertiesFilter:根据镜像要求的 Hypervisor 类型筛选
  9. 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.lognova-scheduler.lognova-compute.log
  • 开启调试:/etc/nova/nova.confdebug=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 卷挂载流程

  1. Nova 调用 Cinder API 发起挂载请求,传递虚拟机所在主机信息。
  2. Cinder Volume 驱动通知存储设备允许该主机访问卷,返回连接信息(iSCSI、FC 等)。
  3. 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 原生网络技术实现:

  1. 网卡虚拟化
    • TAP:模拟二层网络设备,处理以太网帧
    • TUN:模拟三层网络设备,处理 IP 包
    • VETH Pair:成对的虚拟接口,用于连接两个网络命名空间/网桥
  2. 交换机虚拟化
    • Linux Bridge:轻量二层虚拟交换机,适用于主机内部通信
    • Open vSwitch(OVS):企业级虚拟交换机,支持 VLAN、隧道、QoS、流量监控,适用于多节点分布式场景
  3. 网络隔离: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 可查看逻辑交换机、路由器、端口的详细配置
相关推荐
Brilliantwxx18 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
不怕犯错,就怕不做18 小时前
git prune 自动删除本地记录中那些远程已经不存在的分支引用
linux·服务器·git
weixin_4166679619 小时前
【无标题】
运维·服务器·网络
予昊19 小时前
从零实现“在线五子棋对战“:WebSocket 实时通信 + 段位匹配
java·开发语言·网络·websocket
上海云盾-小余21 小时前
流量攻击复盘:为什么 WAF 完好,业务依旧瘫痪
运维·服务器·网络
戴西软件1 天前
戴西iDWS.3DViz Suite数据轻量化可视化软件,从传统桌面软件向云端协同的重大突破
大数据·运维·网络·人工智能·机器学习·3d
芯盾时代1 天前
《金融业网络安全管理办法(征求意见稿)》全条款深度拆解(三)
网络·安全·网络安全
米饭不加菜1 天前
ESP-01S通过TCP直接与手机建立通信
网络·tcp/ip·智能手机
闲云野鹤在人间1 天前
OpenStack架构介绍和安装流程
linux·网络·架构·openstack
我命由我123451 天前
Linux - Linux/POSIX 路径斜杠折叠规则
linux·运维·服务器·android studio·android jetpack·android-studio·android runtime