OpenStack nova-compute 虚拟机部署与优化指南
1. nova-compute 部署 instance 详解
在 OpenStack 云平台中,nova-compute 作为计算服务的核心组件,负责虚拟机的生命周期管理。本文将深入解析 nova-compute 部署 instance 的完整流程,从底层原理到实际操作,帮助运维人员和开发者全面掌握这一关键技术。
1.1 nova-compute 核心功能解析
nova-compute 是 OpenStack Nova 项目中的核心服务,运行在每个计算节点上,主要负责与底层虚拟化技术交互。它的核心功能包括:
- 虚拟机实例的创建、启动、停止、暂停、恢复和删除
- 虚拟机实例的迁移(冷迁移和热迁移)
- 虚拟机实例的资源调整(resize)
- 虚拟机实例的快照创建
- 与 Hypervisor 交互获取计算节点资源信息
nova-compute 通过 libvirt 驱动与 KVM、Xen 等 Hypervisor 交互,同时也支持 Docker、LXC 等容器技术。在实际生产环境中,KVM 是最常用的虚拟化技术,因其性能优异且与 Linux 内核深度集成。
注意:选择虚拟化技术时需要考虑业务场景需求。KVM 适合通用计算场景,而 LXC 容器在轻量级、高密度部署场景中表现更优。
1.2 instance 部署流程全景
一个完整的 instance 部署流程涉及 OpenStack 多个组件的协作:
- 用户通过 Horizon 或 CLI 发起创建虚拟机请求
- nova-api 接收请求并验证
- nova-scheduler 根据策略选择合适的主机
- 目标主机上的 nova-compute 执行实际创建操作
- nova-compute 通过 libvirt 驱动与 Hypervisor 交互
- 虚拟机创建完成后,nova-compute 更新数据库状态
整个过程涉及的主要配置文件和参数包括:
- /etc/nova/nova.conf:nova-compute 主配置文件
- /etc/libvirt/libvirtd.conf:libvirt 守护进程配置
- /etc/libvirt/qemu.conf:QEMU/KVM 相关配置
2. 环境准备与配置优化
2.1 计算节点基础环境配置
在部署 instance 前,需要确保计算节点满足以下条件:
硬件虚拟化支持已启用
- Intel CPU 需启用 VT-x
- AMD CPU 需启用 AMD-V
- 可通过
egrep -c '(vmx|svm)' /proc/cpuinfo命令验证
操作系统要求
- 推荐使用 CentOS 7/8 或 Ubuntu 18.04/20.04
- 内核版本建议 3.10+(CentOS)或 4.15+(Ubuntu)
软件包安装
# CentOS yum install -y qemu-kvm libvirt virt-install bridge-utils # Ubuntu apt-get install -y qemu-kvm libvirt-bin virtinst bridge-utils网络配置
- 确保计算节点有足够的网络带宽
- 配置网桥(bridge)用于虚拟机网络连接
2.2 nova-compute 关键配置详解
/etc/nova/nova.conf 中的关键配置项:
[DEFAULT] compute_driver = libvirt.LibvirtDriver [libvirt] virt_type = kvm cpu_mode = host-passthrough这些配置决定了 nova-compute 如何与底层虚拟化技术交互。其中:
compute_driver:指定使用的虚拟化驱动virt_type:定义虚拟化类型(kvm、qemu、xen 等)cpu_mode:控制 CPU 特性暴露给虚拟机的方式
提示:生产环境中建议使用
cpu_mode = host-passthrough以获得最佳性能,但需要注意不同型号 CPU 间的迁移兼容性问题。
2.3 资源预留与分配策略
为避免主机资源耗尽导致系统不稳定,需要合理配置资源预留:
[DEFAULT] reserved_host_memory_mb = 4096 reserved_host_disk_mb = 10240 cpu_allocation_ratio = 4.0 ram_allocation_ratio = 1.0reserved_host_memory_mb:为宿主机预留的内存(MB)reserved_host_disk_mb:为宿主机预留的磁盘空间(MB)cpu_allocation_ratio:CPU 超售比例ram_allocation_ratio:内存超售比例
重要:生产环境不建议开启内存超售(保持 ram_allocation_ratio=1.0),以避免内存争抢导致的性能问题。
3. instance 创建流程深度解析
3.1 从 API 调用到虚拟机启动
一个 instance 创建请求的完整处理流程:
- 用户通过
nova boot命令或 Horizon 界面发起请求 - nova-api 接收请求并进行初步验证
- nova-conductor 处理请求并写入数据库
- nova-scheduler 根据过滤器和权重选择目标主机
- 目标主机上的 nova-compute 执行创建操作:
- 从 Glance 下载镜像
- 创建虚拟机配置文件(libvirt XML)
- 分配网络资源
- 启动虚拟机实例
- nova-compute 更新数据库状态
3.2 libvirt 域配置文件生成
nova-compute 会生成 libvirt 格式的 XML 配置文件,主要包含:
<domain type='kvm'> <name>instance-00000001</name> <memory unit='KiB'>1048576</memory> <vcpu placement='static'>2</vcpu> <os> <type arch='x86_64'>hvm</type> <boot dev='hd'/> </os> <devices> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/nova/instances/instance-00000001/disk'/> <target dev='vda' bus='virtio'/> </disk> <interface type='bridge'> <mac address='fa:16:3e:ab:cd:ef'/> <source bridge='br0'/> <model type='virtio'/> </interface> </devices> </domain>这个配置文件定义了虚拟机的核心参数,包括:
- 虚拟硬件配置(CPU、内存)
- 磁盘设备和镜像位置
- 网络接口配置
3.3 镜像处理与磁盘配置
nova-compute 处理镜像的主要步骤:
- 从 Glance 下载镜像到本地缓存
- 根据镜像格式(raw、qcow2 等)创建基础磁盘
- 如果使用 Ceph 等共享存储,直接创建 RBD 卷
- 为虚拟机创建临时磁盘(ephemeral disk)
- 如果配置了交换分区,创建交换磁盘
磁盘缓存策略配置(nova.conf):
[libvirt] disk_cachemodes = file=writeback,block=none合理的缓存策略可以显著提升 I/O 性能:
writeback:提高写入性能,但有一定数据丢失风险none:最安全的模式,但性能较低
4. 网络配置与安全组实现
4.1 虚拟机网络连接方式
nova-compute 支持多种网络连接方式:
Nova-network(传统方式)
- FlatDHCP:简单平面网络
- VLAN:基于 VLAN 的隔离网络
- Multi-host:多主机网络模式
Neutron(推荐方式)
- 支持更复杂的网络拓扑
- 提供高级网络服务(LBaaS、FWaaS 等)
- 支持多种插件(OVS、Linux Bridge 等)
配置示例(nova.conf):
[neutron] url = http://controller:9696 auth_url = http://controller:35357 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = neutron password = NEUTRON_PASS4.2 安全组实现机制
安全组是 OpenStack 中重要的网络安全功能:
- nova-compute 通过 iptables/nftables 实现安全组规则
- 每个实例有独立的防火墙链
- 规则按安全组定义进行动态更新
安全组规则处理流程:
- 用户通过 API 定义安全组规则
- nova-api 接收并验证规则
- nova-compute 将规则转换为具体的防火墙规则
- 规则应用到实例对应的网络接口
注意:安全组规则是白名单机制,默认拒绝所有流量,需要明确放行所需端口。
5. 性能优化与问题排查
5.1 计算性能优化技巧
CPU 调优
[libvirt] cpu_mode = host-passthrough cpu_model = Nonehost-passthrough:最佳性能,但影响迁移兼容性host-model:平衡性能和兼容性
内存调优
- 启用大页内存:
echo never > /sys/kernel/mm/transparent_hugepage/defrag - 关闭 KSM(Kernel Samepage Merging):
echo 0 > /sys/kernel/mm/ksm/run
- 启用大页内存:
I/O 调优
- 使用 virtio 驱动(磁盘和网络)
- 启用 vhost-net 加速网络:
[libvirt] use_virtio_for_bridges = True
5.2 常见问题与解决方案
实例创建失败:No valid host was found
- 检查 nova-scheduler 日志
- 验证计算节点资源是否充足
- 检查过滤器和权重配置
实例启动失败:Failed to connect to libvirt
- 验证 libvirtd 服务状态
- 检查 nova-compute 与 libvirt 的连接配置
- 查看/var/log/libvirt/libvirtd.log 日志
网络连接问题
- 验证网桥配置
- 检查安全组规则
- 查看 neutron 或 nova-network 日志
性能问题
- 使用
virsh top监控虚拟机资源使用 - 检查 CPU 和内存超售比例
- 验证磁盘 I/O 和网络带宽
- 使用
6. 高级功能与扩展
6.1 冷迁移与热迁移实现
冷迁移(Cold Migration)
- 关闭实例后迁移到新主机
- 需要共享存储或块迁移支持
- 命令:
nova migrate <instance-id>
热迁移(Live Migration)
- 不中断服务的情况下迁移实例
- 要求:
- 相同 CPU 型号或兼容性配置
- 共享存储或配置块迁移
- 命令:
nova live-migration <instance-id> <target-host>
配置热迁移(nova.conf):
[libvirt] live_migration_flag = VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE live_migration_uri = qemu+ssh://root@%s/system6.2 实例快照与备份
创建快照
nova image-create <instance-id> <snapshot-name>- 快照会存储在 Glance 中
- 可用于创建新实例或备份
备份策略
- 定期快照重要实例
- 使用 Ceph 等存储系统的快照功能
- 考虑备份元数据(数据库中的实例信息)
6.3 资源监控与告警
监控指标
- 计算节点资源使用率(CPU、内存、磁盘)
- 实例运行状态
- 迁移操作状态
告警配置
- 使用 Ceilometer 或 Prometheus 收集指标
- 配置 Grafana 仪表板
- 设置关键指标的告警阈值
7. 生产环境最佳实践
7.1 部署架构建议
计算节点规划
- 根据业务需求选择硬件配置
- 考虑 NUMA 架构的影响
- 预留足够的资源给宿主机
网络设计
- 管理网络、存储网络、业务网络分离
- 使用 VLAN 或 VXLAN 实现多租户隔离
- 考虑网络带宽和延迟要求
存储选择
- 本地存储:高性能但缺乏高可用
- 共享存储(如 Ceph):高可用但可能有性能开销
- 混合方案:系统盘用共享存储,数据盘用本地存储
7.2 运维管理要点
日常维护
- 定期检查计算节点资源使用
- 监控虚拟机状态
- 及时处理告警
升级策略
- 先升级测试环境
- 采用滚动升级方式
- 准备好回滚方案
故障处理
- 建立完善的日志收集系统
- 制定常见故障处理流程
- 定期演练灾难恢复
在实际生产环境中,我们发现 nova-compute 的性能和稳定性很大程度上取决于底层虚拟化技术的配置。经过多次测试和优化,我们总结出几个关键点:首先,CPU 和内存的超售比例需要根据实际负载情况谨慎设置;其次,网络和存储的配置对整体性能影响巨大;最后,完善的监控系统是保障服务稳定的基础。