用例
“我想通过使用弹性官方头盔图来部署elasticsearch + kibana。我想创建一个称为data-viz的头盔图,并将这些图作为依赖项。”
运行helm install data-viz --set cluster=toto
必须创建一个“ elasticsearch”集群“ toto”,并创建一个用elasticsearchHosts
= toto配置的kibana。
问题
我在这里https://github.com/helm/helm/blob/master/docs/chart_template_guide/subcharts_and_globals.md可以从主图values.yml
配置子图。但是我想从主图表values.yaml中模板化子图表values.yml,这可能吗?
我在想简单的事情:
.
├── Chart.yaml
├── charts
│ ├── elasticsearch
│ │ ├── Chart.yaml
│ │ └── templates
│ │ └── values.yaml
│ ├── elasticsearch-7.4.0.tgz
│ └── kibana-7.4.0.tgz
├── requirements.lock
├── requirements.yaml
└── values.yaml
完美解决方案
一个小的Python脚本,可以根据values.yaml
和数据创建sub-chart/values-template.yaml
文件。
答案 0 :(得分:3)
可能会感兴趣PR 6876“ feat(helm):添加值模板以便使用go-template为图表及其依赖项自定义值”
对于使用图表值模板的方法有很多要求。yaml(#2492,#2133,...)。
主要原因是目前无法从模板导出子图的值。但是,
values.yaml
中的模板使它们变得不可解析,并在渲染它们时产生了“鸡还是蛋”的问题。此合并请求创建了一个没有此类问题的直观解决方案:可选的
values/
目录,其中的模板使用values.yaml
进行呈现,然后将其合并。
这些values/
模板仅在特定情况下才需要,其工作方式与templates/
模板相同,并且values.yaml
仍将是主要的可分析价值来源。渲染顺序也已更改,以允许这些新值启用或禁用依赖关系,并避免渲染禁用依赖关系的值模板。
新的可能性:
现在可以自定义依赖项值了,这在以前是完全不可能的
subchart:
fullnameOverride: subchart-{{ .Relese.Name }}
debug: {{ default "false" .Values.debug }}
可以从值导出依赖条件
dependencies:
- name: subchart
condition: subchart.enabled
subchart:
{{- if eq .Values.environment "production" -}}
enabled: true
{{- else -}}
enabled: false
{{- end -}}
同样,PR 8580“增加了对通过map.yaml
将值传递到子图表的支持”
此PR允许开发人员在其图表上声明
map.yaml
文件,该文件可用于将values.yaml
中的值映射到用于模板的派生值,包括子图(请参阅{{ 3}}进行详细说明。这使开发人员可以编写例如
apiVersion: v1
description: Chart with map and subcharts
name: chart-with-map
version: 0.0.1
dependencies:
- name: backend
version: 0.0.1
- name: frontend
version: 0.0.1
domain: example.com
backend:
uri: {{ printf "https://api.%s" .Values.domain }}
frontend:
uri: {{ printf "https://app.%s" .Values.domain }}
other_uri: {{ printf "https://blabla.%s" .Values.domain }}
从而不必在values.yaml中(对于子图表)公开后端:uri,前端:uri,也无需要求图表用户必须在多个键中传递相同的值以保持一致性(或使用导致命名的全局名称)碰撞)。
即它允许子图用派生(或映射)的值填充,而无需将这些值暴露给values.yaml(图表的公共界面)。
正在以下位置实施/评估:
答案 1 :(得分:1)
我遇到了几乎相同的问题,没有找到合适的解决方案。我只找到this issue。他们建议在即将发布的头盔版本中使用Lua。但是Lua在头盔3.0中仍然不可用。
因此,我决定实现一个tool,它主要与头盔兼容,并且能够通过沙盒Python语言来配置子图表。
对于您的问题,将具有以下内容的Chart.star
文件放在根文件夹(与Chart.yaml
平行)中就足够了
def init(self, cluster="clustername"):
self.elastic = chart("charts/elasticsearch-7.4.0.tgz")
self.kibana = chart("charts/kibana-7.4.0.tgz")
self.elastic.cluster = cluster # Please use the right name here (from elastic../values.yaml
self.kibana.elasticsearchHosts = cluster
然后运行
shalm apply data-viz --set cluster=toto