架构与核心对象¶
控制面与数据面¶
OpenNebula 可以分成两部分:
- 控制面:Front-end 上的核心服务、调度器、Web 界面、API 和数据库,负责“应该做什么”。
- 数据面:计算节点、网络和存储,负责“真正运行 VM、传输流量和保存磁盘”。
控制面故障会影响新建、迁移和管理操作,但已经运行的 VM 通常仍由宿主机继续运行;宿主机、网络或存储故障则会直接影响 VM 业务。
主要组件¶
| 组件 | 作用 | 排障时关注 |
|---|---|---|
oned |
核心编排服务,维护云资源状态 | /var/log/one/oned.log、数据库、驱动调用 |
| Scheduler | 根据容量、策略和 Rank 选择 Host、Datastore、Network | Pending VM、资源预留、调度表达式 |
| FireEdge / Sunstone | Web 管理、自助服务与相关 API 入口 | 服务状态、反向代理、认证与会话 |
| MariaDB/MySQL | 保存资源对象、状态和历史记录 | 容量、备份、一致性和连接数 |
| Monitoring | 采集 Host 和 VM 的 CPU、内存等状态 | 采集频率、积压、数据库增长 |
| OneGate / OneFlow | VM 回传信息和多 VM 服务编排 | Context、令牌、服务角色和伸缩策略 |
资源对象的关系¶
Zone
└── Cluster
├── Host(CPU、内存、虚拟化能力)
├── Datastore(镜像和 VM 磁盘)
└── Virtual Network(地址池与二层网络)
Image ──┐
VNet ──┼──> VM Template ──实例化──> Virtual Machine
Context ┘
User / Group ──ACL + Quota──> 可见和可用的资源
Zone、Cluster 与 Host¶
- Zone:一个 OpenNebula 实例的管理域;多 Zone 用于联合多个独立云站点。
- Cluster:将能共同使用一组网络和数据存储的 Host 分组,也是调度边界。
- Host:实际运行 KVM/LXC 工作负载的计算节点。
不要仅按机房名称建立 Cluster。一个 Cluster 内的 Host 应真正具备一致或兼容的 CPU、网络桥、VLAN 和共享存储,否则 VM 放置或迁移会失败。
Datastore 与 Image¶
- Image Datastore 保存基础镜像、ISO 和数据盘镜像。
- System Datastore 保存已实例化 VM 的运行磁盘或其引用。
- File Datastore 可保存内核、initrd 等普通文件。
- Image 是受平台管理的磁盘对象,不只是一个文件路径。
“镜像在哪里”和“VM 运行盘在哪里”可能不是同一个位置。排查容量时需要同时查看 Image Datastore、System Datastore 和转换/缓存目录。
Virtual Network 与地址池¶
Virtual Network 描述 VM 接入哪一个底层网络,并通过 Address Range 管理可分配的 IP/MAC。它不会凭空创建物理网络:桥接接口、VLAN Trunk、VXLAN 端点、MTU 和上游路由仍需在底层正确配置。
Template 与 VM¶
Template 是可复用的声明,包含 CPU、内存、磁盘、网卡、调度要求和 Context;实例化后形成独立 VM。修改模板不会自动修改已运行 VM,因此模板必须像配置版本一样管理。
调度器如何做决定¶
调度不是简单找“内存最多的主机”。它依次判断:
- 用户配额是否允许创建。
- Cluster、Host、Datastore 和 Network 是否满足要求。
- CPU、内存、磁盘和地址池是否有容量。
SCHED_REQUIREMENTS是否过滤了某些资源。SCHED_RANK如何对候选资源排序。- 最终选择 Host 和 Datastore,执行部署驱动。
VM 长时间处于 PENDING 时,不要只重试。先用 onevm show <VM_ID> 查看调度原因,再检查候选 Host、Datastore、VNet 和配额。
常用对象查询¶
onezone list
onecluster list
onehost list
onedatastore list
onevnet list
oneimage list
onetemplate list
onevm list
onehost show <HOST_ID>
onevm show <VM_ID>
官方参考:OpenNebula 核心概念、Scheduler 概览。