- tocdepth
2
Создание 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».
Создание рабочей нагрузки в консоли ССЕ
Чтобы создать рабочую нагрузку:
Войдите в консоль управления Advanced:
В списке сервисов выберите Cloud Container Engine.
В консоли управления CCE выберите Clusters.
Нажмите на название созданного кластера.
В левом меню выберите Workloads.
Перейдите на вкладку Job.
Нажмите Create Workload.
Заполните поле Basic Info:
Параметр
Описание
Workload Type
Выберите тип рабочей нагрузки Job.
Workload Name
Укажите название рабочей нагрузки.
Namespace
Выберите пространство имен рабочей нагрузки.
По умолчанию — default. Чтобы создать новое, нажмите Create Namespace.
Pods
Укажите количество подов в рабочей нагрузке.
Time Zone Synchronization
Синхронизация времени. Позволяет контейнерам и узлам работать в одном часовом поясе. Эта функция зависит от локального диска, подключенного к контейнеру. Не изменяйте и не удаляйте часовой пояс.
Активируйте этот параметр при необходимости.
Cluster Name
Название кластера указано по умолчанию.
(Опционально) Description
Описание рабочей нагрузки.
Добавьте при необходимости.
Заполните поле Container Settings согласно таблице ниже. Чтобы настроить несколько контейнеров в поде, нажмите Add Container.
Параметр
Описание
Basic Info
Выполните базовые настройки контейнера.
Lifecycle
Настройте параметры жизненного цикла контейнера.
Environment Variables
Настройте окружение.
Data Storage
Настройте хранение данных.
Примечание
Если рабочая нагрузка содержит больше одного пода, томы EVS не могут быть смонтированы.
Logging
Настройте сбор логов контейнера.
Image Access Credential
Укажите учетные данные, используемые для доступа к хранилищу образов.
По умолчанию — default-secret. Этот секрет можно использовать для доступа к образам в SWR. Чтобы создать новый, нажмите Create Secret.
GPU
Инстанс рабочей нагрузки будет запланирован для узла с указанным типом графической карты GPU.
По умолчанию — All.
Заполните поле Advanced Settings:
Параметр
Описание
Labels and Annotations
Настройте метки и аннотации.
Job Settings
Задайте параметры:
Parallel Pods — максимальное количество подов, которые могут запускаться параллельно во время выполнения Job. Это значение не может быть больше, чем общее количество подов в Job.
Timeout (s) — как только Job достигнет указанного времени, статус Job станет неуспешным, и все поды в этом Job будут удалены. Если не задать этот параметр, Job не завершится по истечении времени.
Нажмите 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
Запустите Job, введите:
[root@k8s-master k8s]# kubectl apply -f myjob.yaml job.batch/myjob created
Посмотрите информацию о Job, введите kubectl get job:
[root@k8s-master k8s]# kubectl get job NAME COMPLETIONS DURATION AGE myjob 50/50 23s 3m45s
Если значение COMPLETIONS равно 50/50, Job выполнен успешно.
Запросите статус пода, введите kubectl get pod:
[root@k8s-master k8s]# kubectl get pod NAME READY STATUS RESTARTS AGE myjob-29qlw 0/1 Completed 0 4m5s ... Если статус "Completed", Job завершен.
Просмотрите логи пода, введите kubectl logs:
# kubectl logs myjob-29qlw 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275901
Связанные операции
Операция |
Описание |
---|---|
Изменение YAML-файла |
Чтобы изменить YAML-файл, нажмите рядом с названием Job. |
Удаление Job |
Удаленные Jobs нельзя восстановить. Соблюдайте осторожность при выполнении этой операции. |
для Dev & Test