如何手动触发 Kubernetes 计划作业?

How can I trigger a Kubernetes Scheduled Job manually?

我创建了一个 Kubernetes Scheduled Job,它根据其时间表每天运行两次。但是,出于测试目的,我想手动触发它。我该怎么做?

您可以根据您的 ScheduledJob 创建一个简单的作业。如果您已经 运行 一个 ScheduledJob,则历史记录中有作业。

kubectl get jobs

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

导出以下作业之一:

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

然后稍微编辑一下 yaml,删除一些不必要的字段并运行手动编辑:

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

如果您想测试该作业,请创建一个 Job config from your Cron Job (ScheduledJob) 配置并使用以下命令手动 运行 它:

kubectl create -f ./job.yaml

编辑 - 2018 年 7 月:请参阅@pedro_sland 的 ,因为此功能现已实现

我下面的原始答案对于低于 v1.10.1 的旧版本 kubectl 仍然是正确的

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

除了创建新工作(正如其他答案所建议的那样),目前没有其他方法可以做到这一点。现在可以在此处跟踪 kubernetes 的功能请求:https://github.com/kubernetes/kubernetes/issues/47538

为了方便起见,我创建了一个小的 cmd 实用程序,还可以暂停和取消暂停 cronjobs。

https://github.com/iJanki/kubecron

问题 #47538 that is now closed and this is now possible. The original implementation can be found here 但语法已更改。

使用 kubectl v1.10.1+ 命令是:

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

它似乎与旧集群向后兼容,因为它在 v0 上对我有用。8.x。

不幸的是,上述示例语法中的 none 在 Google Kubernetes Engine (GCP) 中有效。另外,GKE 文档本身是错误的。

在 Kubernetes 1.10.6.gke-2 中,工作语法是:

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

在 k8s 仪表板的这个选项卡中有一个手动触发 cron 作业的选项

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

您可以随时使用删除作业执行kubectl delete job <job-name> -n <namespace>

如果您想查看可用的玉米工作列表,请使用 kubectl get cronjobs -n <namespace>