文章

Kolla-Ansible 部署 OpenStack

Kolla-Ansible 部署 OpenStack

Kolla-Ansible 部署 OpenStack

本文档基于 Kolla-Ansible 使用 Docker 容器方式部署 OpenStack,适用于 Ubuntu 或 CentOS,适合测试与小规模部署。


0. 架构与组件简介

Kolla-Ansible 将各 OpenStack 服务打包为 Docker 镜像,通过 Ansible 编排部署。所有服务以容器形式运行,与宿主机隔离。

部署架构

层级说明
Ansible编排引擎,执行 bootstrap、prechecks、deploy、post-deploy
Docker容器 runtime,承载各 OpenStack 服务
Kolla 镜像官方预构建镜像(Keystone、Nova、Glance、Neutron、Horizon 等)

主要服务(容器化)

服务说明
Keystone身份认证
Nova计算 API 与调度
Glance镜像服务
Neutron网络服务
Cinder块存储
HorizonWeb 管理界面
MariaDB元数据存储
RabbitMQ消息队列

局限与适用场景

方面说明
规模容器化但非 K8s,多节点编排能力有限,更适合测试与小规模部署
资源各服务独立容器,内存、磁盘占用相对较高
部署耗时首次部署需拉取大量镜像,通常需 30–60 分钟
升级大版本升级需重新部署,回滚成本较高
依赖强依赖 Docker 与宿主机,宿主机故障影响整体可用性

1. 前置条件

项目要求
操作系统Ubuntu 22.04 / 24.04 或 CentOS Stream 9
硬件8GB+ 内存,40GB+ 磁盘(建议 150GB+),2 块网卡(单网卡可单机 All-in-One)
网络可访问互联网及 Docker 镜像仓库
权限root 或 sudo

2. 环境准备

2.1 安装 Docker

Ubuntu:

1
2
3
4
sudo apt update
sudo apt install -y docker.io docker-compose-plugin
sudo systemctl enable docker
sudo systemctl start docker

CentOS Stream 9:

1
2
3
4
5
sudo dnf install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl enable docker
sudo systemctl start docker

2.2 安装 Python 与 Kolla-Ansible 依赖

Ubuntu:

1
sudo apt install -y python3-dev python3-pip python3-venv libffi-dev gcc libssl-dev

CentOS:

1
sudo dnf install -y python3-pip python3-devel libffi-devel gcc openssl-devel

2.3 安装 Ansible 与 Kolla-Ansible

1
2
sudo pip3 install -U pip
sudo pip3 install 'ansible-core>=2.14' kolla-ansible

或使用虚拟环境(推荐):

1
2
3
4
python3 -m venv /opt/kolla-venv
source /opt/kolla-venv/bin/activate
pip install -U pip
pip install 'ansible-core>=2.14' kolla-ansible

3. 配置 Kolla-Ansible

3.1 创建配置目录

1
2
sudo mkdir -p /etc/kolla
cd /etc/kolla

3.2 生成配置文件

1
2
3
4
5
6
# 安装依赖并复制示例配置
sudo kolla-ansible install-deps

# 若 /etc/kolla 下无配置,从示例复制
sudo cp -r /usr/share/kolla-ansible/etc_examples/kolla/* /etc/kolla/
sudo cp /usr/share/kolla-ansible/ansible/inventory/* /etc/kolla/

3.3 编辑 globals.yml

关键配置示例(按实际网卡名调整):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
---
openstack_release: "caracal"   # 或 zed、antelope,视 kolla-ansible 版本

kolla_base_distro: "ubuntu"    # CentOS 用 "centos"
kolla_install_type: "binary"

# 单机 All-in-One
network_interface: "eth0"                    # 管理网卡
neutron_external_interface: "eth1"           # 外网网卡;单网卡时与 network_interface 相同

enable_horizon: "yes"
enable_neutron: "yes"
enable_cinder: "yes"

kolla_internal_vip_address: "192.168.1.230"  # 本机 IP 或 VIP

3.4 配置 inventory(单机 All-in-One)

编辑 /etc/kolla/ansible/inventory/all-in-one,若无此文件则使用 multinode。单机时将各节点均设为 localhost:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[control]
localhost ansible_connection=local

[network]
localhost ansible_connection=local

[compute]
localhost ansible_connection=local

[monitoring]
localhost ansible_connection=local

[storage]
localhost ansible_connection=local

3.5 生成密码

1
2
cd /etc/kolla
sudo kolla-genpwd

密码写入 passwords.yml,管理员密码为 keystone_admin_password


4. 部署步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cd /etc/kolla

# 指定 inventory(all-in-one 或 multinode,按实际路径)
INVENTORY="ansible/inventory/all-in-one"
# 若无 all-in-one,使用:INVENTORY="ansible/inventory/multinode"

# 1. 检查系统要求
sudo kolla-ansible -i $INVENTORY bootstrap-servers

# 2. 预检查
sudo kolla-ansible -i $INVENTORY prechecks

# 3. 部署(约 30–60 分钟)
sudo kolla-ansible -i $INVENTORY deploy

# 4. 生成 admin-openrc
sudo kolla-ansible -i $INVENTORY post-deploy

5. 安装后

项目说明
Horizonhttp://<本机IP>http://<本机IP>:80
管理员密码sudo grep keystone_admin_password /etc/kolla/passwords.yml
加载凭证source /etc/kolla/admin-openrc.sh
验证openstack service listopenstack image list
容器状态docker ps

6. 初始化:规格与网络

openstack flavor listopenstack network list 为空,需手动创建。


7. 常见问题

7.1 镜像拉取慢或超时

配置 Docker 镜像加速或代理;或提前拉取 Kolla 镜像:

1
sudo kolla-ansible -i ansible/inventory/all-in-one pull

7.2 网卡名不匹配

globals.ymlnetwork_interfaceneutron_external_interface 需与本机实际网卡名一致。可用 ip link 查看。

7.3 端口冲突

确保 80、3306、5672、5000、8774、9292、9696 等端口未被占用:

1
ss -tulnp | grep -E ':80|:3306|:5672|:5000'

7.4 部署失败

查看 Ansible 输出中的具体错误;或检查容器日志:

1
2
docker ps -a
docker logs <容器名>
本文由作者按照 CC BY 4.0 进行授权