kubernetes-hands-on/09-cronjob/README.md

87 lines
2.1 KiB
Markdown
Raw Normal View History

2019-05-09 19:40:47 +06:00
# Running a background process: `cronjob`
## Introduction
In this section you will learn how to run background tasks using crons & jobs.
2019-05-09 19:40:47 +06:00
## `CronJob`
Let's start with crons. Crons are like the cron in linux a time-based job scheduler.
```yml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: simple-cronjob
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
restartPolicy: Never
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(100)"]
```
* `spec`:
* `schedule`: when to start this cron, in the same format as the linux crons. `*/2 * * * *` means every 2 minutes
* `jobTemplate`: the template of the container(s) to start
* `command`: the command to run, here compute the first 100 digits of π.
Let's apply it:
2019-05-21 15:10:59 +06:00
```sh
2019-05-09 19:40:47 +06:00
$ kubectl apply -f 09-cronjob/01-simple-cronjob.yml
cronjob.batch "simple-cronjob" created
```
Wait a bit and access the logs of the pod created by the cron.
## `Job`
If you need to run a one time job, you can use the `Job` in Kubernetes. In fact the `CronJob` will start a `Job` for you at the scheduled interval.
2019-05-09 19:40:47 +06:00
```yml
apiVersion: batch/v1
kind: Job
metadata:
name: simple-job
spec:
template:
spec:
containers:
- name: c
image: busybox
command: ["sh", "-c", "echo Processing item $ITEM && sleep 5"]
restartPolicy: Never
```
This manifest is fairly close to a `CronJob`.
Apply it and see what is happening. Does it restart?
2019-05-09 19:40:47 +06:00
2019-05-21 15:10:59 +06:00
```sh
2019-05-09 19:40:47 +06:00
$ kubectl apply -f 09-cronjob/02-simple-job.yml
job.batch "simple-job" created
```
If you have a long running background process - like a consumer of a queue - you can use a `deployment` without a `service`.
## Exercises
1. Transform the `simple-job` to a cron job running every 2 minutes
2. Transform the `simple-cronjob` in a deployment of `1` replica, and compute the 1_000 first digits of π. What is happening when the container finishes?
## Clean up
2019-05-21 15:10:59 +06:00
```sh
2019-05-09 19:40:47 +06:00
kubectl delete deployment,rs,service,cronjob,pod --all
```
## Links
* https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/