国内技术团队在Ubuntu 22.04 LTS上部署OpenStack Yoga时,总会遇到各种"中国特色"问题——从镜像拉取龟速到依赖版本冲突,每个环节都可能成为项目延期的罪魁祸首。本文将分享一套经过生产环境验证的部署方案,重点解决三个核心痛点:国内网络环境适配、关键组件版本锁定和部署异常自愈。不同于官方文档的理想化流程,我们更关注如何在实际受限环境中构建稳定可用的云平台。
Ubuntu 22.04默认配置需要针对性调整才能满足OpenStack部署要求。首先执行系统更新并安装基础工具链:
bash复制sudo apt update && sudo apt upgrade -y
sudo apt install -y git python3-dev libffi-dev gcc libssl-dev python3-venv
配置APT国内源(以清华源为例):
bash复制sudo sed -i.bak 's|http://.*archive.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list
sudo sed -i.bak 's|http://security.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list
注意:不同地区用户应选择地理位置最近的镜像站,南京大学镜像(https://mirrors.nju.edu.cn)对华东地区用户通常响应更快
为避免系统Python环境污染,必须使用虚拟环境:
bash复制python3 -m venv /opt/kolla-venv
source /opt/kolla-venv/bin/activate
配置pip国内源并安装指定版本Ansible:
bash复制pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install 'ansible>=5,<6' cryptography==3.4.8
关键版本说明:
- Ansible 5.x对OpenStack Yoga支持最稳定
- cryptography 3.4.8可避免后续证书相关报错
从国内镜像站获取Kolla-Ansible源码:
bash复制git clone https://jihulab.com/mirrors/kolla-ansible.git -b stable/yoga
cd kolla-ansible && pip install .
修改Galaxy依赖源:
bash复制sed -i 's|opendev.org|jihulab.com/mirrors|g' requirements.yml
kolla-ansible install-deps
创建基础目录结构:
bash复制sudo mkdir -p /etc/kolla
sudo chown $USER:$USER /etc/kolla
cp -r etc_examples/kolla/* /etc/kolla
cp ansible/inventory/* .
调整all-in-one inventory文件:
ini复制[control]
localhost ansible_python_interpreter=python
[network:children]
control
[compute:children]
control
[monitoring:children]
control
[storage:children]
control
[deployment]
localhost ansible_connection=local
OpenStack Yoga对Docker 20.10.x版本有强依赖,需执行以下强制锁定:
bash复制sudo apt remove docker-ce docker-ce-cli -y
sudo apt install -y docker-ce=5:20.10.23~3-0~ubuntu-jammy docker-ce-cli=5:20.10.23~3-0~ubuntu-jammy
sudo apt-mark hold docker-ce docker-ce-cli
配置Docker国内镜像加速:
json复制// /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
],
"exec-opts": ["native.cgroupdriver=systemd"]
}
修改globals.yml关键参数:
yaml复制docker_registry: "quay.nju.edu.cn"
docker_namespace: "openstack"
kolla_base_distro: "ubuntu"
kolla_install_type: "source"
环境预检:
bash复制kolla-ansible -i all-in-one bootstrap-servers
kolla-ansible -i all-in-one prechecks -vv
试运行部署:
bash复制kolla-ansible -i all-in-one deploy --tags common -vv
全量部署:
bash复制kolla-ansible -i all-in-one deploy -vv
问题1:Failed to connect to the host via ssh
解决方案:
bash复制eval `ssh-agent`
ssh-add ~/.ssh/id_rsa
问题2:Certificate verification failed
解决方案:
bash复制sed -i 's/verify=True/verify=False/g' /opt/kolla-venv/share/kolla-ansible/ansible/roles/*/tasks/*.yml
问题3:KernelMemory报错
必须回退Docker版本:
bash复制sudo apt install --allow-downgrades -y docker-ce=5:20.10.23~3-0~ubuntu-jammy
修改neutron配置实现扁平网络:
yaml复制# /etc/kolla/globals.yml
neutron_plugin_agent: "openvswitch"
enable_neutron_provider_networks: "yes"
neutron_type_drivers: "flat,vxlan"
neutron_tenant_network_types: "vxlan"
安装社区版Skyline Dashboard:
bash复制kolla-ansible -i all-in-one deploy --tags horizon --extra-vars 'openstack_release=yoga'
git clone https://jihulab.com/mirrors/skyline-apiserver.git
cd skyline-apiserver && pip install .
实际部署中发现几个易忽略但至关重要的细节:
时间同步:所有节点必须保持毫秒级时间同步,建议部署chrony:
bash复制kolla-ansible -i all-in-one deploy --tags chrony
日志收集:提前配置ELK栈避免问题排查困难:
yaml复制# /etc/kolla/globals.yml
enable_elasticsearch: "yes"
enable_logstash: "yes"
enable_kibana: "yes"
备份策略:定期备份/etc/kolla目录和数据库:
bash复制kolla-ansible -i all-in-one stop
docker commit $(docker ps -aq) openstack_backup
tar czvf /backup/openstack_$(date +%Y%m%d).tar.gz /etc/kolla
kolla-ansible -i all-in-one start