前言
OpenStack计算管理
Nova作为OpenStack的核心项目,提供大规模可扩展、按需弹性和自助服务的计算资源是整个OpenStack中最核心的项目。
OpenStack计算服务Nova简介
OpenStack计算服务是什么
- Nova
计算服务
首次出现在OpenStack的“Austin”版本中。 - 简介
Nova提供大规模、可扩展、按需自助服务的计算资源。
Nova支持管理裸机,虚拟机和容器。 - 依赖的OpenStack服务
OpenStack最初几个版本中,计算、存储、网络都由Nova实现,后面逐步拆分出存储和网络。
目前Nova专注提供计算服务,依赖Keystone的认证服务,Neutron的网络服务Glance的镜像服务。
Nova在OpenStack中的位置和作用
- Nova是什么?
OpenStack中提供计算资源服务的项目 - Nova负责什么?
- 虚拟机生命周期管理
- 其他计算资源生命周期管理
- Nova不负责什么?
- 承载虚拟机的物理主机自身的管理
- 全面的系统状态监控
- Nova是OpenStack事实上最核心的项目
- 历史最长:OpenStack首批两个项目之一
- 功能最复杂,代码量最大
- 大部分集成项目和Nova之间都存在合作关系
- 贡献者在社区中的影响力最大
Nova架构
Nova架构图
Nova内部服务使用REST调用,Nova和其他OpenStack服务交互时,使用消息队列。
Nova运行架构
Nova服务各组件可分布式部署,且可通过virtDriver对接不同的虚拟化平台。
Nova资源池管理架构
Region>Availability Zone>Host Aggregate
Nova组件详细讲解
Nova组件
API
Nova API功能
- 对外提供REST接口,接收和处理请求。
- 对传入参数进行合法性校验和约束限制。
- 对请求的资源进行配额的校验和预留。
- 资源的创建、更新、删除查询等。
- 虚拟机生命周期管理的入口。
WSGI:Web Server Gateway Interface
Conductor
Nova-Conductor功能
- 数据库操作,解耦其他组件(Nova-Compute)数据库访问。
- Nova复杂流程控制,如创建,冷迁移,热迁移,虚拟机规格调整,虚拟机重建。
- 其他组件的依赖,如nova-compute需要nova-conductor启动成功后才能启动。
- 其他组件的心跳定式写入。
引入Nova-Conductor的好处
- 安全性上考虑
之前每个nova-compute都是直接访问数据库的。如果由于某种原因,某个计算节点被攻陷了,那攻击者就可以获取访问数据库的全部权限,肆意操作数据库。 - 方便升级
将数据库和nova-compute解耦,如果数据库模式改变,nova-compute就不用升级了。 - 性能上考虑
之前数据库的访问在nova-computer中直接访问且数据库访问的是阻塞性的,由于nova-compute只有一个OS线程,所以当一个绿色线程去访问数据库的时候会阻塞其他绿色线程,导致绿色线程无法并发。但是nova-conductor是通过rpc调用,rpc调用是绿色线程友好的,一个rpc call的执行返回前不会阻塞其他绿色线程的执行。这样就提高了操作的并发。
Scheduler
Nova-Scheduler功能
- 筛选和确定将虚拟机实例分配到哪一台物理机
- 分配过程主要分为两步,过滤和权重:
- 通过过滤器选择满足条件的计算节点
- 通过权重选择最优的节点
Compute
- Nova-Compute框架
- Manager
- Driver
- 对接不同的虚拟化平台
- KVM
- VMware
- Xen
- LXC
- QEMU
- 虚拟机各生命周期操作的真正执行者(会调用对应的hypervisor的driver)
- 底层对接不同虚拟化的平台(KVM/VMware/Xen/Ironic等)
- 内置周期性服务,完成资源刷新,虚拟机状态同步等功能。
- 资源管理模块(resource_tracker)配合插件机制,完成资源的统计。
Nova服务示例
列出Nova服务
$ openstack compute service list
Nova典型操作
Nova主要操作对象
虚拟机状态介绍
- 虚拟机状态介绍
- vm_state:数据库中记录的虚拟机状态
- task_state:当前虚拟机的任务状态,一般是中间态或者None。
- power_state:从hypervisor获取的虚拟机的真实状态。
- Statue:对外呈现的虚拟机状态。
- 状态之间的关系
- 系统内部只记录vm_state和task_state,power_state
- Status是由vm_state和task_state联合生成的
- 举例
- vm_state为active,task_state为rebooting,则status为REBOOT
- vm_state为building,则status为BUILD
虚拟机状态组合
虚拟机状态变迁图
Nova典型工作流程
Nova创建虚拟机流程
- step1
用户通过Dashboard/CLI申请创建虚拟机,并以REST API方式来请求KeyStone授权
Keystone鉴定后送回auth-token(用来通过REST-call向其他组件发送请求) - step2
Dashboard或者CLI将创建虚拟机请求转换成REST API形式并发送给nova-api - step3
nova-api收到请求后向Keystone发送请求验证auth-token并获取权限
keystone验证token并发送角色和权限更新的认证报头 - step4
nova-api联系nova-database,为新的实例创建初始数据库条目(此时虚拟机状态开始变成building) - step5
nova-api发送请求给nova-scheduler,以获得适合安装虚拟机的主机 - step6
nova-scheduler从queue中拿到请求 - step7
nova-scheduler联系nova-database通过过滤与权衡来查找最合适的主机- nova-scheduler在过滤与权衡后返回最合适安装虚拟机的主机的ID
- nova-scheduler发送请求给nova-compute,请求创建虚拟机
- step8
nova-compute从queue中拿到请求,发送请求给nova-conductor以获取选定主机的信息,如规格(ram,cpu,disk) - step9
nova-compute从queue中拿到请求,联系nova-db,返回选定主机的信息- nova-conductor将信息发送到queue中
- nova-compute从queue中得到选定主机的信息
- step10
nova-compute通过传递auth-token给glance-api进行REST调用,向glance请求使用镜像服务 - step11
glance-api与keystone验证auth-token,nova-compute得到镜像元数据 - step12
nova-compute通过传递auth-token给Neutron-api进行REST调用,以获取网络服务 - step13
Neutron-api与keystone验证auth-token,nova-compute得到网络信息 - step14
nova-compute通过传递auth-to