我已经创建了一个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
如果你想测试作业,从你的Cron作业 (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, @jdf提到现在已经关闭,这现在是可能的。原来的实现可以在在这里中找到,但是语法已经改变了。
在kubectl v1.10.1+中,命令如下:
kubectl create job --from=cronjob/<cronjob-name> <job-name> -n <namespace-name>
它似乎向后兼容旧的集群,因为它在v0.8.x上为我工作。
不幸的是,上面的示例语法都不能在谷歌Kubernetes Engine (GCP)中工作。此外,GKE文档本身是错误的。
在Kubernetes 1.10.6.gke-2中,工作语法是:
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 delete job <job-name> -n <namespace>
如果你想查看可用的玉米作业列表,使用kubectl get cronjobs -n <namespace>
kubectl get cronjobs -n <namespace>