爆肝整理!OpenStack 管理实战:从认证到计算,一文吃透三大核心模块(附全套可直接复制的命令)
2026/9/13 14:53:16 网站建设 项目流程

爆肝整理!OpenStack 管理实战:从认证到计算,一文吃透三大核心模块(附全套可直接复制的命令)

摘要:OpenStack 作为开源云操作系统,核心价值不仅在架构,更在日常运维管理。本文基于真实实验环境(controller + compute 双节点),系统梳理 OpenStack三大核心管理模块:认证(Keystone)、镜像(Glance)、计算(Nova)。每个模块都从核心概念讲起,配套可直接复制的实操命令与配置:用户/项目/角色管理、配额控制、镜像上传与状态机、虚拟机调度过滤与权重、十大 Filter 详解、nova-compute 原理、RabbitMQ 监控,并完整拆解创建虚拟机的 29 步流程。全文附排错方法与命令速查,助你从"会用"走向"会管、会排障"。


一、认证管理 Keystone —— 云世界的"门禁系统"

在 OpenStack 里,所有服务都不认识你,它们只认 Keystone 发的一张"通行证"(Token)。Keystone 负责两件事:认证(Authentication)——你是谁?鉴权(Authorization)——你能干什么?

1.1 九个核心概念一张表看懂

概念中文一句话理解类比
Domain一组 User/Group/Project 的容器,必须全局唯一小区
User用户可通过 Keystone 访问服务的个人、系统或服务住户
Group用户组一组 User 的容器,给组分配角色即可批量授权家庭
Project项目各服务中可访问资源的集合,只需域内唯一储物间
Role角色一组权限集合,角色不同权限不同,必须全局唯一门禁卡等级
Service服务一种 OpenStack 服务,暴露一个或多个端点设施(水电燃气)
Endpoint端点访问某个具体服务的网络地址(URL)门牌号
Token令牌认证通过后签发的凭证,默认有效期 24 小时临时通行证
Credential凭证证明用户身份的数据(用户名/密码、Token、API Key)身份证

💡关键点:资源的所有权属于Project,而不是 User;User(包括 admin)必须挂在 Project 里才能访问其资源;一个 User 可属于多个 Project。

1.2 实战:域、用户、组、项目、角色管理

# 1. 加载管理员环境变量[root@controller ~]# source keystonerc_admin# 2. 查看/创建/删除域(Domain)[root@controller ~(keystone_admin)]# openstack domain list[root@controller ~(keystone_admin)]# openstack domain create domain-test[root@controller ~(keystone_admin)]# openstack domain set --disable domain-test # 先禁用[root@controller ~(keystone_admin)]# openstack domain delete domain-test # 再删除# 3. 开启多域登录界面[root@controller ~(keystone_admin)]# vim /etc/openstack-dashboard/local_settings#修改配置文件83行如下,开启keystone支持多域83OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT=True[root@controller ~(keystone_admin)]# systemctl restart httpd# 4. 创建用户 user1[root@controller ~(keystone_admin)]# openstack user create --password HUAWEI user1[root@controller ~(keystone_admin)]# openstack user show user1 # 查看详情# 5. 创建组 group1,并把 user1 加入[root@controller ~(keystone_admin)]# openstack group create group1[root@controller ~(keystone_admin)]# openstack group add user group1 user1[root@controller ~(keystone_admin)]# openstack group contains user group1 user1 # 验证成员# 6. 创建项目 ProjectA,并给 user1 授权[root@controller ~(keystone_admin)]# openstack project create ProjectA[root@controller ~(keystone_admin)]# openstack user set --project ProjectA user1 # 修改用户的默认项目为ProjectA[root@controller ~(keystone_admin)]# openstack role add --user user1 --project ProjectA admin# 7. 给组直接赋角色(组内用户全部生效)[root@controller ~(keystone_admin)]# openstack role add --project admin --group group1 admin[root@controller ~(keystone_admin)]# openstack role assignment list --names --group group1 # 列出group1角色分配记录

1.3 配额管理

配额决定了某个 Project 里最多能创建多少资源,防止一个租户把云资源吃光:

# 将 ProjectA 配额设置为:实例 3 台、vCPU 5 核、内存 5000MB[root@controller ~(keystone_admin)]# openstack quota set --instance 3 --cores 5 --ram 5000 ProjectA[root@controller ~(keystone_admin)]# openstack quota show ProjectA

1.4 查看服务与端口节点

# 查看服务[root@controller ~(keystone_admin)]# openstack service list# 查询服务节点入口[root@controller ~(keystone_admin)]# openstack endpoint list[root@controller ~(keystone_admin)]# openstack catalog list # 建议使用这个查询

1.5 认证 vs 鉴权:安全的两半

概念英文解决什么问题类比
认证Authentication你是谁?验证 Credential,签发 Token出示身份证
鉴权Authorization你能干什么?借助 Role 判定权限门禁卡能刷几层

1.6 policy.json —— 权限的"红头文件"

每个服务用policy.json决定某个 Role 能做什么,路径为/etc/服务名/policy.json(packstack 安装后位于/etc/openstack-dashboard/服务名_policy.json):

# 以 Nova 的锁实例权限为例[root@controller ~(keystone_admin)]# vim /etc/openstack-dashboard/nova_policy.json"os_compute_api:os-lock-server:lock":"rule:admin_or_owner","os_compute_api:os-lock-server:unlock":"rule:admin_or_owner","os_compute_api:os-lock-server:unlock:unlock_override":"rule:admin_api",

⚠️ 默认配置只区分 admin 和非 admin。要精细授权可改 policy.json,但一般不建议动

1.7 一次完整访问流程(以查询镜像为例)

  1. 用户 admin 登录 → Keystone 验证身份 → 签发 Token(Token 内携带 Role 信息);
  2. 前端拿到 Keystone 维护的各服务 Endpoint,才能显示"实例、镜像、卷"等菜单;
  3. 点击"镜像" → 请求发往Glance 的 Endpoint
  4. Glance 拿着 Token 向 Keystone 询问"admin 是否有效";
  5. Glance 查看/etc/glance/policy.json判断 admin 有无查看权限;
  6. 权限通过 → Glance 返回镜像列表。

1.8 排错:看日志 + 开 debug

# Keystone 日志位置[root@controller ~(keystone_admin)]# cd /var/log/keystone/ && lskeystone.log# 需要最详细日志时,打开 debug[root@controller ~(keystone_admin)]# vim /etc/keystone/keystone.conf94debug=True

二、镜像管理 Glance —— 虚拟机的"出厂模板"

2.1 Glance 架构

Glance 是 OpenStack 的镜像服务(Image Service),核心职责是管理虚拟机镜像的 “登记” 与 “存放”。当前版本的架构精髓**“元数据与数据分离”**:镜像的描述信息(元数据)存数据库,镜像的二进制文件存存储后端,两者解耦,可灵活选择存储后端而不影响上层接口。

当前架构只有3 个角色

组件角色通俗理解
glance-api入口服务对外提供 REST API 的 “门卫”,接收所有镜像请求
Glance DB元数据存储存镜像 “身份证”(名称、大小、格式、状态)
Store Backend镜像文件存储真正存镜像文件的 “仓库”(file/rbd/swift…)

2.2 公有云镜像概念(以华为云为例)

镜像类型说明可见性
公共镜像云平台提供的标准 OS 镜像,正版授权、高度稳定所有用户可见
私有镜像基于云服务器或外部文件自制的个人镜像仅自己可见
共享镜像其他用户共享给你的私有镜像指定用户可见
市场镜像第三方预装应用的镜像,一键部署所有用户可见

镜像最主要的作用:节约时间,不必每次从零装系统。

2.3 镜像、实例、规格,别再傻傻分不清

概念是什么关键点
镜像 Image装了 OS 的模板文件可从一个镜像启动任意多个实例
实例 Instance正在运行的虚拟机基于镜像的副本,对实例的修改不影响镜像
规格 Flavor资源规格(vCPU/内存/磁盘)启动实例必须指定规格

2.4 磁盘格式速查

格式说明
qcow2QEMU 格式,支持动态扩展 + 写时复制(最常用)
raw非结构化磁盘镜像
vmdkVMware 常见格式
vhd/vhdxXen、微软、VirtualBox 常用
vdiVirtualBox 与 QEMU 支持
iso光盘存档格式
aki/ari/amiAmazon 内核/内存盘/机器镜像

2.5 镜像状态机

镜像状态含义
queued已注册元数据,但数据未上传
saving原始数据正在上传
active创建完成,可用
deactivated非管理员禁止访问
killed上传出错,不可用
deleted保留信息,不久后自动清理
pending_delete类似 deleted,尚未清除数据、不可恢复
任务状态含义
pending/processing挂起 / 处理中
success/failure成功 / 失败

2.6 上传镜像实战

# 1. 查看镜像文件磁盘格式[root@controller ~]# qemu-img info cirros-0.5.2-x86_64-disk.img # qcow2[root@controller ~]# qemu-img info TinyCore-12.0.iso # raw# 2. 命令行上传(大文件强烈推荐,带进度条;Web 界面可能失败)[root@controller ~(keystone_admin)]# glance image-create --name image_centos \--fileCentOS-7-x86_64-Minimal-1810.iso --disk-format raw--containerbare--progress# 3. 镜像上传到哪里去了?[root@controller ~]# find / -name e846b42b-5024-479b-9f79-1ae181bfa14e/var/lib/glance/images/e846b42b-5024-479b-9f79-1ae181bfa14e# 4. 数据库里确认镜像位置[root@controller ~]# mysqlMariaDB[(none)]>use glance;MariaDB[glance]>selectid,value from image_locations;

命令上传镜像命令解析

命令片段参数含义解析
glance image-create调用 glance CLI 创建镜像旧版客户端命令(新版是openstack image create
--name image_centos镜像名称上传后镜像显示名,可自定义
--file CentOS-7-x86_64-Minimal-1810.iso本地镜像文件指定要上传的本地文件路径,若文件不在当前目录需写绝对路径
--disk-format raw磁盘格式声明镜像磁盘格式为 raw
--container bare容器格式无容器封装,裸格式(ISO 通常配 bare,正确)
--progress显示上传进度上传时打印进度条,便于观察大文件传输

2.7 镜像制作

  • 最简单:下载系统供应商官方 OpenStack 镜像(预装 cloud-init,支持密钥对登录、用户数据注入);
  • 手动制作(以 Ubuntu 为例):用 virt-manager 装系统 →apt install cloud-init→ 关机 →virt-sysprep预清理 →virsh undefine释放定义 → 制作并上传镜像。

2.8 Glance 使用 Swift 作为后端存储

# 1. 查看 Swift 密码(安装时随机生成)[root@controller ~]# vim answers.txt1137CONFIG_SWIFT_HASH=f8715a7c2bf640b9#这个密码配置到下面的配置文件# 2. 修改 Glance 配置,默认存储改为 swift[root@controller ~]# vim /etc/glance/glance-api.conf3111default_store=swift# 默认存储后端:Swift 对象存储3982swift_store_region=RegionOne# 区域名,须与 Keystone 的 Swift endpoint 一致4090swift_store_container=gqdglance# 镜像容器名(默认容器)4118swift_store_large_object_size=5120# 大对象阈值 5120MB≈5GB,超过则分段上传4160swift_store_create_container_on_put=true# 上传时自动创建容器4182swift_store_multi_tenant=true# 多租户模式,按项目隔离容器与权限4230swift_store_admin_tenants=services# 管理租户(项目):services,有全局权限4391swift_store_auth_address=http://192.168.108.10:5000/v3# Swift 认证地址(Keystone v3)4399swift_store_user=swift# Swift 服务账号4408swift_store_key=f8715a7c2bf640b9# 填写之前查到的swift密码# 3. 重启 Glance 生效[root@controller ~(keystone_admin)]# systemctl restart openstack-glance*

配置后新上传镜像会以swift+http://.../AUTH_xxx/gqdglance_xxx/...的形式存到 Swift 中。


三、计算管理 Nova —— 虚拟机生命周期管家

3.1 Nova 管什么、不管什么

Nova 负责 ✅Nova 不负责 ❌
虚拟机生命周期管理承载虚拟机的物理主机自身的管理
其他计算资源生命周期管理全面的系统状态监控

3.2 系统架构(组件职责速查)

组件职责
DBSQL 数据库,存实例/资源数据
API接收 HTTP 请求,校验参数、配额预留
Scheduler为虚拟机挑选合适的物理主机
Compute虚拟机生命周期与复杂流程控制
Conductor数据库代理,解耦 Compute 的数据库访问
Placement跟踪资源提供者的库存和使用情况
RPC远程过程调用,组件间通过消息队列通信

3.3 核心组件逐个拆解

组件功能亮点
nova-api对外 REST 接口、参数校验、配额预留生命周期管理入口
nova-conductor数据库操作、复杂流程控制(创建/冷热迁移/重建)①安全:Compute 不再直连 DB;②方便升级;③性能:RPC 绿色线程友好
nova-scheduler过滤 + 权重选节点两步调度
nova-compute真正执行创建,对接不同虚拟化平台支持 KVM/VMware/XEN/Ironic 等

3.4 调度器:过滤 + 权重

# 查看默认过滤器配置[root@controller ~]# vim /etc/nova/nova.conf1931available_filters=nova.scheduler.filters.all_filters1938enabled_filters=AvailabilityZoneFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter

调度两步走:① 多个 Filter 层层过滤掉不合格节点 → ② 对通过的节点按权重打分,得分最高者胜出(默认按空闲内存越多权重越大)。

3.5 十大 Filter 详解

Filter作用类比
RetryFilter刷掉上次调度失败过的节点打人别打同一张脸
AvailabilityZoneFilter只保留指定可用域的节点指定楼层
RamFilter过滤内存不足的节点(可 overcommit)内存够不够
DiskFilter过滤磁盘不足的节点硬盘够不够
CoreFilter过滤 vCPU 不足的节点(需手动启用)CPU 够不够
ComputeFilter只留 nova-compute 正常的节点(必选)服务活着吗
ComputeCapabilitiesFilter按节点特性筛选(如 x86_64/ARM)挑架构
ImagePropertiesFilter按镜像属性筛选(如必须跑在 KVM)挑超管
ServerGroupAntiAffinityFilter尽量把实例分散到不同节点(反亲和)鸡蛋不放一篮
ServerGroupAffinityFilter尽量把实例聚拢到同一节点(亲和)就近扎堆

overcommit 超配:RAM 超配比默认 1.5(10GB 内存当 15GB 用),vCPU 超配比默认 16(8 vCPU 当 128 用)。生产环境可调,但要谨慎。

# 反亲和示例(调度 hint)nova server-group-create--policyanti-affinity group-1 nova boot--imageIMAGE_ID--flavor1--hintgroup=group-1 inst1 nova boot--imageIMAGE_ID--flavor1--hintgroup=group-1 inst2# 亲和示例(调度 hint)nova server-group-create--policyaffinity group-2 nova boot--imageIMAGE_ID--flavor1--hintgroup=group-2 inst1 nova boot--imageIMAGE_ID--flavor1--hintgroup=group-2 inst2
# 通过日志查看创建实例过滤过程[root@controller ~]# vim /etc/nova/nova.conf694debug=True[root@controller ~]# systemctl restart openstack-nova*[root@controller ~]# tail /var/log/nova/nova-scheduler.log -f

3.6 nova-compute

  • 虚拟机生命周期操作的真正执行者(会调用对应的hypervisor的driver)。
  • 底层对接不同虚拟化的平台(KVM/VMware/XEN/Ironic等)。
  • 内置周期性任务,完成资源刷新,虚拟机状态同步等功能。
  • 资源管理模块(resource_tracker)配合插件机制,完成资源的统计。
# 配置compute节点配置文件,定义driver[root@compute ~]# vim /etc/nova/nova.conf53compute_driver=libvirt.LibvirtDriver[root@compute ~]# cd /usr/lib/python3.6/site-packages/nova/virt/[root@compute virt]# lsarch.py driver.py hyperv __init__.py netutils.py storage_users.py block_device.py event.py image interfaces.template osinfo.py virtapi.py configdrive.py fake.py imagecache.py ironic powervm vmwareapi disk hardware.py images.py libvirt __pycache__ zvm

3.7 RabbitMQ 监控(性能排查)

# 启用 RabbitMQ 图形化管理插件[root@controller ~]# rabbitmq-plugins enable rabbitmq_management# 创建管理用户并授权[root@controller ~]# iptables -F[root@controller ~]# rabbitmqctl add_user user_admin passwd_admin #创建用户名密码[root@controller ~]# rabbitmqctl set_user_tags user_admin administrator rabbitmqctl set_permissions -p / user_admin ".*" ".*" ".*" #授权# 浏览器访问管理台:http://192.168.108.10:15672

⚠️ 重点看Unacked(未处理消息):正常应为 0;持续增长说明队列积压、消息堆积,是严重信号。

3.8 创建虚拟机的完整 29 步

  • Step1:用户通过 Dashboard/CLI 申请创建虚拟机,并以 REST API 方式来请求 Keystone 授权。
  • Step2:keystone 通过用户请求认证信息,并生成 auth-token 返回给对应的认证请求。
  • Step3:界面或命令行通过 RESTful API 向 nova-api 发送一个 boot instance 的请求(携带 auth-token)。
  • Step4:nova-api 接受请求后向 keystone 发送认证请求,查看 token 是否为有效用户和 token。
  • Step5:keystone 验证 token 是否有效,如有效则返回有效的认证和对应的角色(注:有些操作需要有角色权限才能操作)。
  • Step6:通过认证后 nova-api 和数据库通讯。
  • Step7:初始化新建虚拟机的数据库记录。
  • Step8:nova-api 通过 rpc.call 向 nova-scheduler 请求是否有创建虚拟机的资源(Host ID)。
  • Step9:nova-scheduler 进程侦听消息队列,获取 nova-api 的请求。
  • Step10:nova-scheduler 通过查询 nova 数据库中计算资源的情况,并通过调度算法计算符合虚拟机创建需要的主机。
  • Step11:对于有符合虚拟机创建的主机,nova-scheduler 更新数据库中虚拟机对应的物理主机信息。
  • Step12:nova-scheduler 通过 rpc.cast 向 nova-compute 发送对应的创建虚拟机请求的消息。
  • Step13:nova-compute 会从对应的消息队列中获取创建虚拟机请求的消息。
  • Step14:nova-compute 通过 rpc.call 向 nova-conductor 请求获取虚拟机消息。
  • Step15:nova-conductor 从消息队队列中拿到 nova-compute 请求消息。
  • Step16:nova-conductor 根据消息查询虚拟机对应的信息。
  • Step17:nova-conductor 从数据库中获得虚拟机对应信息。
  • Step18:nova-conductor 把虚拟机信息通过消息的方式发送到消息队列中。
  • Step19:nova-compute 从对应的消息队列中获取虚拟机信息消息。
  • Step20:nova-compute 通过 keystone 的 RESTful API 拿到认证的 token,并通过 HTTP 请求 glance-api 获取创建虚拟机所需要镜像。
  • Step21:glance-api 向 keystone 认证 token 是否有效,并返回验证结果。
  • Step22:token 验证通过,nova-compute 获得虚拟机镜像信息(URL)。
  • Step23:nova-compute 通过 keystone 的 RESTful API 拿到认证的 token,并通过 HTTP 请求 neutronserver 获取创建虚拟机所需要的网络信息。
  • Step24:neutron-server 向 keystone 认证 token 是否有效,并返回验证结果。
  • Step25:token 验证通过,nova-compute 获得虚拟机网络信息。
  • Step26:nova-compute 通过 keystone 的 RESTful API 拿到认证的 token,并通过 HTTP 请求 cinder-api 获取创建虚拟机所需要的持久化存储信息。
  • Step27:cinder-api 向 keystone 认证 token 是否有效,并返回验证结果。
  • Step28:token 验证通过,nova-compute 获得虚拟机持久化存储信息。
  • Step29:nova-compute 根据 instance 的信息调用配置的虚拟化驱动来创建虚拟机。

简单归类总结

阶段步骤关键机制通俗理解
① 认证与请求1~5Keystone 发 Token + nova-api 回验先办 “通行证” 再进门
② 数据库初始化6~7nova-api 直连 DB给虚拟机先 “登记入册”
③ 调度选主8~11rpc.call(同步等结果)找个 “最合适的物理机” 来承载
④ 分发到节点12~13rpc.cast(异步投递)把任务 “派单” 给目标计算节点
⑤ Conductor 代理查库14~19compute→conductor→DB计算节点不直接碰库,让中介代查
⑥ 获取三件资源20~28逐个经 Keystone 鉴权后取镜像 / 网络 / 存储三件套备齐
⑦ 调用驱动创建29虚拟化驱动(libvirt/KVM)真正把虚拟机 “生” 出来

🎯 结语

本文基于真实双节点实验环境,把 OpenStack认证(Keystone)、镜像(Glance)、计算(Nova)三大核心模块的原理与命令串成了完整闭环:从"门禁"(认证鉴权),到"模板"(镜像管理),再到"管家"(虚拟机生命周期)。尤其是调度器十大 Filter创建虚拟机 29 步两节,几乎覆盖了运维排查的高频考点。

如果本文对你有帮助,欢迎点赞、收藏、关注,后续将继续更新块存储(Cinder)、对象存储(Swift)、编排(Heat)、网络(Neutron)等模块的实战攻略。有疑问欢迎评论区交流~

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询