proposalbot 85e1a6ed92 Changes to cce_umn from docs/doc-exports#770 (Added the support of the OS for fe
Reviewed-by: Eotvos, Oliver <oliver.eotvos@t-systems.com>
Co-authored-by: proposalbot <proposalbot@otc-service.com>
Co-committed-by: proposalbot <proposalbot@otc-service.com>
2023-06-20 14:44:25 +00:00

194 lines
13 KiB
ReStructuredText

:original_name: cce_10_0150.html
.. _cce_10_0150:
Creating a Job
==============
Scenario
--------
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.
- One-off jobs: A single pod runs once until successful termination.
- Jobs with a fixed success count: N pods run until successful termination.
- A queue job is considered completed based on the global success confirmed by the application.
Prerequisites
-------------
Resources have been created. For details, see :ref:`Creating a Node <cce_10_0363>`. If clusters and nodes are available, you need not create them again.
Using the CCE Console
---------------------
#. Log in to the CCE console.
#. Click the cluster name to go to the cluster console, choose **Workloads** in the navigation pane, and click the **Create Workload** in the upper right corner.
#. Set basic information about the workload.
**Basic Info**
- **Workload Type**: Select **Job**. For details about workload types, see :ref:`Overview <cce_10_0006>`.
- **Workload Name**: Enter the name of the workload. Enter 1 to 63 characters starting with a lowercase letter and ending with a letter or digit. Only lowercase letters, digits, and hyphens (-) are allowed.
- **Namespace**: Select the namespace of the workload. The default value is **default**. You can also click **Create Namespace** to create one. For details, see :ref:`Creating a Namespace <cce_10_0278>`.
- **Pods**: Enter the number of pods.
- **Container Runtime**: A CCE cluster uses runC by default, whereas a CCE Turbo cluster supports both runC and Kata. For details about the differences between runC and Kata, see :ref:`Kata Containers and Common Containers <cce_10_0463>`.
**Container Settings**
- Container Information
Multiple containers can be configured in a pod. You can click **Add Container** on the right to configure multiple containers for the pod.
- **Basic Info**: See :ref:`Setting Basic Container Information <cce_10_0396>`.
- **Lifecycle**: See :ref:`Setting Container Lifecycle Parameters <cce_10_0105>`.
- **Environment Variables**: See :ref:`Setting an Environment Variable <cce_10_0113>`.
- **Data Storage**: See :ref:`Overview <cce_10_0307>`.
.. note::
If the workload contains more than one pod, EVS volumes cannot be mounted.
- **Logging**: See :ref:`Using ICAgent to Collect Container Logs <cce_10_0018>`.
- **Image Access Credential**: Select the credential used for accessing the image repository. The default value is **default-secret**. You can use default-secret to access images in SWR. For details about **default-secret**, see :ref:`default-secret <cce_10_0388__section11760122012591>`.
- **GPU graphics card**: **All** is selected by default. The workload instance will be scheduled to the node with the specified GPU graphics card type.
**Advanced Settings**
- **Labels and Annotations**: See :ref:`Pod Labels and Annotations <cce_10_0386>`.
- **Job Settings**:
- **Parallel Pods**: Maximum number of pods that can run in parallel during job execution. The value cannot be greater than the total number of pods in the job.
- **Timeout (s)**: Once a job reaches this time, the job status becomes failed and all pods in this job will be deleted. If you leave this parameter blank, the job will never time out.
#. Click **Create Workload** in the lower right corner.
.. _cce_10_0150__section450152719412:
Using kubectl
-------------
A job has the following configuration parameters:
- **spec.template**: has the same schema as a pod.
- **RestartPolicy**: can only be set to **Never** or **OnFailure**.
- For a single-pod job, the job ends after the pod runs successfully by default.
- **.spec.completions**: indicates the number of pods that need to run successfully to end a job. The default value is **1**.
- **.spec.parallelism**: indicates the number of pods that run concurrently. The default value is **1**.
- **spec.backoffLimit**: indicates the maximum number of retries performed if a pod fails. When the limit is reached, the pod will not try again.
- **.spec.activeDeadlineSeconds**: indicates the running time of pods. Once the time is reached, all pods of the job are terminated. The priority of .spec.activeDeadlineSeconds is higher than that of .spec.backoffLimit. That is, if a job reaches the .spec.activeDeadlineSeconds, the spec.backoffLimit is ignored.
Based on the **.spec.completions** and **.spec.Parallelism** settings, jobs are classified into the following types.
.. table:: **Table 1** Job types
+---------------------------------------------+-----------------------------------------------------------------------+-------------------------------------------------------+
| Job Type | Description | Example |
+=============================================+=======================================================================+=======================================================+
| One-off jobs | A single pod runs once until successful termination. | Database migration |
+---------------------------------------------+-----------------------------------------------------------------------+-------------------------------------------------------+
| Jobs with a fixed completion count | One pod runs until reaching the specified **completions** count. | Work queue processing pod |
+---------------------------------------------+-----------------------------------------------------------------------+-------------------------------------------------------+
| Parallel jobs with a fixed completion count | Multiple pods run until reaching the specified **completions** count. | Multiple pods for processing work queues concurrently |
+---------------------------------------------+-----------------------------------------------------------------------+-------------------------------------------------------+
| Parallel jobs | One or more pods run until successful termination. | Multiple pods for processing work queues concurrently |
+---------------------------------------------+-----------------------------------------------------------------------+-------------------------------------------------------+
The following is an example job, which calculates Pi till the 2000\ :sup:`th` digit and prints the output.
.. code-block::
apiVersion: batch/v1
kind: Job
metadata:
name: myjob
spec:
completions: 50 # 50 pods need to be run to finish a job. In this example, Pi is printed for 50 times.
parallelism: 5 # 5 pods are run in parallel.
backoffLimit: 5 # The maximum number of retry times is 5.
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
**Description**
- **apiVersion: batch/v1** indicates the version of the current job.
- **kind: Job** indicates that the current resource is a job.
- **restartPolicy: Never** indicates the current restart policy. For jobs, this parameter can only be set to **Never** or **OnFailure**. For other controllers (for example, Deployments), you can set this parameter to **Always**.
**Run the job.**
#. Start the job.
.. code-block:: console
[root@k8s-master k8s]# kubectl apply -f myjob.yaml
job.batch/myjob created
#. View the job details.
**kubectl get job**
.. code-block:: console
[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.
#. Query the pod status.
**kubectl get pod**
.. code-block:: console
[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.
#. View the pod logs.
**kubectl logs**
.. code-block::
# kubectl logs myjob-29qlw
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275901
Related Operations
------------------
After a one-off job is created, you can perform operations listed in :ref:`Table 2 <cce_10_0150__t84075653e7544394939d13740fad0c20>`.
.. _cce_10_0150__t84075653e7544394939d13740fad0c20:
.. table:: **Table 2** Other operations
+-----------------------------------+-------------------------------------------------------------------------------------------------------------+
| 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 | #. Select the job to be deleted and click **Delete** in the **Operation** column. |
| | |
| | #. Click **Yes**. |
| | |
| | Deleted jobs cannot be restored. Exercise caution when deleting a job. |
+-----------------------------------+-------------------------------------------------------------------------------------------------------------+