Cron Jobs in Kubernetes

A lot of time, we need to run periodic jobs using Cron. Kubernetes is an amazing tool for it since it simplifies resource management by spinning up nodes in case of non availability of resources and releasing them in case of excess capacity.

Cron jobs can be deployed by referring to the below sample yaml and running kubectl apply -f

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cron-job
  namespace: "${namespace}"
spec:
  schedule: "0/30 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: cron-jobs
            image: "${repo}:${DRONE_BUILD_NUMBER}"
            env:
              - name: run_environment
                value: ${run_environment}
          restartPolicy: OnFailure

This runs the cron job every 30 minutes

Notes

  • Use envsubst to replace env variables in .yml file
  • Install it in debian using command apt-get install gettext -y
  • Run the deploy in CI/CD using the command cat deploy.yml|envsubst|kubectl apply -f -
  • We set restartPolicy: OnFailure so that, it doesn't keep on restarting the job on completion of it.