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

模板解析器

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

图5

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

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

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

模板转化器

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

云技术6

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

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

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

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

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

云计算7

模板执行器

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

云技术8

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

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

云技术图9

图 5

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

本文为《程序员》原创文章,本文作者:李宁,BoCloud博云高级架构师。