kolla源码阅读
项目目标
To provide production-ready containers and deployment tools for operating
OpenStack clouds.
kolla项目的目标:提供生产环境可用的容器镜像
kolla项目主要是对镜像容器进行构建,根据每个项目-服务中的dockerfile来创建各个服务的容器,然后构建私有仓库,也就是实现build的功能
目录结构
- 首先来看一下目录结构
其中比较重要的几个文件夹简单介绍一下:
doc/
- 一些说明性文档。比如说image-building.rst
,介绍了kolla-build
这个命令行怎么构建docker镜像,介绍这个命令行的传入参数以及示例如何使用这个命令。
再细说一下kolla-build
,它会根据DockerFile来制作镜像,然后放入本地的镜像仓库(Local Docker Registry)。在Deploy阶段,会根据用户的配置(比如multinode, allinone),自动生成配置文件,并且把配置文件和镜像仓库中的镜像一起部署到对应的节点上。docker/
- 这个目录下主要是DockerFile,安装项目来划分,然后每个项目下又划分为一个或多个服务,每个服务对应一个docker image。kolla/
- python实现的kolla命令,这里主要是build命令。后面详细说。原本的genpwd已经移植到了kolla-ansible中。tools/
- 一些脚本工具的集合。包括cleanup-images
,validate-docker-execute
,validate-maintainer
等等。setup.cfg
- 文件的内容由很多个section组成,比如global、metadata、file等,提供了这个软件包的名称、作者等有用的信息,能够更好地理解代码的section唯有的entry_points。简单的理解,这些entry_points是项目所提供的服务的入口点。setup.py
- 仅仅调用setup函数,但是它有大量的参数需要配置,包括项目名称、作者、版本等,而setup.cfg就是存了这些参数。setup函数利用pbr工具去读取和过来setup.cfg中的数据,将解析后的结果作为自己的参数。
kolla-build 代码分析
我们从这个entry_points入手。
entry_points可以简单理解为它通过setuptools注册的外部可以直接调用的接口。
循着entry_points,我们可以找到kolla-build的入口函数。
step1:模块入口
step2:调用kolla.cmd.build的main()函数
step3:调用kolla.image.build的run_build()函数,建立working_dir, 创建dockerfile,构建容器镜像,并且输出安装过程的日志,最终删除临时文件,返回结果(build, failed, not_matched,