Создание Job

Jobs выполняются в течение определенного времени до их завершения. Они могут быть выполнены сразу после развертывания. Job завершается после кода завершения (exit 0).

Job — это объект ресурса, который используется для управления пакетными заданиями. Он отличается от long-term servo рабочих нагрузок (Deployment и StatefulSet).

Job запускается и завершается в определенное время, а рабочие нагрузки, рассчитанные на длительное выполнение, работают непрерывно до завершения. Управляемые Job поды автоматически завершаются после успешного выполнения Job согласно настройкам. «Success» флаг меняется в зависимости от политики spec.completions.

Типы Jobs:

  • Разовые Jobs: один под запускается один раз до успешного завершения.

  • Jobs с фиксированным количеством успехов: N подов запускаются до успешного завершения.

  • Queue Job считается завершенным на основании global success, подтвержденного приложением.

Вы можете создавать Jobs в консоли CCE или с помощью команд kubectl.

Перед началом работы

Создайте кластер и узел, проверьте, что они находится в статусе «Running».

Создание рабочей нагрузки в консоли ССЕ

Чтобы создать рабочую нагрузку:

  1. Войдите в консоль управления Advanced:

  2. Чтобы открыть список сервисов, нажмите Service List.

  3. Выберите Computing → Cloud Container Engine.

  4. В консоли управления CCE выберите Clusters.

  5. Нажмите на название созданного кластера.

  6. В левом меню выберите Workloads.

  7. Перейдите на вкладку Job.

  8. Нажмите Create Workload.

  9. Заполните поле Basic Info:

    Параметр

    Описание

    Workload Type

    Выберите тип рабочей нагрузки Job.

    Workload Name

    Укажите название рабочей нагрузки.

    Namespace

    Выберите пространство имен рабочей нагрузки.

    По умолчанию — default. Чтобы создать новое, нажмите Create Namespace.

    Pods

    Укажите количество подов в рабочей нагрузке.

    Time Zone Synchronization

    Синхронизация времени. Позволяет контейнерам и узлам работать в одном часовом поясе. Эта функция зависит от локального диска, подключенного к контейнеру. Не изменяйте и не удаляйте часовой пояс.

    Активируйте этот параметр при необходимости.

    Cluster Name

    Название кластера указано по умолчанию.

    (Опционально) Description

    Описание рабочей нагрузки.

    Добавьте при необходимости.

  10. Заполните поле Container Settings согласно таблице ниже. Чтобы настроить несколько контейнеров в поде, нажмите Add Container.

    Параметр

    Описание

    Basic Info

    Выполните базовые настройки контейнера.

    Lifecycle

    Настройте параметры жизненного цикла контейнера.

    Environment Variables

    Настройте окружение.

    Data Storage

    Настройте хранение данных.

    Примечание

    Если рабочая нагрузка содержит больше одного пода, томы EVS не могут быть смонтированы.

    Logging

    Настройте сбор логов контейнера.

    Image Access Credential

    Укажите учетные данные, используемые для доступа к хранилищу образов.

    По умолчанию — default-secret. Этот секрет можно использовать для доступа к образам в SWR. Чтобы создать новый, нажмите Create Secret.

    GPU

    Инстанс рабочей нагрузки будет запланирован для узла с указанным типом графической карты GPU.

    По умолчанию — All.

  11. Заполните поле Advanced Settings:

    Параметр

    Описание

    Labels and Annotations

    Настройте метки и аннотации.

    Job Settings

    Задайте параметры:

    • Parallel Pods — максимальное количество подов, которые могут запускаться параллельно во время выполнения Job. Это значение не может быть больше, чем общее количество подов в Job.

    • Timeout (s) — как только Job достигнет указанного времени, статус Job станет неуспешным, и все поды в этом Job будут удалены. Если не задать этот параметр, Job не завершится по истечении времени.

  12. Нажмите Create Workload.

После успешного создания рабочая нагрузка появится со статусом «Running» на вкладке Jobs.

Создание рабочей нагрузки через kubectl

Конфигурация Job:

  • spec.template — имеет ту же схему, что и под.

  • RestartPolicy — может быть установлено только Never или OnFailure.

  • Job с одним подом завершится после успешного запуска пода по умолчанию.

  • .spec.completions — указывает количество подов, которые должны успешно запуститься до завершения. Значение по умолчанию «1».

  • .spec.parallelism — указывает количество подов, которые запускаются параллельно. Значение по умолчанию «1».

  • spec.backoffLimit — указывает максимальное количество попыток, выполняемых в случае сбоя пода. Если указать «2», то Job дважды попробует запустить под и остановится.

  • .spec.activeDeadlineSeconds — указывает время выполнения подов. По истечении этого времени все поды Job завершаются. Приоритет .spec.activeDeadlineSeconds выше, чем у .spec.backoffLimit. То есть, если Job достигает .spec.activeDeadlineSeconds, spec.backoffLimit игнорируется.

В зависимости от настроек .spec.completions и .spec.Parallelism Jobs делятся на типы:

Тип Job

Описание

Пример

Разовые Jobs

Один под запускается один раз до успешного завершения

Миграция базы данных

Jobs с фиксированным количеством запусков

Один под запускается до достижения указанного количества завершений

Обработка рабочей очереди подом

Параллельные Jobs с фиксированным количеством завершений

Несколько подов запускается до достижения указанного количества завершений

Параллельная обработка рабочих очередей несколькими подами

Параллельные Jobs

Одна или несколько подов запускаются до успешного завершения

Параллельная обработка рабочих очередей несколькими подами

Ниже приведен пример Job, которое вычисляет π до 2000-го разряда и выводит результат.

apiVersion: batch/v1
kind: Job
metadata:
  name: myjob
spec:
  completions: 50        # 50 pods need to be run to finish a job. In this example, π 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

Описание:

  • apiVersion: batch/v1 — указывает версию текущего Job.

  • kind: Job — указывает, что текущим ресурсом является Job.

  • restartPolicy: Never — указывает текущую политику перезапуска. Для Job этот параметр может быть установлен только в значении «Never» или «OnFailure».

Запуск Job

  1. Запустите Job, введите:

    [root@k8s-master k8s]# kubectl apply -f myjob.yaml
    job.batch/myjob created
    
  2. Посмотрите информацию о Job, введите kubectl get job:

    [root@k8s-master k8s]# kubectl get job
    NAME    COMPLETIONS   DURATION   AGE
    myjob   50/50         23s        3m45s
    

Если значение COMPLETIONS равно 50/50, Job выполнен успешно.

  1. Запросите статус пода, введите kubectl get pod:

      [root@k8s-master k8s]# kubectl get pod
      NAME          READY   STATUS      RESTARTS   AGE
      myjob-29qlw   0/1     Completed   0          4m5s
      ...
    
    Если статус "Completed", Job завершен.
    
  2. Просмотрите логи пода, введите kubectl logs:

    # kubectl logs myjob-29qlw
    3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275901
    

Связанные операции

Операция

Описание

Изменение YAML-файла

Чтобы изменить YAML-файл, нажмите More → Edit YAML рядом с названием Job.

Удаление Job

  1. В столбце Operation нажмите Delete.

  2. Нажмите Yes.

Удаленные Jobs нельзя восстановить. Соблюдайте осторожность при выполнении этой операции.

Запустили Evolution free tier
для Dev & Test
Получить