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


当前回答

为了方便,我创建了一个小的cmd实用程序来挂起和取消cronjobs。

https://github.com/iJanki/kubecron

其他回答

编辑- 2018年7月:见@pedro_sland的回答,因为这个功能现在已经实现了

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

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

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

为了方便,我创建了一个小的cmd实用程序来挂起和取消cronjobs。

https://github.com/iJanki/kubecron

您可以基于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

@jdf提到的#47538问题现在已经结束,现在是可能的。原始的实现可以在这里找到,但是语法已经改变了。

在kubectl v1.10.1+中,命令如下:

Kubectl create job——from=cronjob/<cronjob-name> <job-name> -n <namespace-name>

它似乎向后兼容旧的集群,因为它在v0.8.x上为我工作。