相信在使用k8s的过程中,对于各种资源的操作一定是最多的,社区包括kubernetes本身出了多种模板生成工具,比如helm, kustomize这两种是最常用的,本人也一直在用,但有的场景依然会觉得这两个工具相对较重,helm使用的是gotemplate,而kustomize则又依赖于kubectl,两者都有一定的学习成本且没有交互能力,最近在做的一个小需求是: 如何快速地让开发同学以最简单的方式根据提供的模板生成部署文件,github上发现了个boilr
的工具,虽然工具老了点,但是足够地小,功能足够简单,重要的是有交互功能,比较贴合需求
boilr已经很久很久没更新了,很功能上看,boilr也引用了仓库的概念,本人相信boilr的作者是想把这个工具做的很NB
当然,从Readme看,也非常简洁,用法也相对简单
安装
根据readme直接下载二进制文件即可使用
使用
几乎所有的模板系统的生成思路都一样的,根据给定的k-v去替换相应的占位符,boilr也不例外
在使用前,先下载个模板文件,这里就使用官方的例子:
使用之前需要先初始化boilr的相关目录, 默认情况下,会生成/root/.config/boilr/templates目录,这个可以从源代码看到(configuration.go)[https://github.com/zhoushuke/boilr/blob/master/pkg/boilr/configuration.go]
1 | boilr init . |
然后就可以下载模板目录了
1 | boilr template download littlemanco/boilr-k8sservice k8sservice |
注意: 因为boilr很久都没有维护了,在download时可能会遇到pkt-line 3: invalid capabilities
,这是由于boilr代码里使用的go-git
相对于现在来说,版本太旧了,所以可以直接通过git clone 把模板下下来,是一样的效果
通过git clone下载下来后需要把boilr-k8sservice
放到/root/.config/boilr/templates
目录下
这里最主要的是有个project.json
文件
1 | { |
通过解析这个文件里的字段进行模板文件的替换,文件中的value都是默认值,如果是列表的话,在交互时可提供选择,还是很方便的
使用以下命令指定使用该模板
1 | boilr template use k8sservice /tmp/deploy |
后面的/tmp/deploy
是最终生成的模板文件保存的目录,我这里修改了点东西
详细的交互输出如下:
1 | 以下是详细输出内容: |
dockerfile
通过上面的使用,为了减少对环境的依赖,可以将模板文件打包到镜像中,这样开发同学就可以直接使用镜像进行生成,还是很方便的
1 | FROM alpine:latest |
通过这种方式,如果模板后续有变动,也可以通过调整镜像的方式推送到开发同学手中,很容易维护,在CI/CD中又打通了一环
源码分析
boilr的源码还是非常清楚的,可能是因为逻辑相对比较简单,本人不是专业开发,理解起来也不是很难.