Job
Default version: batch/v1
Example
use RenokiCo\PhpK8s\K8s;
$container = K8s::container()
->setName('pi')
->setImage('perl')
->setCommand(['perl', '-Mbignum=bpi', '-wle', 'print bpi(2000)']);
$pod = K8s::pod()
->setName('pi')
->setLabels(['job-name' => 'pi']) // needs job-name: pi so that ->getPods() can work
->setContainers([$container])
->restartOnFailure();
$job = $this->cluster
->job()
->setName('pi')
->setSelectors(['matchLabels' => ['tier' => 'backend']])
->setTemplate($pod)
->create();
Pod Template Retrieval
Jobs rely on pods, so you can get the pod template as K8sPod
class:
$template = $job->getTemplate();
$podName = $template->getName();
To retrieve the pod template as an array, pass false
to the retrieval method:
$pod = $job->getTemplate(false);
$podName = $template['name'];
Getting Pods
To get the pods, the Pod template must have the job-name
label set. This way, the labelSelector
API parameter is issued and you may retrieve the associated pods:
metadata:
name: [here it goes the job name]
spec:
template:
metadata:
labels:
job-name: [here it goes the job name]
You can retrieve the pods as resources controlled by the Job by issuing ->getPods()
:
foreach ($job->getPods() as $pod) {
// $pod->logs()
}
Custom Pod Labels
If you cannot declare the job-name
label or simply want to use something else, you may call selectPods
from the resource:
use RenokiCo\PhpK8s\Kinds\K8sJob;
K8sJob::selectPods(function (K8sJob $job) {
// $job is the current Job
return [
'some-label' => 'some-label-value',
'some-other-label' => "{$job->getName()}-custom-name",
];
});
Job's Restart Policy
You might want to use OnFailure
or Never
as restart policies. These can be applied to the pod before passing it to the job creation chain:
$pod = K8s::pod()
->setName('pi')
->setLabels(['tier' => 'backend'])
->setContainers([$container])
->restartOnFailure(); // restartPolicy: OnFailure
$job->setTemplate($pod);
$pod = K8s::pod()
->setName('pi')
->setLabels(['tier' => 'backend'])
->setContainers([$container])
->neverRestart(); // restartPolicy: Never
$job->setTemplate($pod);
Job Status
The Status API is available to be accessed for fresh instances:
$job->refresh();
$job->getActivePodsCount();
$job->getFailedPodsCount();
$job->getSuccededPodsCount();
You can check if the job completed:
if ($job->hasCompleted()) {
//
}
You can retrieve the null
/\DateTime
instance for start and end times for the job:
$start = $job->getStartTime();
$end = $job->getCompletionTime();
You can also retrieve the amount of time the job ran for:
$seconds = $job->getDurationInSeconds();
Last updated
Was this helpful?