helm 中辅助模板和值的组合

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

我是 Helm Chart 的新手,我正在构建 Helm Chart 以在 kubernetes 上部署应用程序,作为其中的一部分,我创建了一个部署模板,如下所示,

{{- $outer := . -}}
{{- range $index, $service := .Values.myservices}}
{{- with $outer }}
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ $service.name }}
  labels:
    {{- include "myhelm.labels" $ | nindent 4 }}
spec:
.
.
.
  {{- end }}
{{- end }}

这里我使用模板“myhelm.labels”,它在 _helpers.tpl 中定义如下,

{{/*
Common labels
*/}}
{{- define "myhelm.labels" -}}
  helm.sh/chart: {{ include "myhelm" . }}
  {{- if .Chart.AppVersion }}
    app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
  {{- end }}
  app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}

我喜欢在values.yaml中包含更多标签,如下所示

myservices:
  api:
    name: "com-api"
    labels:
      app: "com-api"
    selectorLabels:
      app: "com-cp"
    podAnnotations: {}
    container:
      image: "com-api"
      port: 24000
      name: "api"
    nodeSelector:
      app: "com-cp-api"
    affinity: {}
    tolerations: {}
  ui:
    name: "com-ui"
    labels:
      app: "com-ui"
    selectorLabels:
      app: "com-ui"
    podAnnotations: {}
    container:
      image: "com-ui"
      port: 23000
      name: "ui"
    nodeSelector:
      app: "com-cp-ui"
    affinity: {}
    tolerations: {}

除了“myhelm.labels”(通用标签)之外,我还想包含特定于服务的标签,例如 $service.labels。 请帮助我,我该怎么做?

我可以一一添加特定标签,例如,

  labels:
    {{- include "dlc-project-service-control-plane.labels" $ | nindent 4 }}
    app: {{ $service.labels.app }}

但是,如果我在 value.yaml 中的 $service.labels 下有多个标签,并且想要将所有标签添加到部署模板中的单个语句中,我正在寻找解决方案。

如果您已经知道解决方案,请分享代码片段,这会有所帮助。

谢谢

kubernetes kubernetes-helm
1个回答
1
投票

我可以使用 toYaml 来实现它,下面是代码片段,

{{- $outer := . -}}
{{- range $index, $service := .Values.myservices}}
{{- with $outer }}
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ $service.name }}
  labels:
    {{- include "myhelm.labels" $ | nindent 4 }}
    {{- toYaml $service.labels | nindent 4 }}
spec:
.
.
.
  {{- end }}
{{- end }}

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