如何使用 Helm 将覆盖文件传递给特定的服务 YAML 文件?

How does one pass an override file to specific Service YAML file using Helm?

我试图在部署到位于稳定的图表时传递容忍度。容忍度应应用于模板目录中的特定 YAML 文件,而不是默认情况下的 values.yaml 文件。

我已经使用补丁进行了应用,我可以看到,如果将其应用于正确的服务(即 DaemonSet),我需要的更改将会起作用。

目前我正在尝试"helm install -f tolerations.yaml --name release_here"

这只是在 运行 获取图表 release_here 时创建一个一次性条目,并且不在正确的服务 YAML

引用您的要求

The toleration should be applied to a specific YAML file in the templates directory

首先,为了实现它,您的特定 helm chart 文件需要允许这样的最终用户自定义。

以下是基于 stable/kiam 图表的示例:

kiam/templates/server-daemonset.yaml

的定义
{{- if .Values.server.enabled -}}
apiVersion: apps/v1beta2
kind: DaemonSet
metadata:
  labels:
    app: {{ template "kiam.name" . }}
    chart: {{ template "kiam.chart" . }}
    component: "{{ .Values.server.name }}"
    heritage: {{ .Release.Service }}
    release: {{ .Release.Name }}
  name: {{ template "kiam.fullname" . }}-server
spec:
  selector:
    matchLabels:
      app: {{ template "kiam.name" . }}
      component: "{{ .Values.server.name }}"
      release: {{ .Release.Name }}
  template:
    metadata:
      {{- if .Values.server.podAnnotations }}
      annotations:
{{ toYaml .Values.server.podAnnotations | indent 8 }}
      {{- end }}
      labels:
        app: {{ template "kiam.name" . }}
        component: "{{ .Values.server.name }}"
        release: {{ .Release.Name }}
      {{- if .Values.server.podLabels }}
{{ toYaml .Values.server.podLabels | indent 8 }}
      {{- end }}
    spec:
      serviceAccountName: {{ template "kiam.serviceAccountName.server" . }}
      hostNetwork: {{ .Values.server.useHostNetwork }}
    {{- if .Values.server.nodeSelector }}
      nodeSelector:
{{ toYaml .Values.server.nodeSelector | indent 8 }}
    {{- end }}
      tolerations:    <---- TOLERATIONS ! 
{{ toYaml .Values.server.tolerations | indent 8 }}
      {{- if .Values.server.affinity }}
      affinity:
{{ toYaml .Values.server.affinity | indent 10 }}
      {{- end }}
      volumes:
        - name: tls

使用您的 customs-values 覆盖默认值 values.yaml 以在 DeamonSet 的 Pod 规范中设置容忍度。

server:
  enabled: true
  tolerations: ## Agent container resources
    affinity:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
            - matchExpressions:
                - key: foo.bar.com/role
                  operator: In
                  values:
                    - master 

呈现生成的清单文件,以查看在使用 install/upgrade helm 命令使用 --values/--set 参数覆盖默认值时的外观:

helm template --name my-release . -x templates/server-daemonset.yaml --values custom-values.yaml

渲染文件(输出被截断):

---
# Source: kiam/templates/server-daemonset.yaml
apiVersion: apps/v1beta2
kind: DaemonSet
metadata:
  labels:
    app: kiam
    chart: kiam-2.5.1
    component: "server"
    heritage: Tiller
    release: my-release
  name: my-release-kiam-server
spec:
  selector:
    matchLabels:
      app: kiam
      component: "server"
      release: my-release
  template:
    metadata:
      labels:
        app: kiam
        component: "server"
        release: my-release
    spec:
      serviceAccountName: my-release-kiam-server
      hostNetwork: false
      tolerations:
        affinity:
          nodeAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
              nodeSelectorTerms:
              - matchExpressions:
                - key: foo.bar.com/role
                  operator: In
                  values:
                  - master

      volumes:
        ...  

希望本文能帮助您解决问题。