kubernetes - 是否可以在内部 Helm chart 的values.yaml中使用全局变量

标签 kubernetes charts yaml kubernetes-helm

我有两个 Helm chart ,第二个嵌套在第一个图表中 树输出:

.
└── outerChart
    ├── charts
    │   └── innerChart
    │       ├── charts
    │       ├── Chart.yaml
    │       ├── templates
    │       │   ├── deployment.yaml
    │       │   ├── _helpers.tpl
    │       │   ├── ingress.yaml
    │       │   ├── NOTES.txt
    │       │   ├── serviceaccount.yaml
    │       │   └── service.yaml
    │       └── values.yaml
    ├── Chart.yaml
    ├── templates
    └── values.yaml

我在外部 values.yaml 中有一个全局变量:

global:
 myreplicacount: 4

在嵌套图表中有一个值文件

replicaCount: 1

以及使用它的部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "foo.fullname" . }}
  labels:
{{ include "foo.labels" . | indent 4 }}
spec:
  replicas: {{ .Values.replicaCount }}

使用全局变量的直接方法是替换:

replicas: {{ .Values.replicaCount }}

与:

replicas: {{ .Values.global.myreplicacount }}

deployment.yaml中。

但是可以在嵌套的 values.yaml 中使用它吗?我想保持内部图表完整。我陷入了这样一种情况:一个软件团队为我提供内部图表,而另一个软件团队通过全局变量提供所需的配置。 replicaCount 只是一个示例,它们有许多需要更改的变量,如果我编辑内部图表,将使内部图表更新变得困难。

只需添加:

replicaCount: {{ .Values.global.myreplicacount }}

在outerChart/charts/innerChart/values.yaml中 返回

): error converting YAML to JSON: yaml: invalid map key: map[interface {}]interface {}{".Values.global.myreplicacount":interface {}(nil)}

最佳答案

在嵌套图表内,.Values被视为 .Values.nested 的内容(使用 requirements.yamlChart.yaml 中的依赖项的任何名称),与顶级 global: 合并关键。

# requirements.yaml
- name: nested   # <-- this name will be used in values.yaml
  version: "^1"
  repository: ...

您可以使用该依赖项的名称作为 values.yaml 中的键来提供该依赖项的特定设置。 。这不需要global:或依赖关系图的任何更改。

# outer chart values.yaml, or `helm install -f` YAML file
nested:          # <-- matches name: in requirements.yaml above
  replicaCount: 1

特别是对于部署副本计数,我更喜欢此选项而不是可能的替代方案。每个 Deployment 和 StatefulSet 可能都需要不同的副本数量,尤其是在多个图表中,并且全局地说“绝对所有东西都有 4 个副本”是没有意义的。

如果您可以编辑嵌套图表,并且希望它选择性地接受 global:值,如果未设置本地值,您可以遵守该值

# charts/nested/deployment.yaml
replicas: {{ .Values.replicaCount | default .Values.global.replicaCount | default 1 }}

关于kubernetes - 是否可以在内部 Helm chart 的values.yaml中使用全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69074971/

相关文章:

docker - 需要意见/反馈-Drupal,Varnish,Docker和Kubernetes

kubernetes - 获取没有正在运行的 pod 的所有部署配置的名称

java - 如何在 TableView (javaFX 8) 的 TableColumn 中显示 "single bar chart"?

r - 使用 knitr 关闭 Rmd 中的标题页

spring-boot - CORS Origin Spring Boot Jhipster - 飞行前失败

kubernetes - 查看 kubernetes 中崩溃的 pod 的日志文件

mysql - 是否建议在生产环境中使用 Kubernetes 运行集群数据库?

javascript - 带有十字准线作为工具提示的 d3js 图表 : How to Add 2 lines which intersect at cursor position

javascript - 如何避免X轴显示小数值

yaml - 覆盖 YAML 子项