Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I trigger a Kubernetes Scheduled Job manually?

People also ask

How do I trigger Kubernetes cron manually?

When writing classic cron jobs in Unix, it's obvious how to test the job- just manually run the command specified in the cron file. However, it's not as obvious how to do this in Kubernetes. To see a list of cron jobs, run “kubectl get cronjob”. The job creates a pod that runs to completion.

How do I trigger a CronJob?

Triggering a Cron Job manually on Kubernetes So you've defined a cronjob. yaml manifest, but it doesn't run until midnight and you want to test it now? Simply replace the variables, and run the following command to create a job from the cronjob. This will create a one-off job in your cluster based on your cronjob.

How Kubernetes CronJob works?

Older Kubernetes versions do not support the batch/v1 CronJob API. You can use a CronJob to run Jobs on a time-based schedule. These automated jobs run like Cron tasks on a Linux or UNIX system. Cron jobs are useful for creating periodic and recurring tasks, like running backups or sending emails.


The issue #47538 that @jdf mentioned is now closed and this is now possible. The original implementation can be found here but the syntax has changed.

With kubectl v1.10.1+ the command is:

kubectl create job --from=cronjob/<cronjob-name> <job-name>

It seems to be backwardly compatible with older clusters as it worked for me on v0.8.x.


You can create a simple job based on your ScheduledJob. If you already run a ScheduledJob, there are jobs in history.

kubectl get jobs

NAME               DESIRED   SUCCESSFUL   AGE
hello-1477281595   1         1            11m
hello-1553106750   1         1            12m
hello-1553237822   1         1            9m

Export one of these jobs:

kubectl get job hello-1477281595 -o yaml > my_job.yaml

Then edit the yaml a little bit, erasing some unnecessary fields and run it manually:

kubectl create -f my_job.yaml
kubectl delete -f my_job.yaml

Unfortunately, none of the example syntaxes above works in Google Kubernetes Engine (GCP). Also, the GKE docs themselves are wrong.

In Kubernetes 1.10.6.gke-2, the working syntax is:

kubectl create job <your-new-job-name> --from=cronjob/<name-of-deployed-cron-job> -n <target namespace>

EDIT - July 2018: see @pedro_sland's answer as this feature has now been implemented

My original answer below will remain correct for older versions of kubectl less than v1.10.1

========================================================================

Aside from creating a new job (as the other answers have suggested), there is no current way to do this. It is a feature request in with kubernetes now that can be tracked here: https://github.com/kubernetes/kubernetes/issues/47538


There is an option to trigger the cron job manually whithin this tab in k8s dashboard

See image


I've created a small cmd utility for convenience to do just that and also suspend and unsuspend cronjobs.

https://github.com/iJanki/kubecron


kubectl create job --from=cronjob/<cron-job-name> <job-name> -n <namespace>

you can use the to delete job execution at any time kubectl delete job <job-name> -n <namespace>

if you want to see the list of corn jobs available use kubectl get cronjobs -n <namespace>