1、智汇华云 | 构建华云虚拟化平台服务容器镜像解析一,背景以openstack为代表的IaaS开源技术和以Docker为代表的PaaS/CaaS容器技术日益成熟,二者如何强强联合,一直是业界颇为关心的焦点领域。Openstack是个大和全的IAAS开源体系框架,涉及的技术领域和组件非常多;对openstack的可用性和管理维护上是最让人头疼的的两个难题;我们的华云虚拟化平台是基于openstack演进而来,必不可少的会带有这两个问题,而通过docker容器化华云虚拟化平台的管理方案解决以上两个问题。经过调研和对比,华云虚拟化平台服务容器化选用kolla进行自动化构建。相比于其他部署工具,Koll
2、a完全革新地使用了Docker容器技术,将每一个华云虚拟化平台服务运行在不同的Docker容器中。二,原理Kolla是基于使用 Dockerfile + jinja2 实现的构建镜像。大致原理是Kolla 中嵌入了docker和jinja2,使用 Jinja2 模板生成 Dockerfile 文件,然后把Dockerfile文件投喂给docker进行容器镜像的构建,构建完成,还可以根据配置将镜像推送的指定的 Registry 服务器。 (容器镜像构建)Jinja2模板示例:Kolla在构建镜像过程中可以通过读取配置填充到jinja2的模板中,生成不同的架构的镜像例如X86 或ARM。三,详细构
3、建流程:1,根据需要修改kolla-build的配置,构建时会读入该配置2,生成dokcerfile时会把docker整个目录复制到一个临时的工作目录,然后在其中扫描包含有Dockerfile.j2文件的文件夹,一个文件夹就对应一个镜像。3,构建镜像列表是将上一步生成的 Dockerfile 都读取到内存,处理里面的FROM语句,可以获得每个镜像的parent名字。还有其它一些关于安装方式的细节也要处理,不用过多关心。这一步完成我们就得到了一个镜像列表4,查找和建立镜像关系是遍历整个镜像列表,把它们的依赖关系整理清楚,因为华云虚拟化平台服务组件很多,各个组件之间存在依赖关系,需要把他们理清楚5,过滤出目标镜像列表:因为总共镜像数量比较多,所以需要根据用户提供的参数做一下过滤,过滤的参数可以通过配置文件指定6,构建:真正进行容器镜像的构建工作,此时是根据目标镜像列表中的数据进行构建的7,构建完后,会反馈哪些镜像构建成功,哪些构建失败