
1. 架构概述与环境规划在云计算领域OpenStack作为开源的IaaS平台已经发展了十余年。传统部署方式下运维团队需要手动配置数十个组件处理复杂的依赖关系这导致部署和维护成本居高不下。而将OpenStack部署在Kubernetes集群上则能充分利用容器编排系统的优势实现声明式部署和自动化运维。1.1 为什么选择Kubernetes部署OpenStack传统OpenStack部署面临的核心痛点包括组件耦合度高各服务通过复杂的配置文件相互关联修改一个参数可能影响多个组件升级困难版本升级需要逐个组件停机维护回滚流程复杂且风险高资源利用率低静态分配的资源无法根据负载动态调整控制平面组件常处于闲置状态故障恢复慢进程崩溃后依赖外部监控系统发现并重启采用Kubernetes部署后这些问题得到了系统性解决基础设施即代码通过Helm Chart定义整个OpenStack的拓扑结构和配置实现版本控制滚动升级Kubernetes支持分批次更新Pod确保服务不中断自动扩缩容HPA可以根据CPU/内存使用率动态调整控制平面组件副本数健康检查Liveness Probe能自动检测并重启异常Pod恢复时间从分钟级降至秒级生产环境验证表明Kubernetes部署的OpenStack控制平面其服务可用性从传统的99.9%提升到了99.99%运维人力成本降低了60%以上。1.2 整体架构设计1.2.1 逻辑架构整个系统分为三个层次基础设施层物理服务器、网络设备和存储设备构成资源池编排层Kubernetes集群负责服务调度和生命周期管理OpenStack服务层各组件以容器化方式运行在Kubernetes上关键服务交互关系用户请求 → Horizon/CLI/API → Keystone认证 → 各服务API → 数据库/消息队列1.2.2 网络架构采用三网分离设计业务网络承载API流量和虚拟机外部通信需要高带宽管理网络用于集群内部通信要求低延迟存储网络专用于存储流量配置Jumbo Frame提升吞吐量网络隔离带来三个主要优势安全隔离避免敏感管理流量暴露在业务网络性能优化不同类型的流量可以使用不同的QoS策略故障隔离单个网络故障不会影响整体系统运行2. 硬件规划与资源配置2.1 最小生产环境配置2.1.1 控制平面节点节点类型数量CPU内存存储网络接口K8s Master38核16GB200GB SSD (系统盘)10G x2K8s Worker316核64GB500GB SSD10G x3Compute Node332核128GB500GB SSD NVMe10G x3Storage Node18核16GB100GB SSD 2TB HDD10G x22.1.2 关键配置说明Master节点运行Kubernetes控制平面组件建议使用物理服务器而非虚拟机确保etcd性能Worker节点部署OpenStack API服务内存需求较高是因为要运行多个数据库和消息队列实例计算节点需要支持硬件虚拟化Intel VT-x/AMD-VBIOS中必须开启相关选项存储节点如果使用Ceph替代NFS建议至少3个节点组成存储集群2.2 存储方案选型生产环境推荐两种存储方案方案ANFS 本地存储优点部署简单成本低缺点存在单点故障风险适用场景中小规模部署预算有限方案BCeph集群优点高可用支持多副本缺点硬件要求高运维复杂配置示例ceph: mon: count: 3 osd: devices: - /dev/sdb - /dev/sdc journalSize: 5120 pool: replica: 3实测数据显示Ceph集群在128个OSD规模下随机读写性能比NFS高3-5倍但延迟也相应增加20-30%3. 网络规划与实施3.1 详细网络划分3.1.1 IP地址规划网络类型网段VLAN网关用途业务网络172.16.10.0/2410172.16.10.1API访问、VM外部通信管理网络172.16.20.0/2420172.16.20.1SSH、监控、集群通信存储网络172.16.30.0/2430172.16.30.1Ceph/NFS、实时迁移Pod网络10.244.0.0/16--Kubernetes Pod间通信Service网络10.96.0.0/12--Kubernetes Service3.1.2 网络性能优化MTU设置# 存储网络启用Jumbo Frame ip link set eth2 mtu 9000流量隔离# 使用tc进行流量整形 tc qdisc add dev eth2 root handle 1: htb default 10 tc class add dev eth2 parent 1: classid 1:10 htb rate 1Gbit ceil 1Gbit网卡多队列# 启用网卡多队列提升性能 ethtool -L eth2 combined 83.2 节点网络配置示例3.2.1 Rocky Linux配置# /etc/sysconfig/network-scripts/ifcfg-eth1 TYPEEthernet BOOTPROTOstatic NAMEeth1 DEVICEeth1 ONBOOTyes IPADDR172.16.20.21 NETMASK255.255.255.0 MTU15003.2.2 Ubuntu配置# /etc/netplan/00-installer-config.yaml network: version: 2 renderer: networkd ethernets: eth1: addresses: [172.16.20.21/24] mtu: 15004. 软件版本与依赖管理4.1 核心组件版本矩阵组件版本要求兼容性说明Kubernetes1.26-1.281.28需要containerd 1.7OpenStack2024.1 (Caracal)需要Python 3.10Helm3.12支持OCI仓库Libvirt8.0必须启用qemu-kvm模块QEMU7.2需要KVM加速支持4.2 关键依赖项处理Python版本冲突# 使用alternatives管理多版本Python sudo alternatives --set python /usr/bin/python3.10内核模块加载# 检查KVM模块 lsmod | grep kvm # 若无输出则需要加载模块 modprobe kvm_intelSELinux策略# 针对Libvirt的SELinux策略 setsebool -P virt_use_nfs 15. 节点标签与调度策略5.1 节点角色定义# 标记控制平面节点 kubectl label nodes worker-{01,02,03} \ openstack-control-planeenabled \ openstack-db-nodeenabled # 标记计算节点 kubectl label nodes compute-{01,02,03} \ openstack-compute-nodeenabled \ hardware-virtualizationenabled5.2 高级调度策略反亲和性规则affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: [nova-api] topologyKey: kubernetes.io/hostname资源预留resources: requests: cpu: 2 memory: 4Gi limits: cpu: 4 memory: 8Gi6. 部署前检查清单6.1 系统级检查硬件虚拟化支持grep -E (vmx|svm) /proc/cpuinfo时间同步状态timedatectl status chronyc sources内存分配检查free -h # 确保swap未启用或swappiness1 sysctl vm.swappiness6.2 网络连通性测试# 跨节点网络测试 ping -c 4 172.16.20.11 iperf3 -c 172.16.30.100 -t 30 -p 5201 # 存储网络延迟测试 ping -s 8972 -M do -c 100 172.16.30.1006.3 存储性能基准# NFS性能测试 dd if/dev/zero of/mnt/nfs/testfile bs1G count1 oflagdirect # 本地磁盘测试 fio --namerandwrite --ioenginelibaio --rwrandwrite --bs4k --numjobs4 --size1G --runtime60 --time_based --end_fsync17. 生产环境注意事项证书管理使用cert-manager自动签发和续期TLS证书为每个服务配置独立的证书SAN列表备份策略# etcd备份 ETCDCTL_API3 etcdctl snapshot save backup.db \ --endpointshttps://172.16.20.11:2379 \ --cacert/etc/kubernetes/pki/etcd/ca.crt \ --cert/etc/kubernetes/pki/etcd/server.crt \ --key/etc/kubernetes/pki/etcd/server.key监控方案使用Prometheus采集OpenStack和Kubernetes指标Grafana仪表盘需要包含OpenStack API成功率消息队列堆积情况虚拟机启动耗时存储IOPS和延迟日志收集# Loki配置示例 loki: enabled: true config: limits_config: ingestion_rate_mb: 16 ingestion_burst_size_mb: 32在实际部署中我们发现计算节点上的Libvirt服务对内存碎片非常敏感。建议在计算节点内核参数中添加以下优化# /etc/sysctl.d/10-openstack.conf vm.overcommit_memory 1 vm.overcommit_ratio 95 vm.dirty_ratio 40 vm.dirty_background_ratio 10