【问题标题】:Helm include only existing named templateHelm 仅包含现有的命名模板
【发布时间】:2020-11-18 19:13:01
【问题描述】:

我使用 Helm 来部署多个 K8s 部署。在某些部署中,我需要包含额外的环境变量,但对于大多数部署来说,标准环境。变量就足够了。我想为那些必须有额外环境的部署命名模板。变量。

是否可以仅在命名模板存在时才包含命名模板?

类似这样的:

{{ range $idx, $svc := .Values.services }}
kind: Deployment
metadata:
  name: {{ $svc.name }}
spec:
  containers:
    - name: {{ $svc.name }}
      env:
        - name: JAVA_OPTS
        - value: {{ $svc.javaOpts }}
# if template_exists (print $svc.name "-env")
{{ include (print $svc.name "-env") . | indent 12 }}
# end
{{- end -}}

它是伪代码。 #if部分怎么做?

谢谢。

【问题讨论】:

    标签: kubernetes-helm


    【解决方案1】:

    最简单的方法是将templateExists: true 之类的附加密钥添加到您的服务中,并在您的部署中使用简单的if 语句进行检查:

    {{- if $svc.templateExists }}
    {{ include (print $svc.name "-env") . | indent 8 }}
    {{- end -}}
    
    services:
      svc1:
        templateExists: true
        name: svc1
        javaOpts: "-Xms128m -Xmx512m"
      svc2:
        name: svc2
        javaOpts: "-Xms256m -Xmx512m"
    
    

    【讨论】:

    • 谢谢,但这样不好。我们有一个自动生成的服务列表,如果有额外的环境,则没有信息。此时的变数。我们有大约 100 个服务,检查列表并手动添加标志是不可行的。
    【解决方案2】:

    这是我现在提出的解决方案。我检查图表中是否有与模式 [service]-env.yaml 匹配的文件,如果有,我会在部署中包含该文件的内容。

    {{- range $path, $_ := $f.Glob "**-env.yaml" }}
    {{- if contains $svc.app.name $path }}
    {{ $f.Get $path | indent 8 }}
    {{- end }}
    {{- end }}
    

    这样,对于需要额外环境的服务。我们可以在files/service-env.yaml 中包含一个文件,这些变量将被添加到部署中。对于不需要此类变量的服务,将其留空。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-16
      • 2017-10-09
      • 2019-01-19
      • 1970-01-01
      • 2022-11-15
      • 2022-11-01
      • 2021-01-31
      • 2014-05-03
      相关资源
      最近更新 更多