跳转至

架构与核心对象

控制面与数据面

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,因此模板必须像配置版本一样管理。

调度器如何做决定

调度不是简单找“内存最多的主机”。它依次判断:

  1. 用户配额是否允许创建。
  2. Cluster、Host、Datastore 和 Network 是否满足要求。
  3. CPU、内存、磁盘和地址池是否有容量。
  4. SCHED_REQUIREMENTS 是否过滤了某些资源。
  5. SCHED_RANK 如何对候选资源排序。
  6. 最终选择 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 概览