1、业务需求: 目前使用helm来管理项目的CD,但遇到以下痛点:
(1)多个环境需要多份chart;
(2)无法组织自己想要的kubernetes资源;比如有的项目只需要deployment、svc不需要ingress
复制代码
2、后面想着直接用kustomize,但是也是有缺点的:
不支持模版操作
复制代码
Kustomize、Helm、Kubectl的比较如下表格所示:
Functionality | Kustomize | Native Helm | Native Kubectl |
---|---|---|---|
Templating | No templating | Complex templating | No templating |
Setup | No separate setup | Needs setup | No separate setup |
Configuration | Manage multiple configurations with one base file | Manage multiple configurations with one base file | Should have separate files for each different configuration |
3、比较好的实践是结合两者:
可以先使用用helm的values.yaml文件里面的key、value充实模版
helm template [chart name] [flags]
复制代码
然后把充实后的yaml文件使用Kustomize进行组织:
#### kustomization.yaml文件内容:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- service.yaml
- deployment.yaml
复制代码
接着可以通过sed命令修改kustomization.yaml文件,这样的话,就可以达到我们CD的过程中随意组织自己的k8s资源。
下次接着分享如何通过Kustomize差异化部署不同的环境。