kolla项目起源于TripleO项目,聚焦于使用Docker容器部署OpenStack服务。该项目由Cisco于2014年9月提出,是OpenStack 社区Big Tent开发模式下的孵化项目。本文是接着上一篇 《OpenStack Kolla探秘》 ,我们继续进行下一步探秘。

一.Kolla简介

OpenStack Kolla项目是一个支持Openstack服务以容器的方式部署,借助ansible部署工具可以简单的扩展到多个节点。同时,又借助于使用 heat 来编排 Kolla 集群。

同时,我们也可以把 Kolla 镜像注册到一个内部的 Hub,并通过 Kubernetes(k8s)等工具来管理。

目前,Kolla提供的镜像支持部署如下OpenStack项目:

  • Aodh
  • Ceilometer
  • Cinder
  • Designate
  • Glance
  • Gnocchi
  • Heat
  • Horizon
  • Ironic
  • Keystone
  • Magnum
  • Mistral
  • Murano
  • Nova
  • Neutron
  • Swift
  • Tempest
  • Zaqar

以及这些基础设施组件:

• Ceph implementation for Cinder, Glance and Nova

• Openvswitch and Linuxbridge backends for Neutron

• MongoDB as a database backend for Ceilometer and Gnocchi

• RabbitMQ as a messaging backend for communication between services.

• HAProxy and Keepalived for high availability of services and their endpoints.

• MariaDB and Galera for highly available MySQL databases

体验Kolla项目的第一步是搭建一个简单的开发环境,搭建all-in-one环境参考官方的doc如下:

http://docs.openstack.org/developer/kolla/quickstart.html

二.Kolla部署

1.部署kolla的方式不限以下几种

  • 裸机部署
  • 使用heat
  • 使用vagrant

这里,我们直接在OS上部署 Kolla 里面的docker镜像来搭建一个OpenStack开发测试环境,按照官网文档的系统配置如下(我使用的是一台虚拟机):

  • 2 (or more) network interfaces
  • At least 8gb main memory
  • At least 40gb disk space

2.安装备注:最好,请在科学上网的环境下进行如下操作,你懂的。

安装epel源

# yum install -y epel-release

安装pip

# yum install -y python-pip

下载kolla源码

# git clone https://git.openstack.org/openstack/kolla

安装kolla

# pip install kolla/
pip 安装kolla失败,修改pip源,详见  http://www.chenshake.com/openstack-project-series-2-kolla/
或先安装相关依赖包,如下。我就是这样解决的。

安装相关依赖包

# yum install -y python-devel libffi-devel openssl-devel gcc

安装ansible,版本不要超过2.0.0

# pip install -U ansible==1.9.4

安装docker

# curl -sSL https://get.docker.io | bash  

curl: (52) Empty reply from server 出现这个问题。安装完其他的可以在尝试。
安装完docker后,需要启动: #service docker start   否则 kolla-build 会失败。

安装tox

# pip install -U tox

安装openstackclient

# pip install -U python-openstackclient

生成kolla-build.conf

# tox -egenconfig

拷贝配置文件到/etc目录下

# cp -rv etc/kolla /etc/

下面,开始构建docker image和ansible执行部署。构建docker images(时间会较长)

# kolla-build --base centos --type source

Build 完成之后,查看所有已经 build 好的镜像。

# docker images

修改全局配置文件

# vim /etc/kolla/globals.yml 
    kolla_install_type: "source"
    kolla_internal_address: "10.10.10.213"
    network_interface: "eth0"
    neutron_external_interface: "eth1"

一键安装

# kolla-ansible deploy

OpenStack部署成功后,在部署节点运行下面的命令创建一个openrc文件/etc/ kolla/admin-openrc.sh。或查看tools/openrc-example。

# kolla-ansible post-deploy

之后,创建一个openrc文件,用于初始化一个glance image和neutron环境。

# source /etc/kolla/admin-openrc.sh
# kolla/tools/init-runonce

如果是multinode,还需要依赖docker-registry。如何构建docker私有仓库,可以参考如下链接:

http://docs.openstack.org/developer/kolla/quickstart.html http://dockerpool.com/static/books/docker_practice/repository/local_repo.html

三.Kolla使用

1.OpenStack Docker Images

本地Build Image,因为远程的pull image 速度太慢 而且 Kolla 社区不是每个commit修改都把image build一遍,所以本地build image是开发最好的选择。推荐使用source方式build。

Docker images:

https://hub.docker.com/u/kollaglue/

image building guide:

http://docs.openstack.org/developer/kolla/image-building.html

Docker Hub:

https://docs.docker.com/engine/userguide/containers/dockerimages/

2. 相关技巧

  • tools/cleanup-containers:可用于从系统中移除部署的容器
  • tools/cleanup-host:可用于移除由于残余网络变化引发的docker启动的neutron-agents主机
  • tools/cleanup-images:可用于从本地缓存中移除所有的docker image

3.查询OpenStack docker image使用docker ps 可以查看对应openstack 所有服务的容器。当前Kolla项目在Kollaglue repo提供了以下服务的docker镜像。

# docker search kollaglue
NAME                                   DESCRIPTION   STARS     OFFICIAL   AUTOMATED
kollaglue/centos-rdo-keystone                        2                    
kollaglue/centos-rdo-base                            1                    
kollaglue/fedora-rdo-nova-compute                    0                    
kollaglue/fedora-rdo-nova-api                        0                    
kollaglue/centos-rdo-rabbitmq                        0                    
kollaglue/centos-rdo-horizon                         0                    
kollaglue/fedora-rdo-mariadb                         0                    
kollaglue/fedora-rdo-nova-network                    0                    
kollaglue/fedora-rdo-nova-conductor                  0                    
kollaglue/centos-rdo-nova-base                       0                    
kollaglue/fedora-rdo-base                            0                    
kollaglue/fedora-rdo-nova-scheduler                  0                    
kollaglue/centos-rdo-nova-network                    0                    
kollaglue/centos-rdo-nova-compute                    0                    
kollaglue/fedora-rdo-zaqar                           0                    
kollaglue/centos-rdo-mariadb-app                     0                    
kollaglue/fedora-rdo-glance-registry                 0                    
kollaglue/fedora-rdo-nova-base                       0                    
kollaglue/fedora-rdo-glance-api                      0                    
kollaglue/centos-rdo-glance-base                     0                    
kollaglue/fedora-rdo-nova-libvirt                    0                    
kollaglue/centos-rdo-neutron-base                    0                    
kollaglue/fedora-rdo-rabbitmq                        0                    
kollaglue/centos-rdo-nova-libvirt                    0                    
kollaglue/fedora-rdo-keystone                        0

4.Kolla代码目录结构

  • ansible - Contains Ansible playbooks to deploy Kolla in Docker containers.
  • demos - Contains a few demos to use with Kolla.
  • dev/heat - Contains an OpenStack-Heat based development environment.
  • dev/vagrant - Contains a vagrant VirtualBox/Libvirt based development environment.
  • doc - Contains documentation.
  • etc - Contains a reference etc directory structure which requires configuration of a small number of configuration variables to achieve a working All-in-One (AIO) deployment.
  • docker - Contains jinja2 templates for the docker build system.
  • tools - Contains tools for interacting with Kolla.
  • specs - Contains the Kolla communities key arguments about architectural shifts in the code base.
  • tests - Contains functional testing tools.

5. Debugging Kolla可以通过执行的部署目标来确定容器的状态:

# docker ps –a

通过日志来进行检查:

# docker exec -it heka bash

所有的容器都可以从这个目录中获取服务日志:/var/log/kolla/SERVICE_NAME。Docker使用heka来展现收集到的日志信息。

如果需要输出日志,请运行:

# docker logs <container-name>

请注意,大多数容器不会stdout,上面的命令将不会提供信息。

6.参考资源

Kolla wiKI: https://wiki.openstack.org/wiki/Kolla

Docs: http://docs.openstack.org/developer/kolla/