Job Scheduler
Allow users to schedule regular and repetitive jobs.
Features
- Job: It has all the features that Job Submission has.
- Recurrence: Allow to set Inactive, Daily, Weekly, Monthly, Custom Cron Format.
- Run Manually: Allow to run scheduled jobs manually.
Configuration
Please add this variable to the .env
file.
Name | Value |
---|---|
PRIMEHUB_FEATURE_JOB_SUBMISSION | true |
Design
Custom Resource
A custom resource PhSchedule
is defined for PrimeHub-defined scheduled job. It utilizes the PrimeHub-defined job. It will submit a job regularly based on recurrence settings and job settings.
Here is an example of PhSchedule
.
apiVersion: primehub.io/v1alpha1
kind: PhSchedule
metadata:
name: schedule-qm42d
namespace: hub
spec:
recurrence:
type: "custom"
cron: "*/1 * * * *"
jobTemplate:
metadata:
annotations: {}
labels: {}
spec:
command: |-
echo "start"
displayName: Test Job
userId: 619156fe-43c6-44f3-b20e-2d5f96e4df96
userName: user
groupId: d8257cb0-3c89-4243-98c2-cdc737ec61d3
groupName: test-job-submission
image: base-notebook
instanceType: cpu-tiny
status:
invalid: false
nextRunTime: "2020-03-01T00:00:00Z"
message: ""
Recurrence
- Inactive
- Every Day (at 4:00am)
- Every Week (Sundays at 4:00am)
- Every Month (on the 1st at 4:00am)
- Custom: needs an additional cron field.
Invalid State
When a schedule contains a non-existing user/group/instancetype/image or the custom cron format is wrong, it would be marked as an invalid schedule.
Timezone
The timezone depends on the system timezone setting. If the system timezone changes, the schedule's cron setting would not change. However, the next run time would change because of timezone change.
The controller reconciles every 10mins so that the timezone setting would reflect in 10 mins.
Job Concurrency
When a schedule is triggered, it will not spawn a new job if the previous job is still running.
If a job is manually run against the schedule, it can run multiple jobs. And the scheduled job will also run no matter the manually ran job is completed or not. Because the manually spawned job is not associated with the schedule.
Job Label
If a job is spawned by the job scheduler, it will have a label:
phjob.primehub.io/scheduledBy: schedule-qm42d