虚拟机、模板与生命周期¶
从镜像到虚拟机¶
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 直接当“黄金镜像”。其中往往残留业务数据、凭据、网卡规则和不可重复的人工修改。
模板设计¶
建议把模板分成三层:
- 基础模板:操作系统、CPU 架构、磁盘总线、网卡模型和 Context。
- 规格模板:例如 2C4G、4C8G,以及系统盘大小。
- 业务参数:项目网络、主机名、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。