helm cronjob multiple containers

1.5k Views Asked by At

I need to run multiple containers in one cronjob execution. Currently I have the following cronjob.yaml template:

jobTemplate:
 spec:
  template:
    metadata:
      labels:
        app: {{ .Release.Name }}
        cron: {{ .Values.filesjob.jobName }}
    spec:
      containers:
      - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
        env:
          - name: FILE_MASK
            value: "{{ .Values.filesjob.fileMask }}"
          - name: ID
            value: "{{ .Values.filesjob.id }}"
        imagePullPolicy: {{ .Values.image.pullPolicy }}
        name: {{ .Values.filesjob.jobName }}
        volumeMounts:
        - mountPath: /data
          name: path-to-clean
        - name: path-logfiles
          mountPath: /log
      - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
        env:
          - name: FILE_MASK
            value: "{{ .Values.filesjob.fileMask }}"
          - name: ID
            value: "{{ .Values.filesjob.id }}"
        imagePullPolicy: {{ .Values.image.pullPolicy }}
        name: {{ .Values.filesjob.jobName2 }}
        volumeMounts:
        - mountPath: /data
          name: path2-to-clean
        - name: path2-logfiles
          mountPath: /log

The above generates a cronjob which executes two containers with passing different env variables. can I generate the same using values.yaml by iterating over a variable?

1

There are 1 best solutions below

0
On BEST ANSWER

I was able to solve this basing on example from this article - https://nikhils-devops.medium.com/helm-chart-for-kubernetes-cronjob-a694b47479a

Here is my template:

{{- if .Values.cleanup.enabled -}}
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: registry-cleanup-job
  namespace: service
  labels:
    {{- include "some.labels" . | nindent 4 }}
spec:
  schedule: {{ .Values.cleanup.schedule }}
  concurrencyPolicy: Forbid
  successfulJobsHistoryLimit: 2
  failedJobsHistoryLimit: 1
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          {{- range .Values.cleanup.crons }}
          - name: {{ .name | quote }}
            image: {{ $.Values.cleanup.imageName }}
            imagePullPolicy: {{ $.Values.cleanup.pullPolicy }}
            args:
            - {{ .command }}
          {{- end}}
          restartPolicy: Never
{{- end }}

And related values:

cleanup:
  enabled: true
  schedule: "0 8 * * 5"
  imageName: digitalocean/doctl:1.60.0
  pullPolicy: IfNotPresent
  crons:
    - command0:
      name: "cleanup0"
      command: command0
    - command1:
      name: "cleanup1"
      command: command1
    - command2:
      name: "cleanup2"
      command: command2
    - command3:
      name: "cleanup3"
      command: command3
    - command4:
      name: "cleanup4"
      command: command4