基于模板引擎的容器部署框架

2017 年 8 月 14 日 CSDN 李宁

本文作者:李宁,BoCloud博云高级架构师。

导读:容器创建或者应用部署配置繁杂且存在变数,为了保证系统灵活性和复用性,本文重点讲述如何以模板引擎为核心,构建统一的容器部署框架。

在大家使用容器的过程中,都会有一种经历,容器配置项众多大概有四五十项,且需要一定技术背景才能理解。部署过程中,用户常常会因为对于配置参数缺乏理解,导致容器启动,应用部署或者升级时遇到各种各样的问题。用户如何加快对不同参数的理解并且能够根据不同的应用类型和场景,做相应扩展,本文将重点要探讨和解决这些问题。

容器创建或者应用部署配置繁杂且存在变数,为了保证系统灵活性和复用性,决定以模板引擎为核心,构建统一的容器部署框架。本文重点讲述如何构建模板引擎以及以模板引擎为核心构建容器部署框架的运行原理。模板引擎中,符合一定格式规范的文件是基础,对于可能有变化或者根据部署流程需要变化的位置,使用参数标识站位。模板文件结尾追加参数标识的定义,用来执行参数标识语义转化。模板或者参数标识的具体内容,可以通过特定配置文件读取或者接收客户端请求参数。

模板引擎

模板引擎由模板定义,模板解析,模板转换,模板执行四个模块组成。模板定义依赖于容器集群的管理框架,是非可执行的文件。模板解析器负责把模板一分为二:一部分形成非可执行的部署模板;一部分形成部署模板中参数的定义说明,参数定义说明通过唯一的站位标识符与部署模板中的站位标识符一一对应。模板转换器接受参数值,结合解析器中生成的部署模板,参数值标识与模板中占位标识关联,参数值通过占位标识替换,生成可执行文件。模板执行器负责根据模板创建对象,一般有调度框架或者容器引擎承担。

模板引擎的执行原理如图1所示:


图1  模板引擎的执行原理

模板定义

模板定义包括两类信息:部署模板;参数标识。

以kubernetes的部署模板为例,部署模板涉及到4种不同类型定义,分别是:资源、版本、信息说明、数据配置。

  • 资源:表示kubernetes中定义的对象类型。

  • 版本:表示对象的版本

  • 信息说明:包括对象名称,标签,注释等,为对象查找或者调度提供索引。

  • 数据配置:负责定义容器处于运行态遵循的标准,包括端口、环境变量、资源、调度、健康检查等。

参数标识由6个属性组成,分别是parameters、name、description、displayname、value、type。

  • parameters:参数定义起始标志

  • description:参数的提示信息

  • displayname:具体语义信息

  • name:与引用参数名称对应,表示描述信息为对应的引用参数

  • value:参数默认值

  • type:代表不同的样式,客户端根据type类型,呈现具体样式

以kubernetes中的namespace对象为例,模板的完整定义如下代码所示:

apiVersion: v1kind: Namespacemetadata:  name: ${name } --- {"parameters":  [    {      "description": "命名空间",      "displayName": "命名空间",      "name": "name",      "value": "",      "type": "String"    } ]}

由上述代码中,包含两部分内容:部署模板,参数说明。

部署模板如下代码块所示:

apiVersion: v1kind: Namespacemetadata:  name: ${name }

部署模板定义对象创建的所有内容,模板中字段含义描述如下:

  • apiVersion:通用选项,定义版本信息

  • Kind:定义对象类型,区别不同的对象

  • Metadata:定义部署时指定的参数键值对

  • ${}:表示参数的引用值,即可替代参数

参数标识,定义了客户端动态获取参数后的展现形态,下面代码示例参数标识定义:

{"parameters":  [    {      "description": "命名空间",      "displayName": "命名空间",      "name": "name",      "value": "",      "type": "String"    } ]}

参数标识定义统一的格式。通过语义转化,把繁杂的配置转变为用户易于理解的方式。客户端读取到Parameters标识,通过模板解析器抽象可输入参数,展示需要的Form表单,提供用户输入的功能。

模板定义由对Kubernetes或者Docker熟悉的专业人员编写。可以根据具体的业务场景,进行实时和动态调整,保证部署的灵活性和扩展性。同时,系统根据不同的对象,提供基础模板。用户在具备一定知识背景的基础上同样可以进行模板制作和维护。

模板解析器

通过输入输出流获取模板中参数标识,进行语义转化,得到易于理解的配置参数。模板解析器的工作原理如下图2所示:


图2  模板解析器的工作原理

客户端发起创建对象请求,服务端收到请求以后,会根据请求的对象类型自关联基础模板。通过文件流的方式,读取基础模板,读取过程中以Parameters标志为起始点,获取参数描述信息。解析完成,参数以Json串的方式返回客户端,客户端根据Json串,动态生成需要用户填写的表单,用户根据表单内容完成参数输入操作。

模板解析器重点解析模板定义中的参数标识。通过语义转化,信息提示,形成易辨识的输入项。对用户而言,解析完成以后能够屏蔽繁杂的技术指标,用户的关心点由技术转变到业务配置。最大程度降低使用成本,增加易用性。

模板转化器

模板转化器是模板引擎的核心,重点解决三个问题:获取部署模板,参数与值转换,构建可执行文件。客户端把模板解析器中参数赋予真实值,传递到服务端,服务端读取模版内容,遇到参数的标志位结束,把读取的内容通过文件流写到新文件,生成部署文件,接着用参数值对部署文件中的参数做关联替换,生成最终的可执行文件。模板转化器的工作原理如图3所示:


图3  模板转化器的工作原理

获取部署模板:由模板定义可知,模板中包含两部分内容:部署模板和参数标识。模板转化器首先需要部署模板,通过文件流的方式读取模板定义中的部署模板,读取过程中以parameters标识符分割,获取部署模板。

参数值转化:核心是解决参数与占位符关联和赋值问题。模板转换器通过模板参数定义的name属性key关联,模板转化器拿到参数值以后,获取参数值对应的key(key在部署模板唯一),并且根据key,替换部署模板中占位标识,完成参数替换。

构建可执行文件:通过文件流的方式,把前两部转化的字符流输出到文件,构建出可执行文件。

模板转换器执行以后,生成的可执行文件如下所示:

apiVersion:


模板执行器

模板执行器接收可执行的部署文件,对于文件中定义的部署类型进行解析,拆分成若干个可执行任务。容器引擎根据收到的任务执行操作,最终协同完成部署工作。模板执行器往往依赖于容器调度和执行引擎。以Kubernetes容器编排框架为例,模板转化器生成的可执行文件,以字符流的方式传输到Kubernetes的Server端,Kubernetes根据传入文件,自动解析文件内容,并且做出相关操作。对于模板引擎而言,无论是Kubernetes还是Swarmkit都能够得到友好的支持。模板执行器的工作原理如图4所示:

图4  模板执行器的工作原理


模板执行器执行以后的结果如图5所示: 

图 5

通过模板引擎的方式,可以对容器的配置做灵活使用,无论是容器部署还是其他资源主题对象创建,都有对应模板支持。模板处理引擎不需要根据模板的变动而不断的修改代码。与此同时,用户可以从自己理解的语义关注配置信息,不需要关注具体技术细节和实现方式,简化操作行为,降低使用成本。

本文为《程序员》原创文章,未经允许不得转载,更多精彩文章请订阅《程序员》,给我们投稿请联系邮箱 weiwei@csdn.net。


全天候聚焦IaaS/PaaS/SaaS最新技术动态,深度挖掘技术大咖第一手实践,及时推送云行业重大新闻,一键关注,总览国内外云计算大势! 

登录查看更多
0

相关内容

标识符(identifier)是指用来标识某个实体的一个符号,在不同的应用环境下有不同的含义。在计算机编程语言中,标识符是用户编程时使用的名字,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。标识符通常由字母和数字以及其它字符构成。
深度学习目标检测方法及其主流框架综述
专知会员服务
147+阅读 · 2020年6月26日
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
57+阅读 · 2020年6月26日
【文献综述】深度学习目标检测方法及其主流框架综述
专知会员服务
118+阅读 · 2020年6月26日
FPGA加速系统开发工具设计:综述与实践
专知会员服务
65+阅读 · 2020年6月24日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
Python导论,476页pdf,现代Python计算
专知会员服务
260+阅读 · 2020年5月17日
Python计算导论,560页pdf,Introduction to Computing Using Python
专知会员服务
73+阅读 · 2020年5月5日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
【电子书】Flutter实战305页PDF免费下载
专知会员服务
22+阅读 · 2019年11月7日
腾讯推荐引擎组员工:谈谈推荐系统架构
腾讯大讲堂
14+阅读 · 2019年10月23日
基于TensorFlow和Keras的图像识别
Python程序员
16+阅读 · 2019年6月24日
工行基于MySQL构建分布式架构的转型之路
炼数成金订阅号
15+阅读 · 2019年5月16日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
TF Boys必看!一文搞懂TensorFlow 2.0新架构!
引力空间站
18+阅读 · 2019年1月16日
深度学习开发必备开源框架
九章算法
12+阅读 · 2018年5月30日
Python & 机器学习之项目实践 | 赠书
人工智能头条
14+阅读 · 2017年12月26日
【机器学习】基于TensorFlow搭建一套通用机器学习平台
GAFT:一个使用 Python 实现的遗传算法框架
Python开发者
10+阅读 · 2017年8月1日
Compositional Generalization in Image Captioning
Arxiv
3+阅读 · 2019年9月16日
Arxiv
3+阅读 · 2019年3月1日
Arxiv
5+阅读 · 2018年10月23日
Arxiv
8+阅读 · 2018年5月1日
Arxiv
5+阅读 · 2018年5月1日
Arxiv
5+阅读 · 2018年3月6日
VIP会员
相关VIP内容
深度学习目标检测方法及其主流框架综述
专知会员服务
147+阅读 · 2020年6月26日
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
57+阅读 · 2020年6月26日
【文献综述】深度学习目标检测方法及其主流框架综述
专知会员服务
118+阅读 · 2020年6月26日
FPGA加速系统开发工具设计:综述与实践
专知会员服务
65+阅读 · 2020年6月24日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
Python导论,476页pdf,现代Python计算
专知会员服务
260+阅读 · 2020年5月17日
Python计算导论,560页pdf,Introduction to Computing Using Python
专知会员服务
73+阅读 · 2020年5月5日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
【电子书】Flutter实战305页PDF免费下载
专知会员服务
22+阅读 · 2019年11月7日
相关资讯
腾讯推荐引擎组员工:谈谈推荐系统架构
腾讯大讲堂
14+阅读 · 2019年10月23日
基于TensorFlow和Keras的图像识别
Python程序员
16+阅读 · 2019年6月24日
工行基于MySQL构建分布式架构的转型之路
炼数成金订阅号
15+阅读 · 2019年5月16日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
TF Boys必看!一文搞懂TensorFlow 2.0新架构!
引力空间站
18+阅读 · 2019年1月16日
深度学习开发必备开源框架
九章算法
12+阅读 · 2018年5月30日
Python & 机器学习之项目实践 | 赠书
人工智能头条
14+阅读 · 2017年12月26日
【机器学习】基于TensorFlow搭建一套通用机器学习平台
GAFT:一个使用 Python 实现的遗传算法框架
Python开发者
10+阅读 · 2017年8月1日
相关论文
Compositional Generalization in Image Captioning
Arxiv
3+阅读 · 2019年9月16日
Arxiv
3+阅读 · 2019年3月1日
Arxiv
5+阅读 · 2018年10月23日
Arxiv
8+阅读 · 2018年5月1日
Arxiv
5+阅读 · 2018年5月1日
Arxiv
5+阅读 · 2018年3月6日
Top
微信扫码咨询专知VIP会员