OpenStack Kolla实践

购买国外vps

由于kolla中的image太庞大了,超过10G。而且存放镜像的国外服务器会被block掉,之前试了使用vps搭建pptp的VPN,但是速度只有小几百k。网络出现波动还会断开连接...

所以建议购买比较高性能的vps,在vps中下载好然后再拉回本地。之前购买了1G内存,20G硬盘的阿里北美vps,可惜由于性能原因,下载过程中导致了vps宕机。我查了半天错,以为是Kolla本身的问题。于是我购买了digitalocean的vps,选择2G内存,40G硬盘。可以按小时计费,这点比较好。

vps的带宽和CPU使用情况

build image

Kolla 依赖于以下几个主要组件

  • Ansible > 1.9.4, < 2.0
  • Docker > 1.10.0
  • docker-py > 1.7.0
  • python jinja2 > 2.6.0

几点说明:

  • 机器使用的是vmware虚拟机进行的测试。配置上使用 16G RAM, 4 CPU, 2 网卡的配置
  • 由于使用了 Docker,所以对于底层系统并还没什么要求,本文使用 CentOS 7 系统。
  • Kolla master 分支上使用的是 RDO master 上的源,打包极不稳定,时常会有 Bug 出现。所以本文使用的是 CentOS + 源码的安装方式

加入 Docker 的源

加入 EPEL 源

安装 Kolla 所需依赖

Docker 现在使用了 shared mount 功能,默认没有打开,需要手动修改 Docker 启动文件 /usr/lib/systemd/system/docker.service 的 MountFlags

启动 Docker 服务

下载 Kolla 代码并安装依赖

Build Docker Image

以下如果没有特别说明,所有的操作都是在 Kolla 项目的目录里进行
首先要先生成并修改配置文件

然后修改 /etc/kolla/kolla-build.conf 文件,它是用来控制 kolla build 过程的。修改后,其主要内容如下 :

目前使用mitaka 分支,master分支不稳定

接下来就是进行漫长的 build, 这个过程主要依赖机器性能和网速。如果快的话,20 多分钟就完成。如果有问题的话,会很久。不过依赖于 Docker Build 的 Cache 功能,就算重跑的话,之前已经 Build 好的也会很快完成。

参数中的 -p default 是指定了只 build 主要的 image, 包括 : mariadb, rabbitmq, cinder, ceilometer, glance, heat, horizon, keystone, neutron, nova, swift 等 . 这些可以只生成的 kolla-build.conf 里找到。

所有image全部下载完成之后,如图:

docker save image

由于Kolla的image数量太多,一个个保存太耗费时间,于是就写了个shell脚本

使用rsync拷贝到本地

拷贝如下条目,path自己改

编辑下面文件

输入密码

/etc/rsyncd.secrets 文件权限必须是600,创建好该文件后可以执行: chmod 600 /etc/rsyncd.secrets

如果开启了iptables防火墙,请将873端口加入防火墙允许规则

遇到报错

最后拷贝image到本地成功,速度也OK

docker load image

docker的镜像被拷贝回本地了。接下去就是把image load回来

同样,也写了shell脚本

然后docker images一下就发现镜像都OK了。

run container

globals.yml

依然是先修改配置文件,与 Deploy 相关的主要是两个配置文件 /etc/kolla/passwords.yml 和 /etc/kolla/globals.yml。他们为 ansible 提供一些变量的设定。主要需要修改的是 globals.yml 文件。修改后,其主要内容为 :

passwords.yml

这个密码文件可以使用工具自动生成,也可以手动输入;

但是手动输入需要注意格式,在:后需要空一格再输入;而且ssh_key也比较麻烦;
所以推荐使用工具自动生成 。
但是直接输入:

会提示找不到此命令。这也是官方文档坑的地方,改为:

prechecks

kolla 使用一个名为 kolla-ansible 的封装脚本,可以使用

来检查一个机器是否满足安装条件。

precheck在其他地方都没什么问题,在IP上会进行下面两步检查,这个IP需要是node之间同一网段的,并且还需要不能被使用的IP地址。

Deploy部署

使用

进行正式安装。

在deploy中,Kolla返回这个log,提示需要在外部的registry。但是all-in-one的安装并不需要registry,这个bother了我很久。

我在社区反馈了个bug

https://bugs.launchpad.net/kolla/+bug/1595128

思路如下:那么我在本地自建一个registry,把下载好的image全部pull到本地的registry。然后把Kolla的外部registry指向我本地的registry

奇怪的是,这个path貌似改不了,比如下载好的image tag是lokolla,这边查找的tag是kollaglue。即使我在/etc/kolla/kolla-build.conf中已经

这样编辑了

为了指向我的本地registry,在/etc/kolla/kolla-build.conf添加下面的条目

搭建本地registry

注意:kolla使用了4000端口

Kolla looks for the Docker registry to use port 4000. (Docker default is port 5000)

docker 暴露registry端口的方式

EXPOSE (incoming ports)

Dockefile在网络方面除了提供一个EXPOSE之外,没有提供其它选项。下面这些参数可以覆盖Dockefile的expose默认值:

编辑 /etc/sysconfig/docker

编辑 /etc/systemd/system/docker.service.d/kolla.conf

重启docker

在本地的registry如图所示

停止registry的命令

写了shell脚本自动化把image push到docker仓库(registry)中,为了满足报错的log,并进行了tag的转换(lokolla->kollaglue)

重新使用 ./tools/kolla-ansible deploy 来开始正式安装。

使用 ./tools/kolla-ansible post-deploy 来生成 /etc/kolla/admin-openrc.sh 文件用来加载认证变量。
最后container全部up起来

在浏览器上输入kollainternaladdress: "192.168.52.197"

域default,用户名密码在/etc/kolla/admin-openrc.sh中

登陆后的界面如下

这样就成功了,不过接下去还有很多“坑要踩”,趁着kolla项目代码量没上去还是值得好好研究一下的。容器化已经势不可挡了。

常见问题

  • 今天Kolla镜像又下载不了了。以为是网络问题。进入openstack-kolla的irc聊天组。大牛基本都在这里聊天,发现有公告,原来是服务器正在重建。

  • 如果在deploy中出现这个问题。在/etc/hosts中加入"127.0.0.1 localhost"即可

  • 有时端口号可能被占用也会在precheck中提示,通过端口号找到进程之后就可以用kill -9来杀死了

工具

在/root/kolla的目录下有几个工具,可以在你deploy到一半中断的时候把本机环境清理一下

版本变动

官网上说现在ansible版本>2.0也OK,但是我实际操作的时候首先precheck这里提示错误,deploy的时候也出错

作者简介:
蒋暕青@上海宽带技术及应用工程研究中心:SDN技术实践者,大四北上思博伦实习半年,现工作地点上海

--------------华丽的分割线------------------
本文系《SDNLAB原创文章奖励计划》投稿文章,该计划旨在鼓励广大从业人员在SDN/NFV/Cloud网络领域创新技术、开源项目、产业动态等方面进行经验和成果的文字传播、分享、交流。有意向投稿的同学请通过官方唯一指定投稿通道进行文章投递,投稿细则请参考《SDNLAB原创文章奖励计划》


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/17273.html
分享到:
相关文章
条评论

登录后才可以评论

蒋暕青 发表于16-07-01
1