如何更改Kubernetes cronjob的时间表或如何手动启动它?

时间:2018-03-15 07:30:01

标签: cron kubectl kubernetes

是否有一种简单的方法可以更改kubernetes cronjob的日程安排,例如kubectl change cronjob my-cronjob "10 10 * * *"?或者任何其他方式而不需要kubectl apply -f deployment.yml?后者在复杂的CI / CD设置中可能非常麻烦,因为通常不需要手动编辑部署yaml,尤其是在文件是在构建过程中从模板创建的情况下。

或者,有没有办法手动启动cronjob?例如,作业计划在22小时内启动,但我想现在手动触发一次而不更改cron计划好(用于测试或初次运行)?

3 个答案:

答案 0 :(得分:7)

您只能通过修补来更新所选的资源字段

patch -h                     
Update field(s) of a resource using strategic merge patch, a JSON merge patch, or a JSON patch.           

JSON and YAML formats are accepted.

Please refer to the models in
https://htmlpreview.github.io/?https://github.com/kubernetes/kubernetes/blob/HEAD/docs/api-reference/v1/definitions.html
to find if a field is mutable.

正如评论中提供的那样:

kubectl patch my-cronjob -p '{"spec":{"schedule": "42 11 * * *"}}

此外,在当前的kubectl版本中,要启动一次声明的cronjob执行,您可以手动创建一个符合cronjob规范的作业

kubectl create job --from=cronjob/mycron

答案 1 :(得分:4)

k8s的最新版本(从1.10开始)支持以下命令:

$ kubectl create job my-one-time-job --from=cronjobs/my-cronjob

此问题已解决k8s github issue

答案 2 :(得分:0)

我有一个朋友开发了一个kubectl插件,可以准确地回答这个问题!
它需要一个现有的cronjob并从中创建一个作业。
参见https://github.com/vic3lord/cronjobjob
查看自述文件以获取安装说明。