一、Keystone 身份认证服务
Keystone是OpenStack的认证鉴权中心,负责用户权限管理、服务端点维护、认证(Authentication)与鉴权(Authorization)。
1. 核心概念
| 概念 | 说明 |
|---|---|
| Domain(域) | 虚拟容器,容纳User/Group/Project/Role,全局唯一,可对应机构/数据中心 |
| User(用户) | 使用OpenStack的实体(人、系统、服务账号),域内唯一 |
| Group(用户组) | 用户集合,给组分配角色,组内用户继承权限,批量管理权限 |
| Project(项目/租户) | 资源集合,虚拟机、卷都归属项目;域内唯一,Tenant/Project/Account同义 |
| Role(角色) | 权限集合,区分admin/member/reader;可赋予域级别或项目级别权限,全局唯一 |
| Service | OpenStack内部服务,如nova、glance |
| Endpoint(端点) | 服务访问网络地址,分admin/public/internal三种访问入口 |
| Token(令牌) | 身份凭证,认证成功后下发,默认有效期24h |
| Credential(凭证) | 身份证明,用户名密码、token、API密钥等 |
认证:解决「你是谁」;鉴权:解决「你能干什么」,鉴权依靠各组件
policy.json策略文件实现。
2. 常用CLI命令
bash
# 加载admin环境变量
source keystonerc_admin
# 域管理
openstack domain list
openstack domain create domain‑test
openstack domain set --disable domain‑test
openstack domain delete domain‑test
# 用户管理
openstack user list
openstack user create --password HUAWEI user1
openstack user show user1
# 用户组管理
openstack group create group1
openstack group add user group1 user1
openstack group contains user group1 user1
# 角色赋予(给组分配项目角色)
openstack role add --project admin --group group1 admin
# 项目管理
openstack project create ProjectA
openstack role add --user user1 --project ProjectA admin
# 查看服务、端点
openstack service list
openstack catalog list
openstack endpoint list
3. Horizon开启多域登录
修改/etc/openstack‑dashboard/local_settings
ini
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
重启httpd服务:systemctl restart httpd
4. 完整认证调用流程
- 用户提交用户名密码到Keystone,获取Token令牌
- 用户携带Token调用Nova创建虚拟机
- Nova拿着Token向Keystone校验有效性
- Nova调用Glance拿镜像、调用Neutron拿网络,每次调用都携带Token,各组件再向Keystone校验token
- 每个服务本地读取自身
policy.json做权限判定,决定是否允许执行操作
排错日志路径:
/var/log/keystone/keystone.log,修改keystone.conf中debug=True开启调试日志。
二、Glance 镜像服务
Glance负责镜像注册、上传、查询、元数据维护,为Nova提供虚拟机镜像源,镜像数据可存本地文件、Swift、Ceph等后端。
1. 镜像分类
- 公共镜像:平台提供,全部用户可见
- 私有镜像:个人上传,仅自己使用
- 共享镜像:其他用户分享给我使用
- 市场镜像:第三方预装应用镜像
提示:建议镜像内置
cloud‑init,支持密钥注入、用户自定义数据。
2. 常见磁盘格式
| 格式 | 描述 |
|---|---|
| qcow2 | QEMU动态镜像,写时复制,OpenStack最常用 |
| raw | 原始裸格式 |
| vmdk | VMware镜像格式 |
| vhd/vhdx | 微软/Xen虚拟化格式 |
| iso | 光盘镜像 |
3. 镜像状态机
queued:仅数据库元数据,镜像文件未上传saving/uploading:正在上传镜像数据active:上传完成,可正常使用deactivated:禁止普通用户访问镜像killed:上传出错,镜像损坏不可用deleted/pending_delete:标记删除,等待清理
4. 实操命令
bash
# 查看镜像格式
qemu‑img info cirros‑0.5.2‑x86_64‑disk.img
# 命令行上传镜像(带进度条,适合大文件,web上传容易超时)
glance image‑create --name image_centos --file CentOS‑7‑x86_64‑Minimal.iso --disk‑format raw --container‑format bare --progress
5. 存储后端切换示例(切换到Swift)
修改/etc/glance/glance‑api.conf
ini
[glance_store]
stores=file,http,swift
default_store=swift
swift_store_auth_address = http://192.168.108.10:5000/v3
swift_store_user = swift
swift_store_key = 你的swift密码
重启glance服务:systemctl restart openstack‑glance*
默认本地存储路径:
/var/lib/glance/images/;镜像元数据保存在glance数据库。
三、Nova 计算服务
Nova负责虚拟机实例完整生命周期管理(创建、启动、暂停、迁移、删除),对接底层KVM/QEMU/VMware等虚拟化,不管理物理主机硬件本身。
1. Nova各组件作用
| 组件 | 功能 |
|---|---|
| nova‑api | 对外REST API入口,参数校验、配额检查,接收用户请求 |
| nova‑conductor | 数据库代理;解耦nova‑compute与数据库,负责复杂业务逻辑,提升安全与并发 |
| nova‑scheduler | 调度器,为虚拟机挑选合适计算节点,分为过滤Filter + 权重Weight两步 |
| nova‑compute | 运行在计算节点;真正调用Hypervisor驱动,完成虚拟机创建操作 |
| placement | 跟踪CPU、内存等资源库存,调度资源统计 |
| RabbitMQ | 消息队列,各组件RPC通信载体 |
2. nova‑scheduler调度流程
- Filter过滤 :淘汰不满足条件主机
AvailabilityZoneFilter:过滤不在指定可用域AZ的主机RamFilter:过滤内存不足主机,支持内存超配ram_allocation_ratioComputeCapabilitiesFilter:根据flavor元数据筛选主机架构ImagePropertiesFilter:根据镜像元数据筛选hypervisor类型ServerGroupAntiAffinityFilter:反亲和,实例分散不同主机ServerGroupAffinityFilter:亲和,实例尽量放同一台主机
- Weight权重打分:过滤之后剩余主机打分,分数最高优先部署,默认优先空闲内存大的节点。
主机聚合Host Aggregate:把计算节点划分不同可用域AZ,实现硬件资源分组调度,如GPU节点单独一个AZ。
3. 虚拟机常用状态操作
| 操作 | 效果 |
|---|---|
| 软重启soft reboot | 虚拟机内部reboot,不中断宿主机hypervisor |
| 硬重启hard reboot | 模拟关机再开机 |
| Pause暂停 | 虚拟机状态保存宿主机内存,恢复速度快 |
| Suspend挂起 | 虚拟机状态保存宿主机磁盘,释放内存资源 |
| Shelve搁置 | 把实例保存为镜像到Glance,宿主机删除实例释放资源 |
| Lock锁定 | 防止误删;policy.json控制普通用户是否可解锁 |
4. 查看nova服务状态
bash
openstack compute service list
# 日志:/var/log/nova/,开启debug修改nova.conf debug=True
5. 创建虚拟机依赖条件
创建实例至少三样资源:Flavor实例规格 + Glance镜像 + Neutron网络。
6. 虚拟机创建简要流程
- 用户请求nova‑api创建实例,携带token
- nova‑api校验token,写数据库初始化实例记录
- 通过MQ发送消息给nova‑scheduler,调度选出目标计算节点
- scheduler发消息给目标节点nova‑compute
- nova‑compute向Glance拿镜像,Neutron拿网络,Cinder拿卷
- compute调用libvirt/kvm驱动,真正创建虚拟机
四、Cinder 块存储服务
Cinder提供持久化块存储卷,卷生命周期独立虚拟机,虚拟机删除卷数据不会丢失;支持LVM、Ceph、SAN存储等多种后端驱动。
区分:Nova本地磁盘为临时存储,虚拟机删除数据丢失;Cinder卷是持久存储。
1. Cinder组件
| 组件 | 功能 |
|---|---|
| cinder‑api | 对外REST接口,接收卷增删改查、挂载卸载请求 |
| cinder‑scheduler | 调度器,filter+weight选择合适存储后端 |
| cinder‑volume | 对接存储驱动,真正执行卷操作;支持LVM、SAN、Ceph等 |
| cinder‑backup | 卷备份服务,可备份到Swift对象存储 |
| Database | 保存卷、快照、后端元数据 |
2. Cinder Scheduler过滤器
AvailabilityZoneFilter:匹配存储可用域CapacityFilter:过滤剩余容量不足的后端CapabilitiesFilter:根据卷类型volume‑type的扩展规格匹配后端
volume‑type(卷类型):通过扩展规格
volume_backend_name绑定不同存储后端。
3. LVM后端概念
PV物理卷 → VG卷组 → LV逻辑卷;Packstack默认LVM后端,卷组名称cinder‑volumes。
bash
vgdisplay cinder‑volumes
4. 卷挂载流程
- Nova调用Cinder API发起挂载请求,传递计算主机initiator信息
- cinder‑api交由scheduler找到volume后端
- cinder‑volume驱动配置存储,返回iSCSI target/FC连接信息
- compute节点识别块设备,hypervisor把磁盘映射进虚拟机内部。
Cinder配置目录:
/etc/cinder/,日志:/var/log/cinder/
五、补充:OpenStack存储大类总结
- 临时存储Ephemeral Storage:nova本地盘,实例删除数据丢失
- 块存储Cinder:块设备,挂载给虚拟机,适合数据库业务
- 对象存储Swift:REST接口存取对象文件,适合备份、镜像后端
- 文件存储Manila:提供NFS/CIFS共享文件系统,本篇未展开
消息队列RabbitMQ:OpenStack各组件RPC通信核心;开启web管理界面
rabbitmq‑plugins enable rabbitmq_management,访问http://ip:15672。