OpenStack 复习笔记

适合OpenStack初学者复习,涵盖Keystone、Glance、Nova、Cinder四大核心组件,包含核心概念、命令、实验要点。

基础类型

组件名称中文名称核心功能
keystone身份认证服务整个 OpenStack 的门卫,负责用户认证、鉴权、令牌 Token、服务端点 Endpoint 管理,所有组件都要和它交互
glance镜像服务虚拟机镜像管理,上传、查询、删除操作系统镜像,为 Nova 创建虚拟机提供镜像模板
nova计算服务管理虚拟机(实例 Instance)生命周期:创建、启停、迁移;调度虚拟机到计算节点
neutron网络服务提供虚拟网络,网卡、子网、路由器、浮动 IP,给虚拟机提供网络资源
cinderv2 / cinderv3块存储服务 (Cinder)v2、v3 是Cinder API 的两个版本;提供持久化云硬盘(块卷),可以挂载给虚拟机,关机数据不丢失
placement资源 Placement 服务Nova 配套组件,跟踪集群 CPU、内存等硬件资源库存,调度虚拟机的时候核查资源余量
swift对象存储服务分布式对象存储,存放文件、备份,适合存非结构化数据,不能像硬盘直接挂载给虚拟机
heat编排部署服务模板自动化批量创建资源,写 yaml 模板一键部署虚拟机、网络、存储整套云环境,实现基础设施即代码
heat‑cfnHeat 兼容 CloudFormation 接口提供兼容 AWS‑CFN 的 API 接口,让 aws 模板可以在 heat 运行
ceilometer计量监控服务早期监控组件,采集各个服务资源使用数据(CPU、网络流量),统计计费原始数据
gnocchi时序数据库给监控计量数据提供高性能存储,通常搭配 ceilometer/aodh 一起使用
aodh告警服务监控告警,当资源指标超过阈值(CPU 过高、内存爆满)触发告警

一、Keystone 认证服务(身份管理)

1. 核心概念

名词说明
Domain(域)虚拟容器,存放User/Group/Project/Role;全局唯一,可对应机构/数据中心
User(用户)访问OpenStack的实体(人、系统、其他服务),域内唯一
Group(用户组)用户集合,给组分配角色,组内全部用户继承权限
Project(项目/租户)资源集合,计算、存储、网络资源归属项目;域内唯一,旧称Tenant
Role(角色)权限集合,决定用户能干什么;可以赋予域级别或者项目级别,全局唯一
Service(服务)OpenStack组件服务,如nova、glance,对外暴露Endpoint
Endpoint(端点)服务访问URL,分为admininternalpublic三种
Token(令牌)身份凭证,认证成功后发放,默认有效期24h
Credential(凭证)证明身份信息,用户名密码、token、API Key

✨区分:

  • Authentication认证:你是谁(校验身份)
  • Authorization鉴权:你可以干什么(依靠Role角色)

2. 核心操作命令

# 加载管理员环境变量
source keystonerc_admin

# domain操作
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 list
# 给组赋予项目下角色
openstack role add --project admin --group group1 admin

# 项目操作
openstack project create ProjectA
openstack project list
# 用户绑定项目并分配角色
openstack role add --user user1 --project ProjectA admin

# 修改项目配额(实例、vcpu、内存)
openstack quota set --instance 3 --cores 5 --ram 5000 ProjectA
openstack quota show ProjectA

# 查看服务、端点
openstack service list
openstack endpoint list
openstack catalog list

3. Horizon开启多域登录

修改/etc/openstack-dashboard/local_settings

OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
systemctl restart httpd

4. Keystone排错

日志路径:/var/log/keystone/keystone.log 开启debug:修改/etc/keystone/keystone.conf,设置debug=True

5. 用户登录查询镜像完整流程

  1. 用户提交账号密码(Credential)给Keystone
  2. Keystone认证,返回Token
  3. 携带Token查询自己可访问哪些Project
  4. 获取各个Service的Endpoint地址
  5. 访问Glance端点请求镜像列表
  6. Glance携带token向Keystone校验token合法性
  7. Glance读取policy.json判断该角色是否有权限查询镜像
  8. 返回镜像数据给用户

二、Glance 镜像服务

1. Glance作用

  1. 管理VM镜像:注册、上传、下载、删除镜像
  2. 保存镜像元数据和镜像实体数据
  3. 支持多种存储后端:file、swift、ceph、s3
  4. 支持虚拟机快照生成镜像

镜像:操作系统模板,用来创建虚拟机实例

2. 镜像分类

类型特点
公共镜像平台提供,所有用户可见
私有镜像个人上传,仅自己可见
共享镜像其他用户分享给我使用
市场镜像第三方预装软件镜像

3. 磁盘格式

  • qcow2:QEMU常用,动态扩展、写时复制(实验环境cirros镜像)
  • raw:原始格式,iso属于raw
  • vmdk:VMware
  • vhd/vhdx:微软、Xen
  • iso:光盘镜像

4. Glance架构

  1. glance‑api:对外REST接口,V2版本不再需要registry组件;处理元数据请求直接访问数据库,镜像数据交给store驱动。
  2. glance store drivers:对接不同后端存储(本地文件、swift、ceph)
  3. glance DB:保存镜像元数据(大小、格式、名称、位置)

镜像元数据存MySQL,镜像实体文件存后端存储。

配置文件路径:/etc/glance/glance-api.conf 数据库连接配置:connection=mysql+pymysql://glance:xxx@192.168.108.10/glance

5. 镜像状态机

状态含义
queued仅数据库有元数据,镜像数据未上传
saving/uploading镜像正在上传中
active上传完成,可以正常使用
deactivated禁止普通用户访问镜像
killed上传出错,镜像损坏不可用
deleted标记删除,数据保留,后期自动清理
pending_delete待删除,还未清除镜像数据

6. 实验操作

# 查看镜像格式
qemu-img info cirros-0.5.2-x86_64-disk.img

# 命令行上传镜像(带进度条,大文件推荐命令行,web上传容易失败)
glance image-create --name image_centos --file xxx.iso --disk-format raw --container bare --progress

默认file后端镜像存放路径:/var/lib/glance/images/ 数据库表glance.image_locations记录镜像实际存储位置。

7. 修改后端存储为Swift

修改glance-api.conf

[glance_store]
stores=file,http,swift
default_store=swift
# swift账号密码等配置
swift_store_auth_address = http://192.168.108.10:5000/v3
swift_store_user = swift
swift_store_key = 密码(从answers.txt获取)

重启服务:systemctl restart openstack-glance*

上传镜像后数据库image_locations中value会变成swift+http://开头地址。

三、Nova 计算服务(管理虚拟机生命周期)

1. Nova组件功能

组件作用
nova‑api对外REST接口,接收用户请求,参数校验、配额校验,入口
nova‑conductor数据库代理;解耦nova‑compute,compute不再直连数据库;处理迁移、调整规格等复杂流程
nova‑scheduler调度器,选择在哪台计算节点创建虚拟机,分为过滤Filter、权重Weight两步
nova‑compute真正执行虚拟机生命周期;调用libvirt/KVM驱动创建/启停虚拟机;运行在计算节点
placement跟踪计算节点CPU、内存资源库存与使用量

nova不管理物理主机硬件本身,只管理虚拟机。

2. nova‑scheduler调度流程

  1. Filter(过滤):筛掉不满足条件的主机
  2. Weight(权重打分):剩下主机打分,分数最高优先部署
常用Filter过滤器
过滤器作用
AvailabilityZoneFilter匹配可用域AZ,不在指定AZ直接过滤
ComputeFilter只保留nova‑compute服务正常运行的节点
RamFilter过滤内存不满足flavor的节点;支持内存超配 ram_allocation_ratio=1.5
DiskFilter磁盘资源过滤;disk_allocation_ratio
CoreFiltervCPU过滤,cpu_allocation_ratio,默认不在启用列表
ComputeCapabilitiesFilter根据计算节点硬件架构过滤(x86/ARM),需要flavor元数据
ImagePropertiesFilter根据镜像元数据过滤hypervisor类型,需要镜像元数据
ServerGroupAntiAffinityFilter反亲和,实例分散部署不同主机
ServerGroupAffinityFilter亲和,实例尽量部署同一台主机

权重默认优先选择空闲内存最多的主机。

超配:允许分配的资源大于物理实际资源,提高资源利用率。

主机聚合 & 可用域AZ
  • 主机聚合Host Aggregate:逻辑分组,绑定Availability Zone可用域。
  • 创建实例时指定AZ,AvailabilityZoneFilter会过滤不属于该AZ的主机。

3. 虚拟机实例操作

创建实例必须三样:镜像、flavor实例类型规格、网络

  1. 软重启soft reboot:客户机内部执行reboot,虚拟机状态保持运行。

  2. 硬重启hard reboot:底层关机再开机。

  3. Pause暂停:状态保存宿主机内存,恢复快;状态Paused。

  4. Suspend挂起:状态保存宿主机磁盘;恢复慢,状态Shut Down。

  5. Shelve搁置:把实例保存为镜像上传Glance,宿主机删除虚拟机,释放计算节点资源。

  6. Lock锁定实例

    :防止误删。

    • 策略文件nova_policy.json控制锁权限。
    • 默认admin_or_owner,所有者和管理员都可以解锁;修改策略为admin_api仅管理员解锁。
  7. 重建实例Rebuild:保留虚拟机配置,使用原始镜像重装操作系统。

4. 创建虚拟机完整流程

  1. 用户(CLI/Horizon)携带token向nova‑api发起创建实例请求。
  2. nova‑api调用keystone校验token合法性;写入数据库初始化实例记录。
  3. 通过RPC消息队列向nova‑scheduler发送调度请求。
  4. scheduler执行Filter过滤+Weight权重,选出目标计算节点。
  5. scheduler发送RPC消息给目标节点nova‑compute。
  6. nova‑compute如需读写数据库,通过RPC调用nova‑conductor代理访问DB。
  7. nova‑compute向Glance获取镜像、向Neutron获取网络、向Cinder获取存储卷。
  8. compute调用libvirt驱动,在Hypervisor上真正创建虚拟机。

5. 日志与排错

  • nova-scheduler日志:/var/log/nova/nova‑scheduler.log
  • 开启debug:nova.conf设置debug=True,生产环境关闭debug,消耗性能。

查看nova服务状态

openstack compute service list

6. RabbitMQ消息队列

OpenStack组件之间RPC通信依赖RabbitMQ。 开启web管理插件:

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未确认消息,持续增长说明消息堆积,系统异常。

四、Cinder块存储服务(持久化块卷)

1. 存储分类

  1. 临时存储Ephemeral:虚拟机本地盘,虚拟机删除/关机数据丢失,nova本地磁盘。

  2. 持久存储Persistent

    :生命周期独立虚拟机,关机删除虚拟机数据还在。

    • Cinder块存储:块设备,挂载给虚拟机,用于数据库。
    • Swift对象存储:REST API访问对象文件。
    • Manila文件存储:提供NFS/CIFS共享文件系统。

Cinder提供块存储卷,只是抽象中间层,本身不做实际存储,通过驱动对接后端存储(LVM、Ceph、SAN存储设备)。

2. Cinder组件

组件功能
cinder‑api对外REST API,接收卷增删改查、挂载卸载请求,校验参数,操作数据库,发送RPC给scheduler
cinder‑scheduler调度,Filter过滤+Weigher权重,选择合适后端存储节点
cinder‑volume调用后端驱动,真正执行卷创建、删除;对接LVM/Ceph/SAN存储硬件
cinder‑backup卷备份,备份到swift等存储后端
cinder DB数据库,保存卷、快照、后端信息

配置文件路径:/etc/cinder/cinder.conf 日志路径:/var/log/cinder/

3. Cinder Scheduler过滤器

  • AvailabilityZoneFilter:可用域AZ过滤
  • CapacityFilter:过滤存储空间不足的后端
  • CapabilitiesFilter:匹配后端存储能力特性(精简置备等)

配置:scheduler_default_filters在cinder.conf。

4. LVM后端原理(实验环境默认)

PV物理卷 → VG卷组 → LV逻辑卷。 Cinder在LVM卷组中创建LV作为块存储卷提供给虚拟机。

查看卷组:

vgdisplay cinder‑volumes

5. Cinder高可用部署

  • cinder‑api:多节点部署,HAProxy负载均衡AA模式。
  • cinder‑scheduler:多节点AA,RabbitMQ分发任务。
  • cinder‑volume:多节点,对接存储后端。
  • 数据库MySQL主从集群;RabbitMQ集群/主备。

五、易混淆概念总结

  1. 镜像Image:模板,操作系统。
  2. Flavor实例类型:定义虚拟机规格:vCPU、内存、磁盘大小。
  3. Instance实例:运行中的虚拟机,从镜像启动,使用flavor分配资源。
  4. Volume卷:cinder持久化块存储,可以挂载给实例,独立生命周期。

一个镜像可以启动很多实例;实例修改不会改变原始镜像。

六、考试/实验高频考点

  1. Keystone:区分Domain、Project、User、Group、Role;token作用;三种endpoint。
  2. Glance:镜像磁盘格式qcow2;镜像各个状态;元数据和镜像实体分别保存在数据库和后端存储。
  3. Nova:scheduler两步调度Filter+Weight;各个过滤器作用;实例各种暂停重启操作区别;创建实例完整流程。
  4. Cinder:临时存储与持久存储区别;cinder各个组件;LVM后端;scheduler过滤器。
  5. 排错思路:查看对应组件日志,开启debug模式观察RPC消息;RabbitMQ关注未确认消息。
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐