Containers

Working with Kubernetes Jobs and Cronjobs

Pinterest LinkedIn Tumblr

Kubernetes jobs execute one time task. A Job creates one or more Pods and will continue to retry execution of the Pods until a specified number of them successfully terminate.

Running an example Job

apiVersion: batch/v1
kind: Job
metadata:
  name: query-k8s-apps
spec:
  ttlSecondsAfterFinished: 100
  template:
    spec:
      containers:
      - args:
        - -c
        - /apps/query-k8s-apps -n dev,qa
        command:
        - /bin/sh
      - name: query-k8s-apps
        image: ektowett/query-k8s-apps:latest
        env:
        - name: CONTEXTS
          value: cloud_okteto_com
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              key: password
              name: rails-mariadb-secret
      restartPolicy: Never
  backoffLimit: 4

Execute

kubectl apply -f job.yaml

Output job as yaml:

kubectl get job myjob -o yaml

Job termination and cleanup

When a Job completes, no more Pods are created, but the Pods are not deleted either. Keeping them around allows you to still view the logs of completed pods to check for errors, warnings, or other diagnostic output. The job object also remains after it is completed so that you can view its status. It is up to the user to delete old jobs after noting their status. Delete the job with kubectl (e.g. kubectl delete jobs/pi or kubectl delete -f ./job.yaml). When you delete the job using kubectl, all the pods it created are deleted too.

CronJob

A CronJob creates Jobs on a repeating schedule. One CronJob object is like one line of a crontab (cron table) file. It runs a job periodically on a given schedule, written in Cron format.

Example

apiVersion: batch/v1
kind: CronJob
metadata:
  name: query-k8s-apps
spec:
  schedule: "*/5 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: query-k8s-apps
            image: ${dockerRegistry}:${env.BRANCH_NAME}-${COMMIT_ID.take(10)}
            imagePullPolicy: IfNotPresent
            env:
            - name: CONTEXTS
              value: cloud_okteto_com
            - name: APP_URL
              value: http://iserve.kip0127.cloud.okteto.net/api/v1/k8s-versions
            - name: NAMESPACES
              value: kip0127
          restartPolicy: OnFailure

Get a list of cronjobs present:

kubectl get cronjobs

I am a Devops Engineer, but I would describe myself as a Tech Enthusiast who is a fan of Open Source, Linux, Automations, Cloud and Virtualization. I love learning and exploring new things so I blog in my free time about Devops related stuff, Linux, Automations and Open Source software. I can also code in Python and Golang.

Write A Comment