同 Cinder 一样,Nova 本身不包括 Hypervisor,而是向下通过相应的驱动与 Hypervisor 交互,向上对外提供 API。
因此,Nova 负责虚拟机/计算资源生命周期管理,但不承载虚拟机的物理主机自身的管理,也不做系统状态监控。
Nova 架构相当复杂,内部组件众多,与外部组件交互也多,基本通信方案:
- 内部组件间使用 RPC 通信(通过
oslo.messaging) - 外部组件使用 HTTP 通信
- 数据库作为全局状态接受各内部组件的读写
组件:
Controller Node控制节点,一般同时部署 api、conductor、scheduler 组件nova-apiAPI 层,已经相当重了- 转化 REST API(HTTP 请求)内部组件 RPC 调用(消息队列消息),转化 RPC 调用结果为 HTTP 响应
- 中间层
nova-scheduler为虚拟机选择合适的物理主机nova-conductor处理需要协调(构建/调整大小)的请求,总之,这层的存在主要为了解耦计算节点对数据库的操作- 代理
nova-compute对数据库的操作:解耦和避免风险 - 参与复杂流程控制:创建、迁移、删除、重建、规格调整
- 其他组件的依赖,nova-conductor 作为桥梁核心,需要预先启动
- 代理
- DB(MySQL)
- AMQP(Rabbit-MQ)
Compute Node计算节点(虚拟化层)nova-compute虚拟机生命周期的真正执行者(调用 Hypervisor 的驱动),其他还有- 虚拟机状态同步
- 资源统计
- Hypervisor 真正的虚拟化部分:Hyper-V/Xen/VMWare/Libvirt(KVM/QEMU/LXC)
- 其他
Nova 命令
细节问题
虚拟机状态
虚拟机状态在 Nova 中记录/表示的相当复杂,涉及多个字段:
vm_state数据库中记录的虚拟机状态task_state当前虚拟机的任务状态,一般是中间态或者 nullpower_statehypervisor 获取的虚拟机的真实状态status对外呈现的虚拟机状态,由vm_state和task_state联合生成
Nova 创建虚拟机流程
过于复杂
Nova 典型操作
- 虚拟机生命周期管理
- 虚拟机资源
- 卷:挂载、卸载、查询
- 网卡:挂载、卸载、查询
- 其他资源:Flavor 规格、Host Group 主机组、Quota 配额
- 其他组件的 API 封装
- Cinder:卷和快照
- Neutron:虚拟网络
- Glance:镜像