跳转至

虚拟机、模板与生命周期

从镜像到虚拟机

OpenNebula 中几个容易混淆的概念:

对象 含义
Image 操作系统盘、数据盘或 ISO 的受管镜像
Template CPU、内存、磁盘、网卡、调度和初始化配置的可复用定义
VM Template 实例化后的实际运行对象
Context 向客户机传递主机名、网络、SSH Key、变量和令牌的机制
cloud-init 客户机启动时执行用户、软件、文件和命令初始化的通用工具

Context 是 OpenNebula 注入信息的通道,cloud-init 是客户机消费初始化数据的一种方式。镜像内需要预装对应组件并启用服务。

标准镜像应该具备什么

  • 系统已更新并删除临时文件、历史记录和固定机器标识。
  • 安装 OpenNebula Context 包或正确配置 cloud-init。
  • 使用 VirtIO 磁盘和网卡驱动;Windows 镜像需提前验证驱动。
  • 不写死 IP、主机名、SSH Host Key 和数据盘 UUID 冲突配置。
  • 启用 QEMU Guest Agent,并明确其权限与用途。
  • 安装最小必要软件,业务组件由配置管理或应用部署流程交付。
  • 记录镜像版本、构建日期、来源、校验值和停止维护日期。

不要把运行多年的生产 VM 直接当“黄金镜像”。其中往往残留业务数据、凭据、网卡规则和不可重复的人工修改。

模板设计

建议把模板分成三层:

  1. 基础模板:操作系统、CPU 架构、磁盘总线、网卡模型和 Context。
  2. 规格模板:例如 2C4G、4C8G,以及系统盘大小。
  3. 业务参数:项目网络、主机名、SSH Key、环境标识,由实例化时传入。

模板中不要保存明文数据库密码、云密钥或永久令牌。敏感信息应由受控的密钥系统或部署流程短时注入。

生命周期状态怎么理解

PENDING → PROLOG → BOOT → RUNNING
                           ├─ STOP / SUSPEND / POWEROFF
                           ├─ MIGRATE / LIVE MIGRATE
                           └─ SHUTDOWN → EPILOG → DONE
  • PENDING:等待调度,重点检查配额、容量和调度约束。
  • PROLOG:准备或传输磁盘,重点检查 Datastore、网络和权限。
  • BOOT:宿主机创建 VM,重点检查 libvirt、XML、CPU/设备兼容性。
  • RUNNING:平台看到 VM 在运行,不代表客户机内应用一定健康。
  • EPILOG:回收、保存或清理磁盘,失败时不要盲目删除底层文件。

常见操作与风险

调整 CPU 和内存

先确认客户机与虚拟硬件是否支持热插拔。即使平台接受修改,客户机也可能需要重启才识别。扩容前后都要核查操作系统和应用层指标。

磁盘扩容

平台扩盘只扩大虚拟块设备,客户机内还要处理分区、LVM、文件系统或数据库表空间。缩盘风险高,通常应新建较小磁盘并迁移数据。

快照

快照适合短期变更保护,不等于备份:它可能依赖原存储、影响性能,也无法替代异地副本和恢复演练。数据库业务还需应用一致性处理。

迁移

热迁移依赖共享存储或相应存储迁移能力、CPU 兼容、网络一致和足够带宽。迁移成功后还要检查业务连接、时钟、磁盘延迟和网络丢包。

运维命令

onevm list
onevm show <VM_ID>
onevm top
oneimage list
oneimage show <IMAGE_ID>
onetemplate list
onetemplate show <TEMPLATE_ID>

删除 VM 前先确认其磁盘是非持久镜像、持久镜像还是独立数据盘,并确认备份和保留要求。

官方参考:虚拟机管理Contextualization