In this tutorial, we're going to explore "CronJobs" in detail, a powerful feature that lets you schedule and execute tasks at regular intervals in your Kubernetes cluster.
First and foremost, it's essential to grasp the concept of a Kubernetes job. To achieve this, we recommend checking out our tutorial: "Comprehending Kubernetes Jobs."
Understanding Kubernetes CronJobs
A Kubernetes CronJob is an essential part of workload automation. It's named after the classic Unix "cron" utility, which schedules recurring tasks. CronJobs brings this concept into the Kubernetes world, allowing you to schedule tasks using a syntax similar to Unix cron expressions.
Key Features of CronJobs
Schedule: The keystone of a CronJob. You specify when the job should run using cron expressions. This could be daily, weekly, or any other time interval.
ConcurrencyPolicy: How the CronJob handles new executions when a previous one is still running. You have options like
Allow
(concurrency allowed),Forbid
(concurrency disallowed), andReplace
(replace the previous task).StartingDeadlineSeconds: If a scheduled execution is missed, this defines a time window for starting the task. Useful to avoid task accumulation due to failures.
SuccessfulJobsHistoryLimit: (default 3)Specifies the number of completed, successful job executions to retain. Older successful jobs beyond this limit will be deleted.
FailedJobsHistoryLimit: (default 1) Specifies the number of completed, failed job executions to retain. Older failed jobs beyond this limit will be deleted.
JobTemplate: This specifies the job's template, including the pod specification, image, and command.
Creating a Simple CronJob
Let's walk through a straightforward example of creating a Kubernetes CronJob. Imagine you want to back up your application's data every night at midnight.
apiVersion: batch/v1
kind: CronJob
metadata:
name: example-cronjob
spec:
schedule: "0 0 * * *"
startingDeadlineSeconds: 3600 # Maximum time to wait for the job to start
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 3 # Number of successful job completions to retain
failedJobsHistoryLimit: 2 # Number of failed job completions to retain
jobTemplate:
spec:
template:
spec:
containers:
- name: example--cronjob
image: mybackupimage
command: ["/bin/sh", "-c","backup.sh"]
restartPolicy: Never
Conclusion
In conclusion, CronJobs and Jobs are two essential features in Kubernetes for managing scheduled tasks and one-off jobs.