Task Executors
Furiko supports an extensible task executor interface, which allows tasks to be created, managed and reconciled in the same way regardless of the actual backing object.
Task Index
A Job creates one or more tasks during its lifecycle. Each task corresponds to a single parallel and retry index for the Job:
- Parallel Index: If the Job has N parallel tasks, then there are N parallel indexes. Otherwise, there is 1 parallel index (i.e. it is not parallel).
- Retry Index: If the Job specifies
maxAttempts
of M, then there are up to M retry indexes.
Therefore, each Task corresponds to a single (N, M)
combination of the above indexes. As an example, for a Job with a parallelism factor of 3 and maxAttempts
of 2
, up to 6 tasks will be created for the Job (assuming that each attempt had failed).
Task Executor List
Currently the only task executor available in Furiko is pod
, but more task executors are planned in the Roadmap.
pod
Each task will be created as a Pod. On a typical Kubernetes cluster, this translates to one or more containers that run to completion.
Example Pod TaskTemplate
taskTemplate:
pod:
metadata:
annotations:
app.kubernetes.io/name: jobconfig-sample-pod
spec:
containers:
- args:
- echo
- Hello world!
image: alpine
name: job-container
resources:
limits:
cpu: 100m
memory: 64Mi
Virtual Pods
Using tools such as Virtual Kubelet, it may be possible for the Pods to manifest as objects other than a CRI container in Kubernetes.
If Virtual Kubelet is provisioned in the cluster, some possible use cases include:
- Running Pods on serverless compute platforms like AWS Fargate
- Extending to multi-cluster with Admiralty
The usage and support of Virtual Kubelet is outside the scope of the Furiko project.
argoWorkflow
note
Currently planned in the Roadmap.
Each task will be created as an Argo Workflow
object. Requires Argo Workflows to be installed in the cluster (not included with Furiko).