How to deploy and run a container in Kubernetes, that should do his job and terminate?
I thought this is what Run-Once is for, but it looks like it's not supported to work.
I have some jobs, packed in docker images, that should be run either once/on demand (data import), where the config change should trigger re-run, or periodically (like volume backup). My idea was to deploy a container with restartPolicy: never
which would stop and scale up to null after accomplishing.
What alternatives do I have for this missing functionality?
You can use a job/cronjob. This example is from kubernetes docs:
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
backoffLimit: 5
activeDeadlineSeconds: 100
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
So, it will calculate "pi" and will terminate
If you waht a task to be executed just once, or just when you want, you should define a job. From the oficial documentation you can see this example:
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
If you want to execute a task periodically, you should define a job and also a cronjob, defining the frequence you want the job to be executed. The following example is also from the oficial documentation:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure