插件制作
本文主要内容介绍插件的设计和插件的创建过程。使用户对 Rainbond 插件有一定的认识,并能制作简单的插件。
插件体系设计
Rainbond 的插件体系抽象集中在平台的业务层面,理论基础源于 Kubernetes 的 pod 机制和一部分容器概念。针对平台业务层面对 kubernetes 容器编排进行抽象,转变为一个对用户体验友善的 Rainbond 插件产品的过程,方便用户在不需要懂 Kubernetes 原理的情况下使用。
设计原则
Rainbond插件体系的设计遵循 易于理解 和 易于使用 的原则:
- 易于理解
在 Rainbond 插件体系中,插件使用的过程即主容器与 init 或 sidecar 等容器结合的过程,原理是将插件容器以 sidecar 容器(大部分)的形式编排至主应用的 pod 中,共享主应用容器的网络和环境变量,因此可以插件化实现某些附加功能,例如对主应用进行流量分析等。
init容器
一个pod可以封装多个容器,应用运行在这些容器之中;同时,pod 可以有一个或者多个 init 容器, init 容器在应用容器启动之前启动。如果某个 pod 的 init 容器启动运行失败, Kubernetes 将不断重启 pod ,直到 init 容器启动运行成功为止。当然,我们可以设定 pod 的 restartPolicy 值为 Never ,阻止它重复启动。
sidecar容器
利用 pod 中容器可以共享存储和网络的能力, sidecar 容器得以扩展并增强“主要”容器,与之共存并使其工作得更好。
- 易于使用
Rainbond插件体系易于使用的原则体现在 类应用化
、绑定使用
、独有的变量作用域
等方面。
类应用化
Rainbond 插件体系为插件设计了与应用类似的生命周期,包含创建、启用、关闭等模式,与 Rainbond 平台用户操作应用的习惯保持一致。同时, Rainbond 插件体系简化了插件创建类型,支持基于 docker image 和 dockerfile 创建,创建插 件比创建应用更加简单。
插件创建流程设计如下图所示:
需要注意的是,当一个插件版本固定后,其内存、版本信息、插件变量无法再做修改,这些元素仅作用于当前插件版本。需要修改插件变量等元素时,对插件进行重新构建
,重复创建流程即可。
创建完成后,用户可以对插件进行针对性设置,目前可以设置变量、插件生效与否和内存设定。内存的限制将在 pod 创建时进行限制,插件变量生效与实时修改在下文中会继续介绍。
独有的变量作用域
注入到容器内的变量设计为有两类:共用变量
与 插件变量
。
共用变量就是主容器的变量,为使插件参与甚至扩展主应用的功能,在 pod 创建过程中将主应用的环境变量注入到了插件容器中;插件变量则仅作用在该插件容器内部,防止插件间的变量重复与混用。
插件配置
插件信息分为两部分,版本基础信息
和 配置组管理
。分别指定插件的构建源和插件变量的配置。