OpenStack Kolla探秘

一.Kolla簡介

kolla項目起源於TripleO項目,聚焦於使用docker容器部署OpenStack服務。該項目由Cisco於2014年9月提出,是OpenStack 社區Big Tent開發模式下的孵化項目。

在國內一些互聯網資料上,常看到關於kolla是TripleO項目的一部分這樣的描述,其實是不準確的。真實的是,Kolla項目起源於Tripleo項目,時至今日,與它沒有任何關係(雖然它們的目標都是做自動化部署,但走的道路卻不同)。比之於Tripleo和其他部署工具,Kolla走的是docker容器部署路線。

當前Kolla項目在Kollaglue repo提供了以下服務的docker鏡像。 
# docker search kollaglue

代碼目錄結構

OpenStack Kolla探秘

Kolla的優勢和使用場景,體現在如下幾個方面:

  • 原子性的升級或者回退OpenStack部署;

  • 基於組件升級OpenStack;

  • 基於組件回退OpenStack;

這裡,我們予以拆分來理解:

Kolla的最終目標是為OpenStack的每一個服務都創建一個對應的Docker Image,通過Docker Image將升級的粒度減小到Service級別,從而使升級時,對OpenStack影響能達到最小,並且一旦升級失敗,也很容易回滾。升級只需要三步:Pull新版本的容器鏡像,停止老版本的容器服務,然後啟動新版本容器。回滾也不需要重新安裝包了,直接啟動老版本容器服務就行,非常方便。

Kolla是通過Docker Compose來部署OpenStack集群的,現在主要是針對裸機部署的,所以在部署Docker Container時,默認的網路配置都是Host模式。

首先,只需要通過一個命令就可以把管理節點部署完成,這個命令是調用Docker Compose來部署OpenStack的所有服務,然後我們可以在每一個計算節點上通過Docker Compose安裝計算節點需要的服務,就能部署一個OpenStack集群。因為Kolla的Docker Image粒度很小,它針對每個OpenStack服務都有特定的Image,所以我們也可以通過Docker Run來操作某個具體的OpenStack服務。

要想對OpenStack Big Tent開發模式下的Kolla項目(孵化中)有一個整體性的認識,其GitHub代碼庫上的README.rst文件值得一讀。

Kolla使用到的技術如下:

  • Docker

  • Ansible

  • Python

  • docker-py

  • Jinja2

Kolla 目前使用到的部署工具包括docker和ansible,使用 heat 來編排 Kolla 集群。由此可見,要搞懂Kolla,看來得同時學會Docker、Ansible和Heat等、理解OpenStack部署的架構等等,難度不小。

二. 如何與OpenStack社區溝通

  • 每周Kolla小組會議:Wednesdays at 16:30 UTC #openstack-meeting-4.

  • IRC:#kolla

  • Email:[email protected]

  • PTL: Steven Dake(Cisco)

具體有關Kolla的信息,可以閱讀這裡: 

Wiki:https://wiki.openstack.org/wiki/Meetings/Kolla 
governance :http://governance.openstack.org/reference/projects/kolla.html

社區Commit參與情況:

OpenStack Kolla探秘

三.源碼淺析

從代碼庫中的README.rst文件中,我們可以得知每個目錄分別代表的是什麼含義。

1.源碼目錄概要:

  • 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.


2.setup.cfg入口文件

還是老生常談,當我閱讀某一個新項目的源碼時,我總是會首先去看它的setup.cfg文件。因為它是一個項目的入口文件。

選取部分如下所示:

[files]
packages =      //包名
kolla
data_files =     //pbr指定的數據文件
share/kolla/ansible = ansible/*
share/kolla/devenv = devenv/*
share/kolla/docker = docker/*
share/kolla/doc = doc/*
share/kolla/etc_examples = etc/*
share/kolla/vagrant = vagrant/*
share/kolla = tools/init-runonce
share/kolla = tools/openrc-example
share/kolla = setup.cfg

scripts =
tools/kolla-ansible  //該腳本通過ansible與koll進行交互。使用命令為:ansible-playbook -i $INVENTORY $EXTRA_OPTS 

$PLAYBOOK
[entry_points]
console_scripts =
kolla-build = kolla.cmd.build:main   //kolla程序的main主函數
oslo.config.opts =                  //oslo.config通用庫用於解析命令行和配置文件中的配置選項
kolla = kolla.opts:list_opts    //字符串列表類型

[global]
setup-hooks =
pbr.hooks.setup_hook


4.Kolla架構

  • Kolla項目的HA架構,如下圖所示,大家應該一看就明白吧。是的,正如其他OpenStack項目一樣,對於MySQL的HA方案,默認採用的均是Galera。 源碼路徑:specs/ha.svg

OpenStack Kolla探秘

  • Kolla節點的網路架構,如下圖所示。Kolla節點有2張網卡(eth0 IP由DHCP分配,用於內網使用;eth1 IP手動配置,用於外網使用,2個網段均和Neutron Router交互)。源碼路徑:doc/kollanet.png

OpenStack Kolla探秘

下一篇中,我們將講解有關Kolla的部署和Ansible的Web管理等。

作者簡介:徐超,OpenStack工程師,個人傾向於研究CI-CT-CD-CD。

閱讀原文


關於作者:
CSDN精彩內容每日推薦。我們關注IT產品研發背後的那些人、技術和故事。

微信號:CSDNnews