1. 项目背景与问题概述
最近在CentOS 9系统上使用kolla-ansible部署OpenStack 2025.2(代号Flamingo)时遇到了几个典型报错。作为从Liberty版本就开始接触OpenStack的老兵,这次新版本部署过程中踩的坑确实让我印象深刻。不同于早期版本,2025.2对系统环境和依赖库的要求更加严格,特别是在Python 3.12和Ansible 8.x的新环境下,很多传统部署方式需要调整。
这次部署的目标是搭建一个All-in-One的测试环境,硬件配置为32核CPU/64GB内存/1TB SSD,操作系统采用CentOS Stream 9(内核版本5.14.0-362)。选择kolla-ansible作为部署工具主要是看中其容器化部署的便捷性,但实际过程中发现新版本在容器镜像构建、服务编排等方面都有显著变化。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备阶段的典型问题
2.1 操作系统依赖冲突
第一个拦路虎出现在预安装阶段。执行kolla-ansible bootstrap-servers时出现以下报错:
bash复制Error:
Problem: package python3-docker-py-5.0.0-1.el9.noarch requires python3-requests >= 2.14.2, but none of the providers can be installed
这个问题源于CentOS 9默认仓库中的python3-requests版本(2.25.1)与docker-py的要求存在冲突。解决方法是通过pip安装指定版本的requests库:
bash复制sudo dnf remove -y python3-requests
sudo pip3 install requests==2.28.1
重要提示:在CentOS 9上建议全程使用pip安装Python依赖,避免与dnf包管理器产生冲突。建议先执行
sudo dnf install python3-pip确保pip可用。
2.2 Ansible版本兼容性问题
当使用默认的Ansible 2.13时会遇到task执行失败:
code复制fatal: [localhost]: FAILED! => {"msg": "The conditional check 'result.rc != 0' failed..."}
这是Ansible 8.0引入的新语法校验机制导致的。解决方法是指定使用Ansible 8.x版本:
bash复制sudo pip3 install ansible==8.3.0
同时需要在ansible.cfg中添加配置:
ini复制[defaults]
interpreter_python = /usr/bin/python3
deprecation_warnings = False
3. 部署过程中的关键报错解析
3.1 容器镜像构建失败
执行kolla-ansible build时出现glance镜像构建失败:
code复制Step 12/20 : RUN pip install --no-cache-dir -r /requirements.txt
...
ERROR: Could not find a version that satisfies the requirement pbr!=5.6.0,!=5.6.1 (from versions: none)
这个问题源于2025.2版本对Python包版本的严格限制。解决方法是在globals.yml中添加:
yaml复制kolla_base_distro: "centos"
kolla_install_type: "source"
openstack_release: "2025.2"
extra_pip_install_args: "--pre"
然后手动更新pip工具:
bash复制sudo pip3 install --upgrade pip setuptools wheel
3.2 Nova服务启动超时
在部署阶段,nova-compute服务频繁超时:
code复制TASK [nova : Waiting for nova-compute to become available]
Timeout when waiting for 192.168.1.100:8774
这个问题通常由以下几个原因导致:
- libvirt版本不兼容:CentOS 9默认的libvirt 8.0需要额外配置
yaml复制# in globals.yml
nova_libvirt_type: "qemu"
enable_nova_serialconsole: "no"
- KVM加速未启用:检查虚拟化支持
bash复制sudo egrep -c '(vmx|svm)' /proc/cpuinfo # 应返回非零值
sudo lsmod | grep kvm # 检查kvm模块
- 内存不足:All-in-One环境建议至少32GB内存,否则需要调整:
yaml复制nova_ram_allocation_ratio: 1.0
nova_reserved_host_memory_mb: 1024
4. 网络配置中的常见陷阱
4.1 Neutron OVS代理异常
部署完成后发现网络不通,检查neutron-openvswitch-agent日志发现:
code复制ovsdb-client: unix:/var/run/openvswitch/db.sock: database connection failed (No such file or directory)
解决方法分三步:
- 确保Open vSwitch服务正常:
bash复制sudo systemctl restart openvswitch
- 更新Neutron配置:
yaml复制# in globals.yml
neutron_plugin_agent: "openvswitch"
enable_neutron_dvr: "no" # All-in-One环境建议关闭
- 重建网络命名空间:
bash复制sudo neutron-netns-cleanup
sudo systemctl restart neutron-openvswitch-agent
4.2 Octavia负载均衡器故障
Octavia服务部署后无法创建负载均衡器:
code复制amphorae not found in availability zone
这个问题需要检查以下几点:
- 确保octavia-worker服务正常:
bash复制kolla-ansible octavia-restart
- 检查amphora镜像是否上传:
bash复制openstack image list | grep amphora
- 如果缺失,需要手动上传:
bash复制wget https://tarballs.opendev.org/openstack/octavia/test-images/test-only-amphora-x64-haproxy.qcow2
openstack image create "amphora" \
--container-format bare \
--disk-format qcow2 \
--private \
--file test-only-amphora-x64-haproxy.qcow2
5. 数据库迁移问题处理
5.1 Galera集群启动失败
在初始化数据库时遇到galera集群无法启动:
code复制WSREP: Failed to prepare for incremental state transfer
解决方法:
- 清理旧的数据库文件:
bash复制sudo rm -rf /var/lib/mysql/*
- 修改galera配置:
yaml复制# in globals.yml
mariadb_max_connections: 1000
galera_wsrep_provider_options: "gcache.size=1G"
- 重新初始化集群:
bash复制kolla-ansible -i all-in-one mariadb_recovery
5.2 Cinder卷服务数据库问题
创建卷时出现数据库连接错误:
code复制sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'controller'")
这个问题需要检查:
- 数据库连接配置:
bash复制grep connection /etc/kolla/cinder-api/cinder.conf
- 如果使用MariaDB Galera,需要确保集群状态健康:
bash复制sudo mysql -h controller -u root -p$MYSQL_PASSWORD -e "SHOW STATUS LIKE 'wsrep%'"
- 必要时重建cinder数据库:
bash复制openstack database delete cinder
kolla-ansible -i all-in-one mariadb_recovery
6. 认证服务问题排查
6.1 Keystone令牌失效
服务部署后频繁出现令牌无效错误:
code复制Invalid token (Token not found)
解决方法:
- 检查memcached服务:
bash复制sudo docker logs memcached
- 调整keystone配置:
yaml复制# in globals.yml
keystone_token_provider: "fernet"
keystone_fernet_token_expiration: 86400
- 重新生成fernet密钥:
bash复制kolla-ansible -i all-in-one keystone-fernet-rotate
6.2 Horizon仪表板登录失败
访问Horizon时出现CSRF验证错误:
code复制Forbidden (403) CSRF verification failed. Request aborted.
这个问题通常由以下原因导致:
- 时间不同步:
bash复制sudo chronyc sources
- 会话存储配置错误:
yaml复制# in globals.yml
horizon_session_timeout: 3600
horizon_caches: "memcached:11211"
- 需要清除浏览器缓存或使用隐私模式访问。
7. 性能调优建议
7.1 容器资源限制调整
默认配置下容器资源限制可能不足,建议修改:
yaml复制# in globals.yml
docker_memory_limit: "32g"
docker_cpu_limit: "16"
对于关键服务可以单独设置:
yaml复制nova_compute_cpu_limit: "4"
nova_compute_memory_limit: "8g"
7.2 日志级别调整
生产环境建议调整日志级别避免磁盘爆满:
yaml复制openstack_log_level: "WARNING"
debug: "no"
特定组件日志可以单独设置:
yaml复制nova_log_level: "INFO"
neutron_log_level: "INFO"
8. 后续维护建议
部署完成后建议执行以下操作:
- 创建定期备份:
bash复制kolla-ansible -i all-in-one mariadb_backup --extra-vars "backup_dir=/backups"
- 设置监控告警:
bash复制sudo docker exec -it prometheus /bin/sh -c "echo '- targets: [\"node-exporter:9100\"]' >> /etc/prometheus/prometheus.yml"
- 定期更新镜像:
bash复制kolla-ansible -i all-in-one pull
kolla-ansible -i all-in-one upgrade
遇到问题时建议首先检查容器日志:
bash复制sudo docker logs -f nova_compute # 查看实时日志
sudo docker exec -it nova_compute bash # 进入容器调试
