An Execution is the basic building block of KubeGene - the smallest and simplest unit in the KubeGene object model that you create or deploy. An Execution represents a group of running jobs on your kubernetes cluster.
You describe a batch of jobs in an Execution object to achieve a common goal(like Gene Sequencing), each job can complete part of the whole work. And all jobs may have some dependent relationship. The jobs can share outputs by pvc or other datastore. KubeGene would schedule each job by the dependents relation.
Note: You should not manage Jobs owned by an Execution. And currently we do not support modification of an existing Execution object.
See Creating an Execution for more information on how to create an Execution.
Creating an Execution
The following is an example of an Execution. It brings up four jobs with the below dependents relation:
a / \ / \ b c / / d
apiVersion: execution.kubegene.io/v1alpha1 kind: Execution metadata: name: test-exec namespace: default spec: tasks: - commands: - echo A dependents: null image: ubuntu name: a type: Job - commands: - echo B dependents: - target: a type: whole image: ubuntu name: b type: Job - commands: - echo C dependents: - target: a type: whole image: ubuntu name: c type: Job - commands: - echo D dependents: - target: b type: whole image: ubuntu name: d type: Job
In this example:
- An Execution named
test-execis created, indicated by the
- The Execution creates four groups of jobs, indicated by
dependentsfiled defines which jobs to depend on. Can define multi-dependents.
imagefield defines the image used by the group of jobs.
tasks is an array of tasks. Each one is consisted of one or multi similar jobs which use same image and require same resources.
kubectl get executions. The output is similar to the following:
NAME AGE test-exec 8s
To see the jobs created by the execution, run
kubectl get jobs:
NAME COMPLETIONS DURATION AGE test-exec.a.0 1/1 1s 16s test-exec.b.0 1/1 2s 15s test-exec.c.0 1/1 2s 15s test-exec.d.0 1/1 2s 13s
And we can check the job
completionTime to verify the jobs start up sequences.
kubectl get pods should now show the pods belonging to the jobs:
NAME READY STATUS RESTARTS AGE test-exec.a.0-jcqt5 0/1 Completed 0 20s test-exec.b.0-nj7bt 0/1 Completed 0 19s test-exec.c.0-xlrlp 0/1 Completed 0 19s test-exec.d.0-nsccq 0/1 Completed 0 17s
Each job is a vertex in DAG. You can check the execution status running
kubectl get executions test-exec.
.status.phase shows the runing phase. And
.status.vertices shows the jobs belonging to this execution and their dependency relation.
apiVersion: execution.kubegene.io/v1alpha1 kind: Execution metadata: creationTimestamp: 2018-10-15T07:46:05Z generation: 1 name: test-exec namespace: gene resourceVersion: "204944" selfLink: /apis/execution.kubegene.io/v1alpha1/namespaces/gene/executions/test-exec uid: 5f144885-d04e-11e8-ad51-286ed488dc10 spec: ... status: finishedAt: 2018-10-15T07:47:52Z message: execution has run successfully phase: Succeeded startedAt: 2018-10-15T07:47:47Z vertices: test-exec.a.0: children: - test-exec.b.0 - test-exec.c.0 finishedAt: null id: test-exec.a.0 message: success name: test-exec.a.0 phase: Succeeded startedAt: null type: "" test-exec.b.0: children: - test-exec.d.0 finishedAt: null id: test-exec.b.0 message: success name: test-exec.b.0 phase: Succeeded startedAt: null type: "" test-exec.c.0: finishedAt: null id: test-exec.c.0 message: success name: test-exec.c.0 phase: Succeeded startedAt: null type: "" test-exec.d.0: finishedAt: null id: test-exec.d.0 message: success name: test-exec.d.0 phase: Succeeded startedAt: null type: ""
- Learn more about Execution behavior:
- How to create complicated Executions
- Delete an Execution and its owned resources.
- Create an execution using GCS