OpenStack核心组件管理(Keystone → Glance → Nova 及实例创建)
·
一、Keystone 认证管理
1. 核心概念
| 概念 | 说明 |
|---|---|
| Domain(域) | 一组 User、Group、Project 的容器,可对应一个机构/数据中心,全局唯一。 |
| User(用户) | 访问 OpenStack 的实体,通过 Credential(用户名/密码等)认证,获得 Token。 |
| Group(用户组) | 一组 User 的容器,可对 Group 直接分配角色,组内用户继承角色权限。 |
| Project(项目) | 资源的集合(计算、存储、网络),资源所有权属于 Project 而非 User。每个 User 必须挂载到 Project 才能访问资源。 |
| Role(角色) | 定义一组权限,角色不同权限不同。可分配给 User 或 Group(域内或项目内)。 |
| Service(服务) | 如 Nova、Cinder、Glance,每个服务暴露若干 Endpoint。 |
| Endpoint(端点) | 服务可访问的网络地址(URL),分为 admin、public、internal 三种类型。 |
| Token(令牌) | 认证成功后返回的字符串,作为后续访问凭证,默认有效期 24 小时。 |
| Credential(凭证) | 确认用户身份的数据(如用户名/密码)。 |
2. 常用操作(命令行示例)
- 创建 domain
openstack domain create --description "描述" domain名 - 创建 user
openstack user create --password 密码 user1 - 创建 group 并将 user 加入 group
openstack group create group1openstack group add user group1 user1 - 创建 project
openstack project create ProjectA - 分配角色
openstack role add --project ProjectA --user user1 admin - 设置配额
openstack quota set --instances 3 --cores 5 --ram 5000 ProjectA - 查看服务与 endpoint
openstack service listopenstack endpoint list/openstack catalog list
3. 认证与鉴权流程
- 用户提供用户名/密码 → Keystone 验证 → 返回 Token(内含 Role 信息)。
- 用户携带 Token 访问其他服务(如 Nova)。
- 服务收到请求后,将 Token 发送给 Keystone 验证有效性。
- 每个服务通过自身的
policy.json决定 Role 是否有权执行操作。
二、Glance 镜像管理
1. 镜像格式
| 格式 | 说明 |
|---|---|
| qcow2 | QEMU 支持,支持动态扩展和写时复制(常用) |
| raw | 非结构化磁盘格式 |
| iso | 光盘存档格式 |
| vhd / vmdk / vdi | 分别对应 Xen/Xbox、VMware、VirtualBox |
| aki / ari / ami | Amazon 内核/内存盘/机器镜像 |
2. 镜像状态
| 状态 | 含义 |
|---|---|
| queued | 只保留元数据,镜像数据未上传 |
| saving | 原始数据正在上传 |
| uploading | 调用了 import data 请求 |
| importing | 导入中,尚未就绪 |
| active | 镜像可用 |
| deactivated | 非管理员不可访问 |
| killed | 上传出错,不可用 |
| deleted | 已删除,稍后自动清理 |
| pending_delete | 类似 deleted,但数据未清除(可恢复) |
3. 上传镜像实验
- 使用
qemu-img info查看镜像格式。 - Web 界面创建镜像:指定名称、源类型(本地文件/URL)、磁盘格式、可见性等。
- 命令行上传大文件(带进度条)
glance image-create --name image-centos --file CentOS.iso --disk-format raw --container bare --progress - 镜像文件默认存储位置:
/var/lib/glance/images/,数据库image_locations表记录路径。
4. Glance 架构变化
- Newton 及之前:Glance-API + Glance-Registry(Registry 处理元数据)。
- Stein 开始:废弃 Glance-Registry,Glance-API 直接操作数据库,通过 Store 模块对接不同后端(S3、Cinder、Swift、Ceph 等)。
三、Nova 计算管理
1. Nova 组件架构
| 组件 | 功能 |
|---|---|
| nova-api | 接收 REST 请求,入口,校验参数,配额管理 |
| nova-scheduler | 为虚拟机选择合适的物理主机(过滤 + 权重) |
| nova-compute | 真正执行虚拟机生命周期操作,调用 Hypervisor Driver(KVM/VMware/Xen 等) |
| nova-conductor | 代理数据库访问,解耦 nova-compute 与数据库,提高安全性及并发 |
| nova-console | 提供 VNC/SPICE 等控制台访问 |
| 消息队列(RabbitMQ) | 组件间通信,如 nova-api → nova-scheduler → nova-compute |
| 数据库 | 存储实例、规格、资源使用等信息 |
2. Nova 调度器(Filter Scheduler)
调度过程两步:
- 过滤(Filter):选出满足条件的计算节点。
- 权重(Weight):对通过过滤的节点打分,选分最高者。
常用过滤器:
| Filter | 作用 |
|---|---|
RetryFilter |
排除之前调度失败的节点 |
AvailabilityZoneFilter |
根据可用区筛选节点 |
RamFilter |
检查内存是否满足 flavor 需求(支持 overcommit,ram_allocation_ratio 默认 1.5) |
DiskFilter |
检查磁盘容量(disk_allocation_ratio 默认 1.0) |
CoreFilter |
检查 vCPU 数量(cpu_allocation_ratio 默认 16) |
ComputeFilter |
只保留 nova-compute 服务正常的节点 |
ComputeCapabilitiesFilter |
根据计算节点特性(如 CPU 架构)筛选 |
ImagePropertiesFilter |
根据镜像属性(如 hypervisor_type)筛选 |
ServerGroupAntiAffinityFilter |
将实例分散到不同节点 |
ServerGroupAffinityFilter |
将实例尽量集中到同一节点 |
权重:默认根据计算节点空闲内存量打分,空闲内存越多权重越大。
3. 创建实例(虚拟机)的详细流程
- 用户通过 Dashboard/CLI 发起创建请求(携带认证 token)。
- Keystone 验证 token 和角色。
- nova-api 接收请求,校验参数,初始化数据库记录。
- nova-api 通过 RPC call 向 nova-scheduler 请求资源。
- nova-scheduler 执行过滤+权重,选出目标计算节点。
- nova-scheduler 更新数据库,并通过 RPC cast 向目标节点的 nova-compute 发送创建请求。
- nova-compute 通过 RPC call 向 nova-conductor 获取实例信息。
- nova-conductor 查询数据库并返回信息。
- nova-compute 调用 Hypervisor Driver 创建虚拟机(期间可能向 Glance 获取镜像、向 Neutron 配置网络、向 Cinder 挂载卷)。
- 各服务间通信均需携带 token 并向 Keystone 验证。
- 创建完成后,用户可通过 nova-console 访问控制台。
4. 实例操作
- 软重启(Soft Reboot):只重启操作系统,实例保持运行。
- 硬重启(Hard Reboot):关机再开机。
- 暂停(Pause):状态保存到内存,恢复快。
- 挂起(Suspend):状态保存到磁盘,释放内存资源。
- 搁置(Shelve):将实例保存为镜像到 Glance,删除原实例,释放所有资源。
- 锁定(Lock):防止意外删除。可通过修改
nova_policy.json控制解锁权限(默认 admin_or_owner,可改为 admin_only)。
四、网络基础(Neutron 简述,支撑实例创建)
1. 虚拟网络技术
- TAP/TUN:模拟二层/三层虚拟网络设备。
- VETH Pair:成对虚拟网卡,用于连接不同网络命名空间或网桥。
- Linux Bridge:二层虚拟交换机(
brctl管理)。 - Open vSwitch(OVS):产品级虚拟交换机,支持 VLAN、VxLAN、GRE、流表等。
2. Neutron 核心资源
- Network:隔离的二层广播域(local/flat/vlan/vxlan/gre)。
- Subnet:IPv4/IPv6 地址段,属于某个 Network。
- Port:虚拟交换机端口,绑定 MAC/IP 给 VIF(虚拟网卡)。
3. 实例创建中的网络步骤
- 创建内部网络(如
neiwang-1,CIDR192.168.11.0/24)。 - 创建路由器,连接内部网络与外部网络(设置网关、启用 SNAT)。
- 实例选择该内部网络,自动分配 IP,通过路由器访问外部。
五、实例创建实际操作(Nova 操作创建实例)
1. 前置条件
- 已有可用镜像(如 cirros-0.5.2)。
- 已定义 flavor(规格,如
Flavor_web:vCPU、内存、磁盘)。 - 已创建网络(内部网络)和路由器(可选,跨网段或外网访问需要)。
2. Web 界面创建实例步骤
- 登录 Horizon → “项目” → “计算” → “实例” → “创建实例”。
- 填写实例名称、数量,选择可用域(Availability Zone,若需要指定)。
- 选择“源” → “镜像”(选择已上传的镜像)。
- 选择“实例类型”(flavor)。
- 选择“网络”(选择一个已创建好的内部网络)。
- 其他可选:安全组、密钥对、元数据等。
- 点击“创建实例”。
3. 关键注意点
- 网络必须选择,否则无法创建。
- 若实例需要与外网通信,需确保路由器已连接外部网络并开启 SNAT,且实例所在子网网关指向路由器。
- 查看调度日志:启用 debug 后
tail -f /var/log/nova/nova-scheduler.log可观察到 Filter 过滤和权重打分过程。
4. 命令行创建示例
openstack server create --flavor Flavor_web --image cirros-0.5.2 --network neiwang-1 --key-name mykey myinstance
总结
| 模块 | 核心要点 |
|---|---|
| Keystone | 域/用户/组/项目/角色/令牌/端点;认证与授权分离;policy.json 控制权限 |
| Glance | 镜像格式与状态;支持多后端存储;上传镜像(Web/CLI) |
| Nova | 分布式无共享架构;调度器(过滤+权重);创建实例完整流程涉及多组件协作;实例生命周期管理(重启/暂停/挂起/搁置/锁定) |
| Neutron | 为实例提供二层网络和三层路由;Network/Subnet/Port 模型;支持多种网络类型 |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)