kolla-ansible部署openstack

kolla-ansible部署openstack

1、简介

kolla是openstack官网开发一套基于docker部署的openstack工具,指在为openstack提供生产级别,开箱即用的交付能力

kolla的基本思想是一切都是容器,所有服务基于docker运行,并且保证了一个容器跑一个服务

kolla分为2个项目

  • kolla 制作部署openstack所需的docker镜像

  • kolla-ansible 基于ansible+docker部署openstack

使用kolla部署openstack的优势:

  • 基于ansible和docker,部署快速稳定

  • 一个容器一个服务,可以将openstack服务控制到很小的粒度

  • 可以以组件为单位进行升级和回滚,例如可通过kolla-ansible -i /path/to/inventory -t nova upgrade 指令完成nova的快速升级

  • 目前 kolla 项目在社区内的热度相对较高,社区支持更好

2、环境准备

主机名 网卡名/类型 ip地址
openstack01 ens33 nat
ens36 nat
ens33 192.168.50.41
openstack02 ens33 nat
ens36 nat
ens33 192.168.50.42
openstack03 ens33 nat
ens36 nat
ens33 192.168.50.43

3、部署

1、基础环境准备(所有节点配置)

1、配置主机名

[root@localhost ~]# hostnamectl set-hostname openstack01
[root@localhost ~]# bash

2、主机映射

# 在部署节点上添加所有节点的hosts
192.168.50.40 openstack01
192.168.50.41 openstack02
192.168.50.42 openstack03
 
# 非部署节点只需要添加自己的主机名解析即可,如下为openstack02的配置
192.168.50.41 openstack02

3、配置免密登录

[root@openstack01 ~]# ssh-keygen
[root@openstack01 ~]# ssh-copy-id openstack01
[root@openstack01 ~]# ssh-copy-id openstack02
[root@openstack01 ~]# ssh-copy-id openstack03

4、关闭防火墙和selinux

[root@openstack01 ~]# systemctl disable --now firewalld
[root@openstack01 ~]# setenforce 0
[root@openstack01 ~]# sed -i 's/SELINUX=/SELINUX=disabled/g' /etc/selinux/config

5、设置yum源

我使用的是欧拉,这一步可以不做,其他的linux需要安装epel源

[root@openstack01 ~]# yum install epel-release -y

6、安装docker

因为kolla-ansible是将各个组件部署在容器内的,所以需要安装docker

[root@openstack01 ~]# dnf install -y yum-utils device-mapper-persistent-data lvm2 -y
[root@openstack01 ~]#  wget -O /etc/yum.repos.d/docker-ce.repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo
[root@openstack01 ~]# yum install docker-ce -y

如果是欧拉系统,这里就直接yum install docker -y就可以了,欧拉的源自带了docker

7、配置时间同步

yum -y install chrony
systemctl enable chronyd --now
chronyc sources

2、部署kolla-ansible

1、安装相关的依赖

需要在每个节点上执行

dnf install git python3-devel libffi-devel gcc openssl-devel python3-libselinux -y

2、部署kolla-ansible

启用python虚拟环境

虚拟机本地有python版本,启动了一个虚拟环境后,在这个里面安装对应的python版本,跟宿主机的就没有任何的关联

[root@openstack01 ~]# python3 -m venv .venv/kolla
[root@openstack01 ~]# source ~/.venv/kolla/bin/activate 

后续所以的操作在这个虚拟环境中执行,不会污染宿主机

安装kolla-ansible

# pip下载地址改为清华源,下载速度回非常的快
# 所有节点配置,提高速度
(kolla) [root@openstack01 ~]# pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 更新pip,保持最新的
(kolla) [root@openstack01 ~]# pip3 install -U pip

# 安装指定的版本的ansible-core,koll-ansible对ansible版本要求非常的严格
(kolla) [root@openstack01 ~]# pip3 install 'ansible-core>=2.15,<2.16.99'

# 安装kolla-ansible 主工具
(kolla) [root@openstack01 ~]# pip3 install kolla-ansible
 
# 安装galaxy依赖,因为运行需要很多的ansible角色,会自动的下载所有必须的ansible角色
# vi /root/.venv/kolla/share/kolla-ansible/requirements.yml
# 官方仓库没有 stable/2024.1 这个分支 更新了,之前2024年还有的,现在没有,更改为unmaintained 2024.1
(kolla) [root@openstack01 ~]# kolla-ansible install-deps

# 会安装非常多的角色在/root/.ansible/目录下面,是从网上拉取的,不行的话,就开梯子

下载kolla-ansible源码

(kolla) [root@openstack01 ~]# git clone https://github.com/openstack/kolla-ansible.git
(kolla) [root@openstack01 kolla-ansible]# git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/stable/2024.2
  remotes/origin/stable/2025.1
  remotes/origin/stable/2025.2
  remotes/origin/unmaintained/2024.1
(kolla) [root@openstack01 kolla-ansible]# git checkout unmaintained/2024.1 


生成配置文件

(kolla) [root@openstack01 kolla-ansible]# mkdir /etc/kolla
(kolla) [root@openstack01 kolla-ansible]# cd 
(kolla) [root@openstack01 ~]# cp kolla-ansible/etc/kolla/* /etc/kolla/
(kolla) [root@openstack01 ~]# cp kolla-ansible/ansible/inventory/multinode /etc/kolla

# globals.yml全局配置文件,告诉怎么安装opensatck
(kolla) [root@openstack01 ~]# ls /etc/kolla/
globals.yml  multinode  passwords.yml

# multinode 主机清单

# passwords.yml 保存 OpenStack 所有组件的密码、密钥、令牌

修改主机清单文件

(kolla) [root@openstack01 ~]# vim /etc/kolla/multinode
[control]
openstack01   # 我的环境是一个控制节点
 
[network]
openstack01

[compute]
           # 2个计算节点
openstack02
openstack03
 
[monitoring]
openstack01
 
[storage]
openstack01

修改globals.yml文件

(kolla) [root@openstack01 kolla]# grep -Ev "^$|#" globals.yml 
---
workaround_ansible_issue_8743: yes
node_config: "/etc/kolla"
kolla_base_distro: "rocky"
openstack_release: "2024.1"
node_custom_config: "{{ node_config }}/config"
kolla_internal_vip_address: "192.168.50.41" 
docker_registry: quay.nju.edu.cn
network_interface: "ens33" 
neutron_external_interface: "ens36" 
neutron_plugin_agent: "openvswitch"
enable_openstack_core: "yes"
enable_hacluster: "no"
enable_haproxy: "no"
enable_keepalived: "{{ enable_haproxy | bool }}"
enable_keystone: "{{ enable_openstack_core | bool }}"
enable_mariadb: "yes"
enable_memcached: "yes"
enable_neutron: "{{ enable_openstack_core | bool }}"
enable_nova: "{{ enable_openstack_core | bool }}"
enable_rabbitmq: "{{ 'yes' if om_rpc_transport == 'rabbit' or om_notify_transport == 'rabbit' else 'no' }}"
enable_cinder: "no"
cinder_volume_group: "cinder-volumes"
nova_compute_virt_type: "kvm"

选项详解:

  • kolla_base_distro:openstack的组件镜像使用的基础镜像

  • openstack_release:openstack版本

  • node_custome_config: 自定义配置文件的路径

  • kolla_internal_vip_address:在controller多机部署的场景,多个controller会开启haproxy+keepalived实现负载均衡,这里需要配置为keepalived的 - vip, 如果是单controller的场景,这里的地址为controller节点的ip地址,此时需要设置enable_haproxy选项为no

  • docker_registry:默认情况下,openstack的镜像会从quay.io官方仓库拉取,速度很慢,这里使用的是国内的镜像站

  • docker_namespace:指定镜像仓库中用于存储这些镜像的namespace

  • network_interface:管理网络的接口,内部通信的用的

  • neutron_external_interface:neutron使用的外部网络的接口, 此接口不应该配置ip地址

  • neutron_plugin_agent:指定neutron使用的网络插件

  • enable_openstack_core:是否部署openstack的核心服务,此项应为yes

  • enable_hacluster:是否开启虚拟机的故障迁移(当虚拟机所在物理机出现故障时,自动迁移虚拟机)

  • enable_haproxy:如果controller有多个节点,这里应该设置为yes,同时kolla_internal_vip_address应该设置为vip地址

  • enble_cinder:是否开启cinder

  • enable_cinder_backend_nfs:指定cinder后端存储为nfs,如果开启了cinder,则必须指定一种backend,支持lvm、nfs、ceph等

  • cinder_volume_group:此项只在cinder为yes且cinder的存储驱动设置为lvm时有效

  • nova_compute_virt_type:指定nova compute所使用的虚拟化类型

填充密码文件

# 会将这个文件的权限改成只有root能访问
(kolla) [root@openstack01 kolla]# kolla-genpwd 
WARNING: Passwords file "/etc/kolla/passwords.yml" is world-readable. The permissions will be changed.

3、配置所有节点python依赖

kolla-ansible部署openstack,在所有openstack节点上需要部署相应的python依赖包。这些依赖包可以从部署节点上获得:

(kolla) [root@openstack01 ~]# pip3 freeze > /tmp/requirements.txt

需要删除这个文件的2行,其他节点不需要安装ansible,kolla-ansible

ansible-core==2.15.12
kolla-ansible==18.0.0
(kolla) [root@openstack01 ~]# scp /tmp/requirements.txt openstack02:/tmp
(kolla) [root@openstack01 ~]# scp /tmp/requirements.txt openstack03:/tmp

需要说明的是,这些包需要在所有节点安装,包括控制节点。且不可以安装在python虚拟环境中:

# 退出虚拟环境
(kolla) [root@openstack01 ~]# deactivate 

[root@openstack01 ~]# pip3 install -r /tmp/requirements.txt
[root@openstack02 ~]# pip3 install -r /tmp/requirements.txt
[root@openstack03 ~]# pip3 install -r /tmp/requirements.txt

4、执行koll-ansible部署

(kolla) [root@openstack01 ~]# cd /etc/kolla
# 安装依赖
(kolla) [root@openstack01 kolla]# kolla-ansible -i ./multinode bootstrap-servers

# 前置检查
(kolla) [root@openstack01 kolla]# kolla-ansible -i ./multinode prechecks
# 拉取镜像
(kolla) [root@openstack01 kolla]# kolla-ansible -i ./multinode pull
# 执行部署,会有一些小报错,没有问题的
(kolla) [root@openstack01 kolla]# kolla-ansible -i ./multinode deploy
# 部署完后执行
(kolla) [root@openstack01 kolla]# kolla-ansible -i ./multinode post-deploy

拉取镜像的时候会非常的慢,我们使用脚本自行拉取

[root@openstack01 kolla]# cat images.sh 
docker pull quay.nju.edu.cn/openstack.kolla/neutron-server:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/neutron-dhcp-agent:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/neutron-metadata-agent:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/neutron-openvswitch-agent:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/neutron-l3-agent:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/heat-api:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/heat-engine:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/heat-api-cfn:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/nova-novncproxy:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/nova-conductor:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/nova-ssh:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/nova-api:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/keystone-fernet:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/nova-scheduler:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/keystone:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/keystone-ssh:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/horizon:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/placement-api:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/kolla-toolbox:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/openvswitch-db-server:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/openvswitch-vswitchd:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/mariadb-server:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/mariadb-clustercheck:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/cron:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/keepalived:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/memcached:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/haproxy:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/fluentd:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/glance-api:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/rabbitmq:2024.1-rocky-9


计算节点的脚本

[root@openstack02 ~]# cat images.sh 
docker pull quay.nju.edu.cn/openstack.kolla/nova-compute:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/neutron-openvswitch-agent:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/openvswitch-db-server:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/openvswitch-vswitchd:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/nova-libvirt:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/kolla-toolbox:2024.1-rocky-9
docker pull quay.nju.edu.cn/openstack.kolla/fluentd:2024.1-rocky-9

拉取后再去执行部署

3、登录dashabord

登录之前我们得先知道密码,而密码文件就在/etc/kolla/clouds.yaml这里面会有全部的密码

admin-openec.sh这里面会有admin的密码,我们查看这个文件就可以

# 部署完后,会有非常多的配置文件

[root@openstack01 kolla]# ls
admin-openrc.sh         glance-api    horizon          kolla-toolbox       neutron-l3-agent           nova-api-bootstrap   openvswitch-db-server  public-openrc-system.sh
admin-openrc-system.sh  globals.yml   images.sh        mariadb             neutron-metadata-agent     nova-cell-bootstrap  openvswitch-vswitchd   rabbitmq
clouds.yaml             heat-api      keystone         memcached           neutron-openvswitch-agent  nova-conductor       passwords.yml
cron                    heat-api-cfn  keystone-fernet  multinode           neutron-server             nova-novncproxy      placement-api
fluentd                 heat-engine   keystone-ssh     neutron-dhcp-agent  nova-api                   nova-scheduler       public-openrc.sh

4、进行初始化

# 安装python-openstackclient
(kolla) [root@openstack01 ~]# pip3 install python-openstackclient
# 执行初始化
. kolla-ansible/tools/init-runonce

img

posted @ 2026-04-20 21:05  乔的港口  阅读(14)  评论(0)    收藏  举报