在 helm 中定义模板的值

defining the value for template in helm

我创建了一个新的 helm 项目,目录结构如下所示:

my-app-helm
   /my-app-helm
      /charts
         /payment
            /templates
              _helpers.tpl
              secrets.yaml
              deployment.yaml
              ingress.yaml
              service.yaml
        Chart.yaml
        values.yaml
    Chart.yaml

我在很多地方都提到了 template,比如 ingress.yaml:

  - host: {{ .Values.payment.apphost }}
    http:
      paths:
      - path: /sft/v1/payment/
        backend:
          serviceName: {{ template "payment.fullname" . }}
          servicePort: 80

我要求我的服务名称、入口名称等以“ccg-helm”为前缀,因此我想问一下如何确保我引用“template”时的值是“ccg-helm” :

例如:

服务名称:{{ 模板“payment.fullname”。 }}

解析为 ccg-helm-payment

您可以像这样修改 _helpers.tpl 中的 payment.fullname 模板:

{{/*
Create a default fully qualified app name prefixed with "ccg-helm"
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "payment.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- printf "%s-%s" "ccg-helm" .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s-%s" "ccg-helm" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}

如果您的图表是通过 helm create 命令创建的,则其 template 会创建 "payment.fullname" 模板。逻辑很简单:

  1. 如果设置了 fullnameOverride 值,则使用 as-is、{{ .Values.fullnameOverride }}
  2. $namenameOverride 值(如果已设置),否则为 Chart.yaml 中的 name
  3. 如果发布名称中包含$name,则使用{{ .Release.Name }}
  4. 否则使用{{ .Release.Name }}-{{ $name }}.

您可以在图表的 _helpers.tpl 文件中找到它。

因此您有两个 deploy-time 选项可以满足此要求。将 fullnameOverride 设置为 ccg-helm,或者使用该名称作为 helm install 命令中的发布名称。

helm install . --generate-name --set fullnameOverride=ccg-helm
helm install . ccg-helm

对于许多更简单的图表,这是全名;如果您 --set fullnameOverride=ccg-helm 那么在您的示例中,服务将被准确命名为 ccg-helm。如果您希望它有其他名称,则需要同时编辑 service.yamlingress.yaml 以具有匹配的名称,通常在模板调用后带有某种后缀。