在大家使用容器的过程中,都会有一种经历,容器配置项众多大概有四五十项,且需要一定技术背景才能理解。部署过程中,用户常常会因为对于配置参数缺乏理解,导致容器启动,应用部署或者升级时遇到各种各样的问题。用户如何加快对不同参数的理解并且能够根据不同的应用类型和场景,做相应扩展,本文将重点要探讨和解决这些问题。
容器创建或者应用部署配置繁杂且存在变数,为了保证系统灵活性和复用性,决定以模板引擎为核心,构建统一的容器部署框架。本文重点讲述如何构建模板引擎以及以模板引擎为核心构建容器部署框架的运行原理。模板引擎中,符合一定格式规范的文件是基础,对于可能有变化或者根据部署流程需要变化的位置,使用参数标识站位。模板文件结尾追加参数标识的定义,用来执行参数标识语义转化。模板或者参数标识的具体内容,可以通过特定配置文件读取或者接收客户端请求参数。
模板引擎
模板引擎由模板定义,模板解析,模板转换,模板执行四个模块组成。模板定义依赖于容器集群的管理框架,是非可执行的文件。模板解析器负责把模板一分为二:一部分形成非可执行的部署模板;一部分形成部署模板中参数的定义说明,参数定义说明通过唯一的站位标识符与部署模板中的站位标识符一一对应。模板转换器接受参数值,结合解析器中生成的部署模板,参数值标识与模板中占位标识关联,参数值通过占位标识替换,生成可执行文件。模板执行器负责根据模板创建对象,一般有调度框架或者容器引擎承担。
模板引擎的执行原理如图1所示:
图1 模板引擎的执行原理
模板定义
模板定义包括两类信息:部署模板;参数标识。
以kubernetes的部署模板为例,部署模板涉及到4种不同类型定义,分别是:资源、版本、信息说明、数据配置。
1.资源:表示kubernetes中定义的对象类型。
2.版本:表示对象的版本
3.信息说明:包括对象名称,标签,注释等,为对象查找或者调度提供索引。
4.数据配置:负责定义容器处于运行态遵循的标准,包括端口、环境变量、资源、调度、健康检查等。
参数标识由6个属性组成,分别是parameters、name、description、displayname、value、type。
1.parameters:参数定义起始标志
2.description:参数的提示信息
3.displayname:具体语义信息
4.name:与引用参数名称对应,表示描述信息为对应的引用参数
5.value:参数默认值
6.type:代表不同的样式,客户端根据type类型,呈现具体样式
以kubernetes中的namespace对象为例,模板的完整定义如下代码所示:
由上述代码中,包含两部分内容:部署模板,参数说明。
部署模板如下代码块所示:
部署模板定义对象创建的所有内容,模板中字段含义描述如下:
1.apiVersion:通用选项,定义版本信息
2.Kind:定义对象类型,区别不同的对象
3.Metadata:定义部署时指定的参数键值对
4${}:表示参数的引用值,即可替代参数
参数标识,定义了客户端动态获取参数后的展现形态,下面代码示例参数标识定义:
参数标识定义统一的格式。通过语义转化,把繁杂的配置转变为用户易于理解的方式。客户端读取到Parameters标识,通过模板解析器抽象可输入参数,展示需要的Form表单,提供用户输入的功能。
模板定义由对Kubernetes或者Docker熟悉的专业人员编写。可以根据具体的业务场景,进行实时和动态调整,保证部署的灵活性和扩展性。同时,系统根据不同的对象,提供基础模板。用户在具备一定知识背景的基础上同样可以进行模板制作和维护。