当你在Ubuntu 22.04上使用Kolla-Ansible部署OpenStack Yoga时,可能会遇到一个令人头疼的问题:Docker 23版本与Kolla-Ansible的不兼容性。这个问题会导致部署过程中出现KeyError: 'KernelMemory'错误,让整个安装流程戛然而止。本文将深入分析问题根源,并提供一套完整的解决方案,帮助你顺利完成部署。
在部署OpenStack Yoga时,很多用户会遇到以下错误日志:
code复制TASK [openstack.kolla.baremetal : Ensure docker containers are running] ********
fatal: [control01]: FAILED! => {"changed": false, "msg": "Error starting container 8f3a8b7c8d1e: 500 Server Error for http+docker://localhost/v1.41/containers/8f3a8b7c8d1e/start: Internal Server Error (\"error while creating mount source path '/var/lib/kolla/volumes/neutron/neutron_server': mkdir /var/lib/kolla/volumes/neutron: permission denied\")"}
更深入的分析会发现,问题的核心在于:
KernelMemory属性KeyError异常关键影响:这个问题不仅影响初始部署,还会在后续添加或删除组件时导致操作失败。
要彻底解决这个问题,我们需要在部署前强制指定安装Docker 20.10.*版本。以下是详细的操作步骤:
首先,我们需要修改Kolla-Ansible的baremetal角色配置文件:
bash复制# 备份原始文件
sudo cp /root/.ansible/collections/ansible_collections/openstack/kolla/roles/baremetal/defaults/main.yml /root/.ansible/collections/ansible_collections/openstack/kolla/roles/baremetal/defaults/main.yml.bak
# 修改Docker安装源和版本
sudo sed -i 's/_package: "docker-ce"/_package: "docker-ce=5:20.10*"/g' /root/.ansible/collections/ansible_collections/openstack/kolla/roles/baremetal/defaults/main.yml
执行以下命令验证Docker版本是否正确:
bash复制# 查看Docker版本
docker version --format '{{.Server.Version}}'
预期输出应该是20.10.*格式的版本号。如果显示的是23.x.x,说明配置未生效,需要重新检查前面的步骤。
现在,我们可以开始完整的OpenStack Yoga部署流程。以下是经过优化的步骤:
bash复制sudo apt update
sudo apt install -y git python3-dev libffi-dev gcc libssl-dev python3-venv
bash复制python3 -m venv /opt/kolla-venv
source /opt/kolla-venv/bin/activate
bash复制pip install 'ansible>=4,<6'
pip install git+https://opendev.org/openstack/kolla-ansible@stable/yoga
bash复制sudo mkdir -p /etc/kolla
sudo chown $USER:$USER /etc/kolla
cp -r /opt/kolla-venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
cp /opt/kolla-venv/share/kolla-ansible/ansible/inventory/* .
确保已经按照第2章的步骤修改了Docker版本配置。然后安装依赖:
bash复制kolla-ansible install-deps
bash复制kolla-genpwd
/etc/kolla/globals.yml:yaml复制kolla_base_distro: "ubuntu"
network_interface: "eth0"
neutron_external_interface: "eth1"
kolla_internal_vip_address: "10.1.0.250"
bash复制kolla-ansible -i ./multinode prechecks
bash复制kolla-ansible -i ./multinode deploy
部署完成后,需要进行以下验证:
bash复制kolla-ansible -i ./multinode check
bash复制docker ps -a
使用VIP地址(如https://10.1.0.250)访问OpenStack仪表板,默认用户名为admin,密码可以在/etc/kolla/passwords.yml中找到。
常见问题排查:
/var/log/kolla/目录下的日志文件neutron_external_interface成功部署后,可以考虑以下优化措施:
bash复制# 示例:调整Docker守护进程配置
sudo tee /etc/docker/daemon.json <<EOF
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl restart docker
通过以上步骤,你应该能够在Ubuntu 22.04上成功部署OpenStack Yoga,同时规避Docker 23版本带来的兼容性问题。