kolla-ansible 部署 openstack

什么是kolla-ansible

Kolla-Ansible是一个用于部署OpenStack云服务的Ansible项目。它允许你在物理服务器或虚拟机上使用Docker容器来部署和管理OpenStack服务。Kolla-Ansible的目标是提供一个生产级别的容器化解决方案,用于部署和操作OpenStack云。

以Kolla-Ansible的关键特点:

容器化:
Kolla-Ansible使用Docker作为容器运行时环境,将每个OpenStack服务封装在单独的容器中。这有助于隔离服务,简化部署和管理。

生产就绪:
Kolla-Ansible旨在为OpenStack提供一个稳定和可靠的部署方式,适用于生产环境。

易于部署:
Kolla-Ansible通过Ansible playbooks自动化部署过程,使得部署OpenStack变得更加简单和快捷。

高度可定制:
尽管Kolla-Ansible开箱即用,它也提供了完整的灵活性和可定制性,允许经验丰富的运维人员根据需要调整配置。

社区驱动:
作为一个开源项目,Kolla-Ansible由一个活跃的社区开发和维护,该社区致力于不断改进和扩展其功能。

支持多种OpenStack服务:
Kolla-Ansible支持部署一系列OpenStack服务,包括计算(Nova)、块存储(Cinder)、对象存储(Swift)等。

基础设施组件:
除了OpenStack服务,Kolla-Ansible还能够部署支持云操作所需的基础设施组件,如数据库、消息队列、网络等。

文档齐全:
Kolla-Ansible有详细的文档,帮助用户了解如何开始使用、部署OpenStack服务以及如何维护和扩展云环境。

支持的系统

LinuxOS Version
Rocky Linux 9
Debian Bullseye
Ubuntu 22.04

基础配置

用途 主机名 配置
控制节点 controller01 4C8G 硬盘:100G
计算节点 compute01 2C4G 硬盘:100G
计算节点 compute02 2C4G 硬盘:100G
计算节点 compute03 2C4G 硬盘:100G

网卡配置

IP地址 网卡 网络类型 在OpenStack网络中的作用
无(不能配置IP地址) enp0s3 桥接 外部网络(external network),让neutron(Openstack 中的网络组件)的br-ex绑定使用,OpenStack中的虚拟机通过该网卡与外网通信
172.25.16.200/24 enp0s8 共享宿主机网卡 用于虚拟机连接外网,下载资源
192.168.56.200/24 enp0s9 仅主机 OpenStack内部管理网络(Management network),Horizon web界面通过此网卡访问

安装流程

  1. 配置主机
  2. 安装 指定版本的ansible & kolla-ansible & ansible galaxy
  3. 修改 kolla-ansible global.yml主配置文件,并生成密码文件
  4. 安装部署
  5. 使用OpenStack

配置主机

  • 关闭selinux与防火墙
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
getenforce

systemctl disable firewalld.service --now
  • 配置网卡
nmcli c del enp0s3
nmcli c add type ethernet ifname enp0s3 con-name enp0s3 ipv4.method disabled ipv6.method disabled
nmcli c r enp0s3
nmcli c up enp0s3
  • 配置主机名(所有主机配置)
hostnamectl set-hostname controller01
hostnamectl set-hostname compute01
hostnamectl set-hostname compute02
hostnamectl set-hostname compute03     
cat >> /etc/hosts << EOF
192.168.56.200 controller01
192.168.56.201 compute01
192.168.56.202 compute02
192.168.56.203 compute03
EOF
  • 下载基础包
dnf install -y python3-resolvelib sshpass libffi-devel gcc python3-libselinux git python3-devel openssl-devel vim net-tools bash-completion 
  • 配置无密钥访问
ssh-keygen
ssh-copy-id root@controller01
ssh-copy-id root@compute01
ssh-copy-id root@compute02
ssh-copy-id root@compute03

ansible、kolla-ansible、galaxy

  • 创建虚拟环境
python3 -m venv /path/to/venv
source /path/to/venv/bin/activate
  • 更新pip版本
pip install -U pip
  • 安装指定版本ansible
pip install 'ansible>=4,<6'
  • 配置ansible
mkdir -p /etc/ansible/
cat >> /etc/ansible/ansible.cfg << EOF
[defaults]
# 关闭首次连接服务器验证
host_key_checking = False
# 打开ssh pipelining加速
pipelining = True
# 并发进程数
forks=100
EOF
  • 安装kolla-ansible

这里需要注意,官网给到的命令是pip install git+https://opendev.org/openstack/kolla-ansible@stable/zed,但是五月份的时候,官网已经暂停维护zed版本,并将zed的branch重命名为unmaintained,所以需要修改git的路径。

pip install git+https://opendev.org/openstack/kolla-ansible@unmaintained/zed
  • 创建目录并授权
sudo mkdir -p /etc/kolla
sudo chown $USER:$USER /etc/kolla
  • 拷贝配置文件和Inventory File文件
cp -r /path/to/venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
cp /path/to/venv/share/kolla-ansible/ansible/inventory/* .

Inventory File 是一个 Ansible 的清单
单节点对应 all-in-one 文件
多节点对应 multinode 文件

  • 修改清单

  • all-in-one

  • multinode

# 只要修改下面的内容就好了,剩下的不用改
[control]
# These hostname must be resolvable from your deployment host
controller01

# The above can also be specified as follows:
#control[01:03]     ansible_user=kolla

# The network nodes are where your l3-agent and loadbalancers will run
# This can be the same as a host in the control group
[network]
controller01

[compute]
controller01
compute01
compute02
compute03

[monitoring]
controller01

# When compute nodes and control nodes use different interfaces,
# you need to comment out "api_interface" and other interfaces from the globals.yml
# and specify like below:
#compute01 neutron_external_interface=eth0 api_interface=em1 tunnel_interface=em1

[storage]
controller01
compute01
compute02
compute03
  • 安装galaxy
kolla-ansible install-deps
  • 生成密码文件

生成密码文件/etc/kolla/passwords.yml
生成随机密码, 也可以指定密码内容

kolla-genpwd
vim /etc/kolla/passwords.yml
#主要修改登陆密码
keystone_admin_password: Admin@123
  • 修改global.yml

部署前, /etc/kolla 下只有俩文件:
密码文件—— /etc/kolla/passwords.yml
主配置文件—— /etc/kolla/globals.yml,
global.yml定义了将如何安装 OpenStack, 并在后续流程中, 传递给 Kolla-Ansible的参数

vim /etc/kolla/globals.yml
# 对以下行取消注释,并修改
# docker基础系统镜像默认,可以不取消注释,默认值就是这个
kolla_base_distro: "rocky"
# openstack版本默认,可以不取消注释,默认值就是这个
openstack_release: "zed"
# 管理接口ip,如果设置了高可用haproxy,此处为VIP(虚拟漂移IP),由keepalived提供高可用性,必须是管理网络中没有被使用的地址。如果不配置高可用,直接把enp0s9 IP写入
kolla_internal_vip_address: "192.168.56.200"
# 内部网络,管理网络的网卡,也用于主机之间的通信
network_interface: "enp0s9"
# 外部网络接口,连接外部网络的网卡,需要一个开启的,没有配置IP的网卡
neutron_external_interface: "enp0s3"
# 设置网络插件为openvswitch 默认
neutron_plugin_agent: "openvswitch"
# 关闭高可用haproxy,配合vip使用,不使用vip需要关闭这个
enable_haproxy: "no"
# 启用provider网络
enable_neutron_provider_networks: "yes"
# 设置虚拟化类型,这里为qemu,如果服务器支持硬件虚拟化请将此值改为kvm
nova_compute_virt_type: "kvm"
#存储部分,后端要ceph需另外配置
enable_cinder: "yes"
enable_cinder_backend_lvm: "yes"
cinder_volume_group: "cinder-volumes" 

# 检查配置
cat /etc/kolla/globals.yml|grep -v ^#|grep -v ^$

安装部署

  • 使用kolla的引导服务器部署依赖项

多节点安装只是把all-in-one修改为multinode,但是multinode里内容需要提前修改

kolla-ansible -i ./all-in-one bootstrap-servers
  • 提取拉取docker镜像

部署时候碰到部分组件重启失败问题,实际上只是镜像没拉下来

kolla-ansible -i ./all-in-one pull
  • 部署前检查
kolla-ansible -i ./all-in-one prechecks -vvv
  • 实际部署
kolla-ansible -i ./all-in-one deploy -vvv

部署完成可以通过对应的管理IP登录

使用OpenStack

  • 配置命令行
# 安装客户端
pip install python-openstackclient python-glanceclient python-neutronclient
# 生成openrc文件
kolla-ansible post-deploy
# 使用openrc文件
source /etc/kolla/admin-openrc.sh

# 添加环境变量
echo source /path/to/venv/bin/activate >> ~/.bashrc
echo source /etc/kolla/admin-openrc.sh >> ~/.bashrc

Skyline Dashboard