Skip to the content.

2021/4/27

Kolla Ansible

一、简介

kolla 的使命是为 openstack云平台提供生产级别的、开箱即用的交付能力。kolla 的基本思想是一切皆容器,将所有服务基于Docker运行, 并且保证一个容器只跑一个服务(进程),做到最小粒度的运行docker。 kolla要实现openetack部署总体上分为两步,第一步是制作docker镜像, 第二步是编排部署。 因此,kolla 项目又被分为两个小项目:kolla、kolla-ansible。

1. kolla 的优势

kolla 的优势主要得益于容器技术,得益于成熟的部署工具 ansible 和 docker,部署快速且稳定。 一个容器只跑一个服务,所以能将openstack服务控制到很小的粒度。 可以以组件为单位进行升级和回滚,例如升级nova组件,使用kolla-ansible -i /path/to/inventory -t nova命令即可。 kolla 采用一切皆容器的基本思想,所以只需操作系统与docker兼容,从而规避了很多安装包依赖冲突的问题。 目前kolla项目在社区内的热度相对较高,社区支持更好。 脚本可以重复执行,可以组件进行卸载或重新配置;

2.kolla 的缺点

完全依赖于docker ,docker的不稳定性会给整个环境带来巨大的灾难,不过目前docker已经问题很少了。 使用kolla部署好云平台后,给开发的debug和运维的故障排查会带来更多的复杂度,这个问题也可能通过写一个简单的client解决。

3.kolla-ansible 版本

https://releases.openstack.org/teams/kolla.html

OpenStack Release Kolla version Kolla-ansible Kolla-cli
Victoria 11.0.0 11.0.0  
Ussuri 10.2.0 10.1.0 10.0.0 10.2.0 10.1.0 10.0.0 10.0.0

4.Host OS Support Ansible

ubuntu版本 kolla-ansible 版本 openstack 版本 libvirt/qemu ansible
20.04 Focal/18.04 Bionic 11.0.0 victoria 6.0.0/4.2 2.9.19
18.04 Bionic 10.2.0 ussuri 6.0.0/4.2 2.9.19

u版openstack只支持ubuntu18.04, v版openstack支持ubuntu18.04和20.04, 详见:

代码:https://github.com/openstack/kolla-ansible/blob/stable/ussuri/ansible/roles/prechecks/vars/main.yml

代码提交记录:https://review.opendev.org/c/openstack/kolla-ansible/+/699443

u版在ubuntu 20.04上执行prechecks脚本时,报如下错误: error.png

如果忽略此错误,deploy脚本能执行成功,并且openstack基础功能测试通过。但是不确定有没有其余未知问题。

因此建议,在ubuntu18.04 bionic版本上部署u版openstack。

5. openstack 容器集

分类 服务
database control galera/mariadb/mongodb
messaging control rabbitmq
high availability control HAProxy/keepalived
OpenStack interface keystone/glance-api/nova-api/ceilometer-api/heat-api
OpenStack control glance-controller(glance-registry)/nova-controller(nova-conductor/nova-scheduler/metadata-service)/cinder-controller/ neutron-controller(neutron-server)/ceilometer-controller(ceilometer-alarm/ceilometer-base/ceilometer-central/ ceilometer-collector/ceilometer-notification)/heat-controller(heat-engine)
OpenStack compute operation nova-compute/nova-libvirt/neutron-agents-linux-bridge/neutron-agents-ovs
OpenStack network operation dhcp-agent/l3-agent/metadata-agent/lbaas-agent/fwaas-agent
OpenStack storage operation Cinder/Swift(swift-account/swift-base/swift-container/swift-object/swift-proxy-server)
cache service redis/memcached

二、kolla部署openstack

1. 准备操作系统基础环境

包括: 安装系统基础环境依赖包、 惯例开启 NTP 时间同步服务、 惯例关闭防火墙服务、 惯例禁用宿主机的 Libvirt 服务: 大多数操作系统会默认启动 Libvirt,但使用 Kolla 来部署 OpenStack 的话,Libvirt 应该在容器中运行并管理虚拟机,为了避免冲突与执行报错,所以宿主机的 Libvirt 需要被关闭或者卸载libvirt相关安装包

apt remove -y `apt list --installed | grep libvirt | awk '{print $1}'`
dpkg -P `dpkg -l | grep libvirt | awk '{print $2}'`

2.准备 Python 基础环境

安装python、ansible以及配置文件

3.准备 Docker 基础环境

安装docker

4.安装 kolla & kolla-ansible

5.Kolla Build Images

建议使用 Kolla 在本地构建镜像,并且搭建 Local Registry。

6.Deploy All-in-One OpenStack

可以把 Kolla-ansible 看作是 Kolla 对 Ansible 的封装,实现了大量的 Play 和自定义模块。

Kolla-ansible 同样通过提供一个完整的 Playbook 来实现脚本自动化,在源码目录 inventory 下还提供了 all-in-one 和 multihost 两种主机清单。单点部署的话,一般不需要多做修改,直接使用 all-in-one 清单是个不错的选择。但如果你希望进行多节点部署,可以通过修改 multihost 清单中的主机分组来达到定制化分布式部署架构的目的。

NOTE:进行多节点部署,还需要部署 Local Docker Register 服务器,搭建 Docker 私有仓库,详细请浏览: https://docs.openstack.org/kolla-ansible/latest/user/multinode.html

Tips: 多节点部署时,需要保证管理节点和各主机之间能够使用 SSH 免密登陆。

Step 1. 自动生成随机密码来填充 passwords.yml 项目


#### Step 2. 处理 bootstrap servers 所需要的依赖

```kolla-ansible -i ~/all-in-one bootstrap-servers```

#### Step 3. 部署环境预检查

```kolla-ansible -i ~/all-in-one prechecks```

**Tips:** 做 `prechecks` 前需要完成 `kolla-genpwd`

#### Step 4. 正式开始 Deploy:

kolla-ansible -i ~/all-in-one pull// 拉镜像,建议先拉完全部镜像再部署 kolla-ansible -i ~/all-in-one deploy

选项 -i 指定主机清单,这和 Ansible 的用法是一致的。
成功 Deploy 之后,查看 Containers 状态:

**Tips:** Horizon 通常是最后部署的一个。

#### Step 5. 检验 & 使用

生成 admin-openrc.sh 文件:用于导入 Keystone Auth 环境变量

kolla-ansible post-deploy ll /etc/kolla/admin-openrc.sh

执行`init-runonce`脚本,
初始化运行环境:会自动执行下列操作

Creating glance image. Configuring neutron. Generating ssh key. Configuring nova public key and quotas.

**NOTE:** 如果你希望 External Network 正常运行,还需要编辑 init-runonce 初始化脚本中的网络配置,设定为 eth1 的网络元素。

```source /etc/kolla/admin-openrc.sh
./init-runonce

启动实例,验证环境:

openstack server create \
--image cirros \
--flavor m1.tiny \
--key-name mykey \
--network demo-net \
demo1

Step 6. 销毁/重新配置

NOTE: 如果你希望彻底清理完部署好的环境,只需执行下列指令。

kolla-ansible destroy -i all-in-one --yes-i-really-really-mean-it
//重新配置容器组件
kolla-ansible -i all-in-one reconfigure -t nova
//清理kolla ansible集群
kolla-ansible destroy --include-images --yes-i-really-really-mean-it
//停止部署节点容器
kolla-ansible stop
#或者
[root@kolla ~]# cd /usr/share/kolla-ansible/tools/
[root@all tools]# ./cleanup-containers
[root@all tools]# ./cleanup-host

Note: 修改docker容器里的配置文件 直接修改/etc/ansible/nova下面的配置,然后重启容器即可。

查看容器信息和log

docker inspect <container>
docker logs -f <container>