1. 前言
完成了《Ubuntu16手动安装OpenStack——XXX》系列,看上去,我们已经总结出了一套不错的文档。遵照文档,理论上就能成功安装更多的机器。但是,设想是美好的,而在实际安装过程中,又出现很多莫名其妙的报错。有些错误可以解决,很好;有些错误解决不了,那么整个环境就废了,需要重装系统。而且,整个安装流程非常复杂,难以保证每一步都不出错。
于是,郝同学决定寻找更加通用、更加方便的方法。树添同学给出建议:能不能使用docker来进行部署?经过讨论和搜索资料,发现这条道路确实可行,而且有OpenStack官方文档。
本文,就来研究一下使用Kolla安装OpenStack Queens版本的方法,架构采用最简单的all-in-one。
2. 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的正确姿势。
3. 环境
VirtualBox虚拟机一台,系统为ubuntu-16.04.4-server-amd64,4核8G内存40G存储,主机名为controller,eth0的IP为192.168.56.110,eth1为nat上网网卡,eth2为neutron服务提供网络。
4. 网络设置
1、切换到root用户sudo -i
2、vim /etc/network/interfaces
,设置网卡为:
1 | # This file describes the network interfaces available on your system |
3、启用网卡ifup eth2
5. 安装配置
主要参考OpenStack, Ansible, and Kolla on Ubuntu 16.04、kolla queens on centos7.4和Kolla-Ansible’s documentation!。
5.1. 安装依赖
1、安装并升级pip
1 | apt-get update |
2、安装依赖apt-get -y install python-dev libffi-dev gcc libssl-dev python-selinux
3、安装ansibleapt-get -y install ansible
4、vim /etc/ansible/ansible.cfg
,添加如下:
1 | line 10, add |
5.2. 安装docker
1、安装dockercurl -SSL https://get.docker.io | bash
2、为docker和kolla创建配置文件
1 | mkdir -p /etc/systemd/system/docker.service.d |
修改为:
1 | [Service] |
3、重启docker
1 | systemctl daemon-reload |
4、查看docker信息docker info
报错:
1 | docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?. |
5、重启dockersystemctl restart docker
报错:
1 | Failed to restart docker.service: Unit docker.service is not loaded properly: Invalid argument. |
6、手动启动docker/usr/bin/dockerd
报错:
1 | INFO[0000] libcontainerd: new containerd process, pid: 7629 |
7、查看docker的aufs挂载情况并取消挂载
1 | cat /proc/mounts | grep "docker" |
8、删除/var/lib/docker/目录下的文件并重启docker
1 | rm -rf /var/lib/docker/* |
9、再次查看docker信息docker info
5.3. 加速镜像拉取
参考Docker入门中的镜像加速器一节。
5.4. 安装Kolla-ansible
1、安装kolla-ansiblepip install kolla-ansible
报错:ImportError: cannot import name main,参考升级pip后出现ImportError: cannot import name main,编辑/usr/bin/pip文件,如下修改:
1 | # line 9, change |
报红: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文件中。此文件中的所有密码都是空白的,必须手动填写或运行随机密码生成器。
5.5. 配置globals.yml
1、查看globals.yml配置grep -vE '^$|^#' /etc/kolla/globals.yml
2、vim /etc/kolla/globals.yml
,如下修改:
1 |
|
kolla_internal_vip_address为192.168.56.120,它是一个和OpenStack宿主机内网连接网络(eth0 192.168.56.110)同一个网段的未使用IP。network_interface为eth0,意思是openstack内部网络使用eth0网卡。neutron_external_interface为eth2,意思是openstack的虚拟机外部网络使用eth2网卡。因为是在虚拟机中安装openstack,所以nova_compute_virt_type设置为qemu。
5.6. 部署
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 | apt-get install software-properties-common |
然后,重新编辑/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
6. 测试使用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
7. 初始化配置
1、执行init-runonce脚本. /usr/local/share/kolla-ansible/init-runonce
执行初始化之前,可以参考openstack 之 Kolla部署指南,设置一下外部网络。这样,就可以从路由器给虚拟机分配IP,安装完虚拟机就可以宿主机互相ping通。比如:
1 | EXT_NET_CIDR='192.168.56.0/24' |
这里配置的网络范围,对应globals.yml中配置的neutron_external_interface,也就是eth2网卡。
2、根据提示,创建实例
1 | openstack server create \ |
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
8. 后记
至此,使用kolla安装openstack成功。但是,我们还不知道实例能否正常使用。关于实例的访问和网络配置,放在下一篇文章中研究。
9. 书签
Install and configure OpenStack Ocata with Kolla as a standalone