OpenStack nova-compute 实例部署流程与优化实践
1. Nova-compute 部署实例的核心流程解析
在 OpenStack 云平台中,nova-compute 服务是计算节点的核心组件,负责虚拟机的全生命周期管理。当用户通过 Horizon 面板或 CLI 发起创建实例请求时,整个流程会经历以下几个关键阶段:
- API 请求接收与验证
- 调度决策过程
- 资源预留与分配
- 虚拟机镜像准备
- 网络配置与安全组应用
- 实例启动与状态同步
1.1 请求处理与调度机制
nova-api 接收到创建实例请求后,首先会进行身份验证和参数校验。关键校验点包括:
- 用户配额检查(CPU、内存、磁盘、实例数等)
- 镜像可用性验证
- 网络配置有效性检查
- 安全组规则合规性
通过校验后,请求会被转发给 nova-scheduler 服务。调度器根据配置的过滤器(如 RamFilter、CoreFilter)和权重计算器,从所有计算节点中选出最合适的部署位置。网易私有云的实践表明,合理的过滤器组合对资源利用率提升至关重要:
scheduler_default_filters = RetryFilter, AvailabilityZoneFilter, RamFilter, ComputeFilter, ImagePropertiesFilter, JsonFilter, EcuFilter, CoreFilter1.2 计算节点资源准备
当选定的计算节点收到创建请求后,nova-compute 会执行以下操作:
- 检查本地资源是否满足需求
- 创建实例目录结构(通常位于 /var/lib/nova/instances/)
- 从 Glance 下载镜像或使用已有缓存
- 生成 libvirt XML 定义文件
资源预留配置示例:
[compute] reserved_host_memory_mb = 4096 reserved_host_disk_mb = 10240 vcpu_pin_set = 4-$ cpu_allocation_ratio = 4.0 ram_allocation_ratio = 1.02. 实例部署的底层技术实现
2.1 虚拟化技术选型与配置
OpenStack 支持多种虚拟化技术,KVM 因其与 Linux 内核的深度集成成为主流选择。关键配置项包括:
CPU 优化:
- vCPU 绑定(pinning)避免资源争抢
- 启用 NUMA 感知调度
- 配置 CPU 配额限制(cgroups)
内存管理:
echo always > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defragI/O 优化:
- 磁盘缓存策略设置为 none
- 使用 vhost-net 加速网络性能
- 调整调度器参数(cfq/deadline)
2.2 网络配置细节
多网络模式下(FlatDHCP+multi-host),每个计算节点需要:
- 配置 bridge 设备(通常为 br100)
- 设置 iptables 规则用于安全组和元数据服务
- 管理浮动 IP 的 NAT 规则
典型网络配置片段:
<interface type='bridge'> <source bridge='br100'/> <model type='virtio'/> <driver name='vhost'/> </interface>3. 生产环境中的运维实践
3.1 高可用部署方案
网易采用的对称部署架构特点:
- 所有节点同时运行控制面和计算服务
- API 服务通过 HAProxy+Keepalived 实现负载均衡
- 关键服务(如 nova-conductor)采用多实例部署
[api] workers = 4 [conductor] workers = 23.2 常见问题排查指南
| 问题现象 | 可能原因 | 排查方法 |
|---|---|---|
| 实例卡在BUILD状态 | 计算节点通信异常 | 检查nova-compute日志、rabbitmq连接 |
| 无法获取元数据 | iptables规则错误 | 验证169.254.169.254的DNAT规则 |
| 控制台连接失败 | novncproxy配置问题 | 检查proxy_client_address配置一致性 |
| 资源分配失败 | 配额计算不同步 | 检查nova-compute与scheduler日志 |
3.3 性能调优经验
数据库优化:
- 定期清理过期数据(如instance_actions)
- 配置合适的连接池大小
[database] max_pool_size = 50 max_overflow = 100消息队列优化:
- 启用镜像队列防止消息丢失
- 调整心跳间隔避免误判
[oslo_messaging_rabbit] heartbeat_timeout_threshold = 60日志管理:
- 配置日志轮转防止磁盘写满
- 关键服务日志级别调整为WARNING减少IO压力
[DEFAULT] log_rotation_type = size log_rotation_size = 200000
4. 进阶配置与特殊场景处理
4.1 冷迁移与热迁移实现
冷迁移(cold migrate)流程:
- 在目标节点创建实例目录
- 传输磁盘镜像文件
- 更新数据库记录
热迁移(live migration)关键参数:
[libvirt] live_migration_bandwidth = 100 live_migration_downtime = 500 live_migration_completion_timeout = 8004.2 GPU 透传配置
- 计算节点加载对应内核模块
- 配置PCI设备白名单
[pci] passthrough_whitelist = {"vendor_id":"10de","product_id":"13ba"}- 在flavor中指定需要的GPU资源
openstack flavor set gpu.large --property "pci_passthrough:alias"="gpu:1"4.3 容器化部署方案
使用容器部署nova-compute的优势:
- 环境隔离更彻底
- 版本升级更灵活
- 资源限制更精确
典型Docker启动参数:
docker run -d --name nova-compute \ --privileged \ --net=host \ -v /var/lib/nova:/var/lib/nova \ -v /var/lib/libvirt:/var/lib/libvirt \ -v /run:/run \ nova-compute:ocata在实际运维中,我们发现定期执行以下维护任务能显著提升稳定性:
- 每月清理一次/var/lib/nova/instances/_base下的过期缓存
- 每周检查一次libvirt域与数据库记录的同步情况
- 每日监控关键指标(如rabbitmq队列积压)
对于大规模部署,建议采用分级日志收集策略:
- 实时收集ERROR级别日志
- 每小时汇总WARNING级别日志
- 每日分析关键性能指标趋势
最后需要特别注意的是,任何配置变更都应先在测试环境验证,特别是网络相关参数的调整可能引发级联影响。我们曾遇到因误改metadata_listen地址导致批量实例元数据服务中断的案例,最终通过以下步骤恢复:
- 分批重启受影响计算节点的nova-network服务
- 临时关闭自动迁移功能
- 逐步验证服务恢复情况