Ubuntu16使用Kolla安装OpenStack

文章目录
  1. 1. 前言
  2. 2. Kolla简介
  3. 3. 环境
  4. 4. 网络设置
  5. 5. 安装配置
    1. 5.1. 安装依赖
    2. 5.2. 安装docker
    3. 5.3. 加速镜像拉取
    4. 5.4. 安装Kolla-ansible
    5. 5.5. 配置globals.yml
    6. 5.6. 部署
  6. 6. 测试使用openstack
  7. 7. 初始化配置
  8. 8. 后记
  9. 9. 书签

前言

完成了《Ubuntu16手动安装OpenStack——XXX》系列,看上去,我们已经总结出了一套不错的文档。遵照文档,理论上就能成功安装更多的机器。但是,设想是美好的,而在实际安装过程中,又出现很多莫名其妙的报错。有些错误可以解决,很好;有些错误解决不了,那么整个环境就废了,需要重装系统。而且,整个安装流程非常复杂,难以保证每一步都不出错。

于是,小编决定寻找更加通用、更加方便的方法。小伙子树添给出建议:能不能使用docker来进行部署?经过讨论和搜索资料,发现这条道路确实可行,而且有OpenStack官方文档。

本文,就来研究一下使用Kolla安装OpenStack Queens版本的方法,架构采用最简单的all-in-one。

Kolla简介

Kolla是OpenStack社区“Big Tent”开发模式下的项目,该项目由思科于2014年9月提出。Kolla的优势和使用场景体现在如下几个方面:

  • 原子性升级或者回退OpenStack部署。
  • 基于组件升级OpenStack。
  • 基于组件回退OpenStack。

Kolla为OpenStack的部署提供了有效、快捷、方便、易于维护、方便版本更新与回退的方案。

具体而言,Kolla的最终目标是为OpenStack的每一个服务都创建一个对应的Docker镜像,通过Docker镜像将升级的粒度减小到服务级别,从而在升级时对OpenStack的影响降到最小,并且一旦升级失败,也很容易回滚。升级只需要三步:拉取新版本的容器镜像,停止老版本的容器服务,启动新版本的容器。回滚也不需要重新安装包,直接启动老版本的容器服务就行,非常方便。

Kolla可以使用Ansible、Kubernetes或者Mesos来部署OpenStack环境,Kolla负责容器化OpenStack各个服务;后者则负责部署这些容器,搭建出一个可用的OpenStack环境。来实现基于Docker容器的OpenStack服务全生命周期管理,如安装、升级、回滚、迁移等。在部署Docker容器时,默认的网络配置都是Host模式。因为Kolla的Docker镜像粒度很小,它针对每个OpenStack服务都有特定的镜像,所以我们也可以通过Docker命令来操作某个具体的OpenStack服务。

Kolla项目及其相关的其他项目如下:

  • Kolla项目,负责docker build OpenStack每个服务,如nova-compute容器等;
  • Kolla-Ansible项目,使用Ansible部署这些容器,搭建OpenStack环境;
  • Kolla-Kubernetes项目,使用Kubernetes部署这些容器,搭建OpenStack环境;
  • Kolla-Mesos项目,使用Mesos部署这些容器,搭建OpenStack环境。

上述Kolla简介摘自微信分享DockOne微信分享(一二八):容器化部署OpenStack的正确姿势

环境

VirtualBox虚拟机一台,系统为ubuntu-16.04.4-server-amd64,4核8G内存40G存储,主机名为controller,eth0的IP为192.168.56.110,eth1为nat上网网卡,eth2为neutron服务提供网络。

网络设置

1、切换到root用户
sudo -i

2、vim /etc/network/interfaces,设置网卡为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.56.110
netmask 255.255.255.0

auto eth1
iface eth1 inet dhcp

auto eth2
iface eth2 inet manual
up ifconfig $IFACE 0.0.0.0 up
up ifconfig $IFACE promisc

3、启用网卡
ifup eth2

安装配置

主要参考OpenStack, Ansible, and Kolla on Ubuntu 16.04kolla queens on centos7.4Kolla-Ansible’s documentation!

安装依赖

1、安装并升级pip

1
2
3
apt-get update
apt-get install python-pip
pip install --upgrade pip

2、安装依赖
apt-get -y install python-dev libffi-dev gcc libssl-dev python-selinux

3、安装ansible
apt-get -y install ansible

4、vim /etc/ansible/ansible.cfg,添加如下:

1
2
3
4
5
line 10, add
[defaults]
host_key_checking=False
pipelining=True
forks=100

安装docker

1、安装docker
curl -SSL https://get.docker.io | bash

2、为docker和kolla创建配置文件

1
2
mkdir -p /etc/systemd/system/docker.service.d
vim /etc/systemd/system/docker.service.d/kolla.conf

修改为:

1
2
[Service]
MountFlags=shared

3、重启docker

1
2
systemctl daemon-reload
systemctl restart docker

4、查看docker信息
docker info
报错:

1
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.

5、重启docker
systemctl restart docker
报错:

1
2
Failed to restart docker.service: Unit docker.service is not loaded properly: Invalid argument.
See system logs and 'systemctl status docker.service' for details.

6、手动启动docker
/usr/bin/dockerd
报错:

1
2
3
INFO[0000] libcontainerd: new containerd process, pid: 7629 
WARN[0000] containerd: low RLIMIT_NOFILE changing to max current=1024 max=1048576
FATA[0001] Error starting daemon: error initializing graphdriver: "/var/lib/docker" contains several valid graphdrivers: aufs, overlay2; Please cleanup or explicitly choose storage driver (-s <DRIVER>)

7、查看docker的aufs挂载情况并取消挂载

1
2
cat /proc/mounts | grep "docker"
umount /var/lib/docker/aufs

8、删除/var/lib/docker/目录下的文件并重启docker

1
2
rm -rf /var/lib/docker/*
systemctl start docker

9、再次查看docker信息
docker info

加速镜像拉取

使用 Docker 的时候,需要经常从官方获取镜像,但是由于显而易见的网络原因,拉取镜像的过程非常耗时,严重影响使用 Docker 的体验。因此DaoCloud推出了加速器工具解决这个难题,通过智能路由和缓存机制,极大提升了国内网络访问 Docker Hub 的速度,目前已经拥有了广泛的用户群体,并得到了 Docker 官方的大力推荐。

1、访问DaoCloud官网,注册一个账号。

2、访问配置 Docker 加速器,可以获得一个专属加速地址(每次访问都会获得不同的地址)。

3、参考Docker 加速器,创建或修改 /etc/docker/daemon.json,内容为:

1
2
3
4
5
6
{
"registry-mirrors": [
"http://2fd0f33c.m.daocloud.io"
],
"insecure-registries": []
}

4、重启docker

1
2
systemctl daemon-reload
systemctl restart docker

PS:也可以使用阿里云的镜像加速器

安装Kolla-ansible

1、安装kolla-ansible
pip install kolla-ansible

报错:ImportError: cannot import name main,参考升级pip后出现ImportError: cannot import name main,编辑/usr/bin/pip文件,如下修改:

1
2
3
4
# line 9, change
from pip import __main__
if __name__ == '__main__':
sys.exit(__main__._main())

报红:oslo-config 6.4.0 has requirement PyYAML>=3.12, but you’ll have pyyaml 3.11 which is incompatible.忽略。

2、拷贝globals.yml和passwords.yml到/etc/kolla目录
cp -r /usr/local/share/kolla-ansible/etc_examples/kolla /etc/

3、拷贝all-in-one和multinode清单文件到当前目录
cp /usr/local/share/kolla-ansible/ansible/inventory/* .

4、生成kolla密码
kolla-genpwd
我们部署中使用的密码存储在/etc/kolla/passwords.yml文件中。此文件中的所有密码都是空白的,必须手动填写或运行随机密码生成器。

配置globals.yml

1、查看globals.yml配置
grep -vE '^$|^#' /etc/kolla/globals.yml

2、vim /etc/kolla/globals.yml,如下修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# line 15,uncomment
kolla_base_distro: "centos"
# line 18,uncomment
kolla_install_type: "binary"
# line 21,uncomment and change
openstack_release: "queens"
# line 31,change
kolla_internal_vip_address: "192.168.56.120"
# line 85,uncomment and change
network_interface: "eth0"
# line 100,uncomment and change
neutron_external_interface: "eth2"
# line 331,uncomment
designate_backend: "bind9"
designate_ns_record: "sample.openstack.org"
# line 340,uncomment and change
nova_compute_virt_type: "qemu"
# other
tempest_image_id:
tempest_flavor_ref_id:
tempest_public_network_id:
tempest_floating_network_name:

因为是在虚拟机中安装openstack,所以nova_compute_virt_type设置为qemu。

部署

1、初始化
kolla-ansible -i ./all-in-one bootstrap-servers
报错:

查找资料,猜测是ansible版本问题。
(1)ansible --version,查看ansible版本为2.0.0.2,确实非常低。
(2)apt install ansible,提示已经是最新版本。
(3)更新apt库,然后重装ansible

1
2
3
4
apt-get install software-properties-common
apt-add-repository ppa:ansible/ansible
apt-get update
apt-get install ansible

然后,重新编辑/etc/ansible/ansible.cfg,再次执行初始化命令,问题解决。时间比较久,请耐心等待。

2、预检查
kolla-ansible -i ./all-in-one prechecks

3、拉取镜像
kolla-ansible -i ./all-in-one pull
这一步的时间特别久,挺耐心等待。如果拉取失败,就多尝试几次。

4、查看镜像
docker images

5、部署
kolla-ansible -i ./all-in-one deploy

测试使用openstack

1、安装openstack客户端
pip install python-openstackclient python-glanceclient python-neutronclient --ignore-installed

2、生成admin-openrc.sh等
kolla-ansible post-deploy

3、使admin环境生效
source /etc/kolla/admin-openrc.sh

4、查看计算服务
openstack compute service list

初始化配置

1、执行init-runonce脚本
. /usr/local/share/kolla-ansible/init-runonce

2、根据提示,创建实例

1
2
3
4
5
6
openstack server create \
--image cirros \
--flavor m1.tiny \
--key-name mykey \
--nic net-id=e52fe099-c798-4ffd-8c3c-06de424a9de7 \
demo1

3、访问horizon服务
curl 192.168.56.120 -L

在浏览器访问 http://192.168.56.120 ,使用admin账号登录,密码在passwords.yml文件中查看。
less /etc/kolla/passwords.yml | grep keystone_admin_password

后记

至此,使用kolla安装openstack成功。但是,我们还不知道实例能否正常使用。关于实例的访问和网络配置,放在下一篇文章中研究。

书签

Kolla’s documentation!

Kolla让OpenStack部署更贴心

Kolla安装Ocata单节点

kolla部署openstack ocata版

Install and configure OpenStack Ocata with Kolla as a standalone

Kolla OpenStack系统视频课程