Kustomize 允许用户以一个应用描述文件 (YAML 文件)为基础(Base YAML),然后通过 Overlay 的方式生成最终部署应用所需的描述文件,而不是像 Helm 那样只提供应用描述文件模板,然后通过字符替换(Templating)的方式来进行定制化。
根据环境的不同,又配置了多套的应用描述文件。随着服务越部越多,应用描述文件更是呈爆炸式的增长。
使用了 helm ,但是其只提供应用描述文件模板,在不同环境拉起一整套服务会节省很多时间,而像我们这种在指定环境快速迭代的服务,并不会减少很多时间。
不同环境相同的配置都放在 base 中,而差异就可以在 overlays 中实现。
1 | |
base 中维护了项目共同的基础配置,如果有镜像版本等基础配置需要修改,可以使用 kustomize edit set image ... 来直接修改基础配置,而真正不同环境,或者不同使用情况的配置则在 overlays 中 以 patch 的形式添加配置。
1 | |
配置目录里面有kustomization.yaml里面包含合成的yaml一起安装
1 | |
kustomization.yaml 的作用
这里我们看一下官方示例 helloWorld 中的 kustomization.yaml:
1 | |
可以看到该项目中包含3个 resources , deployment.yaml、service.yaml 、 configMap.yaml。
1 | |
直接执行命令:
1 | |
kustomize 通过 kustomization.yaml 将3个 resources 进行了处理,给三个 resources 添加了共同的 labels app: hello 。这个示例展示了 kustomization.yaml 的作用:将不同的 resources 进行整合,同时为他们加上相同的配置。
根据环境生成不同配置
使用最多的就是为不同的环境配置不同的 deploy.yaml,而使用 kustomize 可以把配置拆分为多个小的 patch ,然后通过 kustomize 来进行组合。而根据环境的不同,每个 patch 都可能不同,包括分配的资源、访问的方式、部署的节点都可以自由的定制。
1 | |
这里可以看到配置分为了 base 和 overlays, overlays 则是继承了 base 的配置,同时添加了诸如 healthcheck 和 memorylimit 等不同的配置,那么我们分别看一下 base 和 overlays 中 kustomization.yaml 的内容
- base
1 | |
base 中的 kustomization.yaml 中定义了一些基础配置
- overlays
1 | |
overlays 中的 kustomization.yaml 则是基于 base 新增了一些个性化的配置,来达到生成不同环境的目的。
执行命令
1 | |
可以看到包括 replicas、limits、requests、env 等 dev 中个性的配置都已经出现在了生成的 yaml 中。由于篇幅有限,这里没有把所有的配置有罗列出来,需要的可以去 GitHub 上自取。