如何更改 Kubernetes cronjob 的计划或如何手动启动它?

Posted

技术标签:

【中文标题】如何更改 Kubernetes cronjob 的计划或如何手动启动它?【英文标题】:How to change the schedule of a Kubernetes cronjob or how to start it manually? 【发布时间】:2018-08-23 22:14:21 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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.

如 ref 评论中所提供:

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

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

kubectl create job --from=cronjob/mycron

【讨论】:

有没有机会直接提供命令?以供将来参考和其他人在谷歌上搜索。谢谢:-) 您想将此整合到您的答案中吗? kubectl patch my-cronjob -p '"spec":"schedule": "42 11 * * *"' ? 您可以将其作为作业(而不是 CronJob)运行,它将立即安排并运行完成。 使用了@SmCaterpillar 的建议,但必须修改为kubectl patch cronjob my-cronjob --patch '"spec":"schedule": "42 11 * * *"【参考方案2】:

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

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

来源已解决k8s github issue。

【讨论】:

【参考方案3】:

我有一个朋友开发了一个 kubectl 插件来回答这个问题! 它需要一个现有的 cronjob,然后从中创建一个作业。 见https://github.com/vic3lord/cronjobjob 查看 README 以获取安装说明。

【讨论】:

【参考方案4】:

如果您想使用Python kubernetes library 修补 k8s cronjob 计划,您可以这样做:

from kubernetes import client, config

config.load_kube_config()
v1 = client.BatchV1beta1Api()
body = "spec": "schedule": "@daily"
ret = v1.patch_namespaced_cron_job(
    namespace="default", name="my-cronjob", body=body
)
print(ret)

【讨论】:

以上是关于如何更改 Kubernetes cronjob 的计划或如何手动启动它?的主要内容,如果未能解决你的问题,请参考以下文章

如何立即运行 kubernetes cronjob

如何定期将shell脚本的结果设置为Kubernetes Cronjob的参数

手动启动 Kubernetes CronJob [重复]

Kubernetes CronJob 公网 IP

云原生之kubernetes在kubernetes集群下的jobs与cronjobs管理

19-Kubernetes-Pod控制器详解-CronJob(CJ)