Executing Your First Job
The following tutorial walks you through how to create and execute an example JobConfig, as well as scheduling future Jobs.
Create a JobConfig
First, create an example JobConfig.
- From URL
- Manually
Install the example JobConfig from GitHub in a single one-liner:
kubectl create -f https://raw.githubusercontent.com/furiko-io/furiko/main/examples/jobconfigs/10-example-jobconfig.yaml
For more explainable and runnable examples of JobConfigs, refer to https://github.com/furiko-io/furiko/tree/main/examples/jobconfigs.
Copy the following and save it into a local file, editing it as necessary:
apiVersion: execution.furiko.io/v1alpha1
kind: JobConfig
metadata:
  name: example-jobconfig
spec:
  # Defines how the JobConfig shall be executed automatically on schedule.
  schedule:
    cron:
      expression: "*/5 * * * *"
    disabled: true
  # Prevents multiple executions of the same JobConfig.
  concurrency:
    policy: Forbid
  # Defines how to create the Job.
  template:
    spec:
      taskTemplate:
        pod:
          spec:
            containers:
              - name: container
                image: alpine
                command:
                  - echo
                  - "Hello World"
Next, apply the YAML to the cluster:
kubectl apply -f example-jobconfig.yaml
Executing the Job
Using the furiko command-line tool, execute the Job immediately as an ad-hoc execution:
furiko run example-jobconfig
You can view more details about the Job that was executed (press Tab to expand to the most recent job execution):
furiko get job example-jobconfig-
The following is a real-time demo of the above steps:

Enable automatic scheduling
The above example JobConfig is in ReadyDisabled state initially. Enable the JobConfig's schedule:
furiko enable example-jobconfig
The above cron expression is */5 * * * *, which means to run every 5 minutes. Wait for a while, and you should be able to see that the Job was automatically scheduled:
furiko list job --for=example-jobconfig
The above command lists all recent Jobs that were executed by the JobConfig. You should see something similar to the following output:
NAME                           PHASE       START TIME   RUN TIME   FINISH TIME
example-jobconfig-1670952000   Succeeded   16s                     16s
Scheduling future executions
We can also schedule a future execution for the JobConfig:
furiko run example-jobconfig --at 2023-01-26T18:15:00Ztip
The timestamp above is dynamically generated to be at most 5 minutes in the future - copy the code block and try it out!
This queues the Job to be executed at a later time. List all jobs for the JobConfig again:
furiko list job --for=example-jobconfig
We should now see that the Job is in the Queued state.
NAME                           PHASE       START TIME   RUN TIME   FINISH TIME
example-jobconfig-5wpnv        Queued
We can view more information about the Job before it has started running:
furiko get job example-jobconfig-5wpnv
We should see that it is indeed not yet started, and will be started in a few minutes time:
JOB INFO
Name:                example-jobconfig-5wpnv
Namespace:           default
Type:                Adhoc
Created:             Wed, 14 Dec 2022 01:26:23 +08:00 (9 seconds ago)
Job Config:          example-jobconfig
Start After:         Wed, 14 Dec 2022 01:30:00 +08:00 (in 3 minutes)
Concurrency Policy:  Enqueue
JOB STATUS
Phase:    Queued
Reason:   NotYetDue
Message:  Job is queued to start no earlier than 2022-12-13 17:30:00 +0000 UTC
In the above example, notice that the job is scheduled to be started exactly at 01:30:00. By right, the cron schedule */5 * * * * should have also scheduled another Job at 01:30:00. However, since we are using the Forbid concurrency policy, this prevents multiple concurrent Jobs from being executed at the same time.
After waiting until 01:30:00, we can verify that there were indeed no other executions that started at the same time:
NAME                           PHASE       START TIME   RUN TIME   FINISH TIME
example-jobconfig-1670952300   Succeeded   6m                      6m
example-jobconfig-1670952600   Succeeded   1m                      1m