基于部署名称的Helm动态变量

问题描述 投票:0回答:1

我有这个 Helm 价值观:

applications_capacity:
  core:
    limit_cpu: 400m
    limit_memory: 512Mi
    request_cpu: 400m
    request_memory: 512Mi
  currency:
    limit_cpu: 400m
    limit_memory: 512Mi
    request_cpu: 400m
    request_memory: 512Mi

并且我正在尝试基于

.Release.Name
动态引用值,如下所示:

requests:
{{- $ := . -}}
{{- $app_name := .Release.Name }}
  memory: {{ (get $.Values.applications_capacity $app_name).request_memory }}

但是有错误:

Error: ... at <$app_name>: can't evaluate field request_memory in type string

我对表达式中的 Helm 表达式不是很熟悉,但即使是 ChatGPT-4 也没有多大帮助

尝试过

index
get
range
表达式

kubernetes-helm
1个回答
0
投票

get
扩展函数被记录为如果值不存在则返回空字符串。您的模板代码的整体结构对我来说看起来是正确的,但如果
.Release.Name
不是值文件中列出的特定值之一,您将得到与您所描述的几乎完全相同的错误。

标准 Go

text/template
index
函数可能会返回更有用的错误,并且稍微更紧凑

memory: {{ index .Values.applications_capacity .Release.Name "request_memory" }}

我在这里考虑的另一种方法是为每个环境或部署使用一组不同的值,而不是尝试将不同的环境嵌入到单个统一文件中。例如,您可以有一个附加文件

# values.core.yaml
applications_capacity:
  limit_cpu: 400m
  limit_memory: 512Mi
  request_cpu: 400m
  request_memory: 512Mi

并在安装图表时应用该值文件

helm install -f values.core.yaml not-necessarily-core .

那么你的模板代码就可以避免动态查找

memory: {{ .Values.applications_capacity.request_memory }}

并且您不会受到一组预先选择的有效 Helm 版本名称的束缚。

© www.soinside.com 2019 - 2024. All rights reserved.