Friday, December 27, 2024
Google search engine
HomeGuest BlogsKubernetes CronJob Guide

Kubernetes CronJob Guide

Introduction

A Job is a Kubernetes object type whose purpose is to allow administrators to perform finite tasks inside a cluster. Unlike other Kubernetes objects, which ensure the desired number of pods are always running, Jobs terminate pods once the operation finishes.

Regular Kubernetes Jobs can run multiple times if the number of completions declared in the YAML file is larger than one. However, each job instance runs either simultaneously with others or immediately after the previous one completes. To schedule job instances for a later time, use the CronJob controller.

This tutorial will teach you how to deploy and use Kubernetes CronJobs.

Kubernetes CronJob Guide.Kubernetes CronJob Guide.

Prerequisites

  • A Kubernetes cluster (Minikube is sufficient for testing).
  • kubectl CLI tool installed.

What is Kubernetes CronJob?

The CronJob is a Kubernetes controller that creates Jobs on a repeating schedule. It utilizes the Cron scheduling format used in Linux for script and command scheduling.

CronJobs are used for regularly repeating cluster actions, such as report generation and backups. Furthermore, they allow administrators to schedule an individual task for a later time, such as a period of low activity in the cluster.

How to Create Kubernetes CronJob

Creating a CronJob is similar to creating a regular Job. The YAML manifest file defines:

  • Name of the job.
  • Containers to run in the pod.
  • Commands to execute.

Follow the steps below to create a CronJob on your cluster.

1. Create a YAML file in a text editor.

nano [filename].yaml

2. Configure the CronJob in the file. The spec.schedule field provides the frequency of the job’s repetition.

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: test-cron-job
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    metadata:
      name: test-job
    spec:
      template:
        spec:
          containers:
          - name: test
            image: alpine:latest
            command:
            - "bin/sh"
            - "-c"
            - "for i in 1 2 3 4 5 6 7 8 9 ; do echo $i ; done"
          restartPolicy: Never

The example above creates a job that executes every minute. The job creates a pod running the alpine:latest image and then runs commands to print numbers from one to nine in the shell.

Save the file and exit.

3. Apply the configuration with kubectl apply.

kubectl apply -f [filename].yaml

The output confirms the CronJob creation.

Applying the cronjob YAML file with kubectl.Applying the cronjob YAML file with kubectl.

4. Use kubectl get with the --watch option to monitor the task execution in real time.

kubectl get cronjob --watch

The output shows that the job is executed approximately every minute.

Monitoring the cronjob execution in real time.Monitoring the cronjob execution in real time.

Note: One of the CronJob limitations is that it does not always precisely follow the schedule configured in the manifest. While these occurrences are rare, it is possible that at the time of the scheduled execution, no jobs will start or two jobs will be created.

How to Configure CronJob

The cron syntax in the spec.schedule field is five characters long, and each character represents one division of time. The table below shows the numbers that can populate each field.

* * * * *
Minutes
(0-59)
Hours
(0-23)
Days in a month
(1-31)
Months
(1-12)
Weekdays
(0-6)
(Sunday to Saturday)

Note: Some systems accept numbers from one to seven in the weekdays field. In those systems, both zero and seven stand for Sunday.

An asterisk symbol in an expression signifies the unrestricted value. The example below schedules a job for 10 PM every Friday, regardless of the date:

0 22 * * 5

The next example schedules the job for August 28 at 9:15 AM.

15 9 28 8 *

You can also schedule tasks to be performed at a time interval. For example, to schedule a task every hour, type:

* */1 * * *

How to Delete CronJob

Use kubectl delete to remove the CronJob and related pods from the cluster.

kubectl delete cronjob [cronjob-name]

The output confirms the successful deletion.

Deleting the cronjob and the associated pods with kubectl.Deleting the cronjob and the associated pods with kubectl.

You can also delete the CronJob by referring to its YAML file:

kubectl delete -f [filename].yaml

Note: With solutions such as Rancher cluster integration and fast and reliable servers, phoenixNAP’s Bare Metal Cloud is a great place to host your cluster.

Conclusion

After reading this article, you should be able to create and configure CronJobs on your Kubernetes Cluster. The tutorial included creation of a YAML manifest file, configuration options, and the ways to remove the CronJob from your cluster.

Was this article helpful?
YesNo

RELATED ARTICLES

Most Popular

Recent Comments