我创建了一个自定义的头盔图表,其中elastic-stack
作为子图,具有以下配置。
# requirements.yaml
dependencies:
- name: elastic-stack
version: 1.5.0
repository: '@stable'
# values.yaml
elastic-stack:
kibana:
# at this level enabled is not recognized (does not work)
# enabled: true
# configs like env, only work at this level
env:
ELASTICSEARCH_URL: http://foo-elasticsearch-client.default.svc.cluster.local:9200
service:
externalPort: 80
# enabled only works at root level
elasticsearch:
enabled: true
kibana:
enabled: true
logstash:
enabled: false
我不知道为什么我必须在enabled
和其他所有配置中定义elasatic-stack:
标签?
这是弹性叠加图表中的正常舵行为还是一些错误配置?
Helm conditions在最高父母的价值观中评估:
条件 - 条件字段包含一个或多个YAML路径(以逗号分隔)。如果此路径存在于顶级父级的值中并解析为布尔值,则将根据该布尔值启用或禁用该图表
从stable / elastic-stack看一下requirements.yaml中的条件:
- name: elasticsearch
version: ^1.17.0
repository: https://kubernetes-charts.storage.googleapis.com/
condition: elasticsearch.enabled
- name: kibana
version: ^1.1.0
repository: https://kubernetes-charts.storage.googleapis.com/
condition: kibana.enabled
- name: logstash
version: ^1.2.1
repository: https://kubernetes-charts.storage.googleapis.com/
condition: logstash.enabled
条件路径是elasticsearch.enabled
,kibana.enabled
和logstash.enabled
,因此您需要在父图表值中使用它们。
父值中的那些属性.yaml用作子图的开关。
您可以在requirements.yaml中使用condition
来控制从属子图表的安装或执行。如果没有提供,那么helm只是继续部署没有和问题的子图。
而且,这些值在父级的values.yaml中,因为它们在父图表本身中使用,而且除非作为全局或在子图的名称属性键(在您的情况下是弹性堆栈)中提供,否则不能在子图中使用。