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

6/20/2019

I am trying to pass a toleration when deploying to a chart located in stable. The toleration should be applied to a specific YAML file in the templates directory, NOT the values.yaml file as it is doing by default.

I've applied using patch and I can see that the change I need would work if it were applied to the right Service, which is a DaemonSet.

Currently I'm trying "helm install -f tolerations.yaml --name release_here"

This is simply creating a one-off entry when running get chart release_here, and is not in the correct service YAML

-- zettatron
kubectl
kubernetes
kubernetes-helm

1 Answer

8/26/2019

Quoting your requirement

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

First, in order to make it happen your particular helm chart file needs to allow such an end-user customization.

Here is the example based on stable/kiam chart:

Definition of 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

Override default values.yaml with your customs-values to set toleration in Pod spec of DeamonSet.

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

Render the resulting manifest file, to see how it would look like when overriding default values with install/upgrade helm command using --values/--set argument:

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

Rendered file (output truncated):

---
# 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:
        ...  

I hope this will help you to solve your problem.

-- Nepomucen
Source: StackOverflow