How to Run Kubernetes Jobs | phoenixNAP KB

introduction

A Kubernetes cluster consists of

multiple node machines that host pods, the smallest units in the Kubernetes architecture. A cluster administrator defines the desired state with the required number of pod replicas. Consequently, Kubernetes ensures that the requested number of pods is always up and running.

However, when managing a Kubernetes cluster, certain tasks require pods to finish after completion. To perform those tasks, administrators use specific workload resources called jobs.

This tutorial will show you how to create, manage, and delete Kubernetes jobs.

Prerequisites

A Kubernetes

  • cluster (for testing purposes, you can install Minikube).
  • Kubectl installed.
  • What is Kubernetes

Job?

A

Kubernetes job is a workload controller object that performs one or more finite tasks on a cluster. The finite nature of jobs differentiates them from most controller objects, such as implementations, replica sets, stateful sets, and daemon sets.

Although these objects permanently maintain the desired state and number of pods in the cluster, the jobs

run until they complete the task and then terminate the associated pods.

Kubernetes job use cases

Kubernetes jobs can perform many important tasks in a cluster, including:

Maintenance tasks (such as

    performing backups).

  • Big calculations
  • .

  • Batch tasks (such as sending emails).
  • Monitoring of node behaviors
  • .

  • Work queue management
  • .

  • Some Helm charts use jobs to install applications.

How to create

a Kubernetes job

A job in Kubernetes is created using a YAML file. Follow the steps below to deploy a Kubernetes job.

1. Create a YAML file using a text editor.

nano [file name].yaml

The file provides the settings needed for the job

.

2. The following example creates a test job file. This job runs a pod with a container based on the alpine:latest Docker image. Inside the container, the job prints the numbers from one to nine and then finishes the container.

apiVersion: batch/v1 kind: Job metadata: name: test-job spec: template: metadata: name: test-job spec: containers: – name: test image: alpine:latest command: – “bin/sh” – “-c” – “for i in 1 2 3 4 5 6 7 8 9 ; echo $i ; done” restartPolicy: Never

save and exit the file

. 3. Apply the YAML file with kubectl

: kubectl

apply -f [file name].yaml

The result confirms the successful creation of the job

.

4. Confirm the job execution by checking the status of the pods in the cluster

: kubectl get pod The

READY column shows that the pod is no longer running and the pod status is Completed

. Use kubectl describes

to view pod details: kubectl describes

pod [pod-name] The output shows the status

of the pod’s as OK

.

The containers in the output shows the status of the container as Finished. The reason for termination is the completion of the operation.

You can also check the job itself by typing the following command:

kubectl get job

The COMPLETIONS column shows that the job completed successfully

. Kubernetes job management You can configure a

Kubernetes job

to run once or multiple times. Multiple instances of a single job can run successively or simultaneously.

Run

job more than once

To configure a job to perform the same task more than once, add the completion field in the specifications section of the YAML manifest.

apiVersion: batch/v1 kind: Job metadata: name: test-job spec: completions: 10 template: metadata: name: test-job spec: containers: – name: test image: alpine:latest command: – “bin/sh” – “-c” – “for i in 1 2 3 4 5 6 7 8 9 ; echo $i ; done” restartPolicy: Never After applying the above YAML, use the -watch flag with kubectl get

to monitor job completion in real time. kubectl get job -watch

When configured in this way, the job completes a single task instance and starts another until it reaches the number of completions provided in the YAML file

.

Run

parallel worker instances Kubernetes can run more than one task instance at the same time. With sufficient resources, this action improves the speed of job completion.

To use this feature, enter the number of tasks you want the system to run simultaneously in the spec.parallelism field of the YAML file.

The following example defines a job that runs ten times, with five instances running simultaneously.

apiVersion: batch/v1 kind: Job metadata: name: test-job spec: Terminations: 10 Parallelism: 5 Template: Metadata: Name: Test job specification: Containers: – name: test image: alpine:last command: – “bin/sh” – “-c” – “for i in 1 2 3 4 5 6 7 8 9 ; echo $i ; done” restartPolicy: Never After applying the YAML file

, check the progress

of the job: kubectl get job -watch

The result shows that the task was performed much faster with the included parallelism option:

Limit time for job completion

Include the spec.activeDeadlineSeconds field in the YAML manifesto of work to limit the duration of work. The numeric value corresponds to the number of seconds after which the job ends, regardless of whether it was fully performed.

The following example shows a job that will repeat ten times, unless it exceeds the ten-second limit

: apiVersion: batch/v1 kind: Job metadata: name: test-job spec: completions: 10 activeDeadlineSeconds: 10 template: metadata: name: test-job spec: containers: – name: test image: alpine:latest command: – “bin/sh” – “-c” – “for i in 1 2 3 4 5 6 7 8 9 ; echo $i ; done” restartPolicy: Never

save and apply the file. After some time, check

the status of the pods: kubectl get pod

The output shows only three completed pods

.

Check job status

: kubectl get job -watch The

result shows the last instance of work completed at the ten-second mark

.

To see why the job stopped running, view the job details by typing:

kubectl describes job [job name]

The reason given in the command output is DeadlineExceeded

.

Schedule work

Use CronJobs to create repeated tasks or schedule jobs to be performed later. CronJobs uses the Cron programming format used in Linux to program commands and scripts.

To learn more about CronJobs, read our

CronJob Kubernetes Guide. How to delete Kubernetes jobs Delete a job in Kubernetes using the following command: kubectl delete job [job-name] Alternatively, delete the job

using your YAML file:

kubectl delete -f [filename].yaml

The result confirms the successful deletion of the job

.

Conclusion

After reading this tutorial, you should know how to deploy and configure Kubernetes jobs to meet the needs of your cluster.

To learn more about Kubernetes objects, read How to create and use ConfigMap.