Jobs are short-lived and run for a certain time to completion. They can be executed immediately after being deployed. It is completed after it exits normally (exit 0).
A job is a resource object that is used to control batch tasks. It is different from a long-term servo workload (such as Deployment and StatefulSet).
A job is started and terminated at specific times, while a long-term servo workload runs unceasingly unless being terminated. The pods managed by a job automatically exit after successfully completing the job based on user configurations. The success flag varies according to the spec.completions policy.
Resources have been created. For details, see Creating a Node. If clusters and nodes are available, you need not create them again.
Parameter |
Description |
---|---|
Container Name |
Name the container. |
Pull Policy |
Image update or pull policy. If you select Always, the image is pulled from the image repository each time. If you do not select Always, the existing image of the node is preferentially used. If the image does not exist, the image is pulled from the image repository. |
Image Name |
Click Select Image and select the image used by the container. To use a third-party image, see Using Third-Party Images. |
Image Tag |
Select the image tag to be deployed. |
CPU Quota |
If Request and Limit are not specified, the quota is not limited. For more information and suggestions about Request and Limit, see Configuring Container Specifications. |
Memory Quota |
If Request and Limit are not specified, the quota is not limited. For more information and suggestions about Request and Limit, see Configuring Container Specifications. |
(Optional) GPU Quota |
Configurable only when the cluster contains GPU nodes and the CCE AI Suite (NVIDIA GPU) add-on is installed.
For details about how to use GPUs in the cluster, see Default GPU Scheduling in Kubernetes. |
(Optional) Privileged Container |
Programs in a privileged container have certain privileges. If Privileged Container is enabled, the container is assigned privileges. For example, privileged containers can manipulate network devices on the host machine and modify kernel parameters. |
(Optional) Init Container |
Whether to use the container as an init container. An init container does not support health check. An init container is a special container that runs before other app containers in a pod are started. Each pod can contain multiple containers. In addition, a pod can contain one or more init containers. Application containers in a pod are started and run only after the running of all init containers completes. For details, see Init Containers. |
If the workload contains more than one pod, EVS volumes cannot be mounted.
To disable the standard output of the current workload, add the annotation kubernetes.AOM.log.stdout: [] in Labels and Annotations. For details about how to use this annotation, see Table 1.
A job has the following configuration parameters:
Based on the .spec.completions and .spec.parallelism settings, jobs are classified into the following types.
Job Type |
Description |
.spec.completions |
.spec.parallelism |
---|---|---|---|
One-off jobs |
A job creates one pod until it successfully completes. |
1 |
1 |
Jobs with a fixed completion count |
A job creates one pod in sequence and is complete when the number of successful pods reaches the value of .spec.completions. |
>1 |
1 |
Parallel jobs with a fixed completion count |
A job creates multiple pods in sequence and is complete when the number of successful pods reaches the value of .spec.completions. |
>1 |
>1 |
Parallel jobs with a work queue |
A job creates one or more pods. Each pod takes one task from the message queue, processes it, and repeats until the end of the queue is reached. Then the pod deletes the task and exists. For details, see Fine Parallel Processing Using a Work Queue. |
Leave this parameter blank. |
>1 or =1 |
The following is an example job, which calculates π till the 2000th digit and prints the output.
apiVersion: batch/v1 kind: Job metadata: name: myjob spec: completions: 50 # A total of 50 pods need to run to finish a job. In this example, π is printed for 50 times. parallelism: 5 # A total of 5 pods run in parallel. backoffLimit: 5 # A maximum of 5 retries is allowed. template: spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: Never # For a job, set this parameter to Never or OnFailure. For other controllers (such as Deployments), set this parameter to Always. imagePullSecrets: - name: default-secret
Run the job.
[root@k8s-master k8s]# kubectl apply -f myjob.yaml job.batch/myjob created
kubectl get job
[root@k8s-master k8s]# kubectl get job NAME COMPLETIONS DURATION AGE myjob 50/50 23s 3m45s
If the value of COMPLETIONS is 50/50, the job is successfully executed.
kubectl get pod
[root@k8s-master k8s]# kubectl get pod NAME READY STATUS RESTARTS AGE myjob-29qlw 0/1 Completed 0 4m5s ...
If the status is Completed, the job is complete.
kubectl logs <pod_name>
# kubectl logs myjob-29qlw 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275901
After a one-off job is created, you can perform operations listed in Table 2.
Operation |
Description |
---|---|
Editing a YAML file |
Click More > Edit YAML next to the job name to edit the YAML file corresponding to the current job. |
Deleting a job |
|