如何为Helm Chart添加额外模板?Elasticsearch集成Istio场景咨询
最佳实践推荐:用Helm子Chart实现需求
背景
我通过以下Helm命令部署Elasticsearch:
helm -n elasticsearch upgrade --install -f values_elasticsearch.yaml elasticsearch elastic/elasticsearch
现在需要给这个部署添加Istio VirtualService,但官方Chart没有对应的模板,考虑了三个方案,想知道哪个更合适。
各方案优劣分析
方案1:修改官方Chart
直接下载官方Chart并添加VirtualService模板,好处是所有资源都在一个Chart里,但后续官方升级Chart时,你得手动合并自己加的代码和官方的变更,长期下来维护成本很高,很容易出冲突,不推荐。方案2:独立Chart部署VirtualService
把VirtualService单独做成一个Chart部署,完全不碰官方Chart,避免了升级冲突,但不符合你“单个命名空间和应用用单一Chart”的偏好,如果你坚持单一部署单元的话,这个方案可以排除。方案3:使用Helm子Chart
这是最匹配你需求的方案,操作逻辑很简单:- 新建一个自定义Chart作为父Chart
- 在父Chart的
charts目录下引入官方Elasticsearch Chart(可以直接拉取官方包放到这里,或者在Chart.yaml里声明依赖) - 在父Chart的
templates目录中添加你的Istio VirtualService模板 - 父Chart的
values.yaml可以直接传递配置给子Chart,同时添加VirtualService的自定义配置项
这样做的好处:
- 满足你“单一Chart部署”的需求,只需要部署这个父Chart,就能同时搞定Elasticsearch和对应的VirtualService
- 后续官方Elasticsearch Chart升级时,只需要更新子Chart的版本,不用处理模板合并的问题,维护成本低
- 所有自定义配置都集中在父Chart里,管理起来更方便
额外补充方案
如果不想维护自定义Chart,还可以试试Helm + Kustomize组合:
用helm template命令生成官方Elasticsearch的部署清单,然后用Kustomize给清单加上VirtualService资源,最后用helm upgrade --install ... --post-renderer kustomize完成部署。这种方式不需要修改任何Chart,适合不想维护自定义Chart的场景,但需要你熟悉Kustomize的基本用法。
内容的提问来源于stack exchange,提问作者MikeSchem
相关产品推荐
相关产品推荐

