如何更改 Kubernetes cronjob 的时间表或如何手动启动它?
How to change the schedule of a Kubernetes cronjob or how to start it manually?
有没有一种简单的方法可以像 kubectl change cronjob my-cronjob "10 10 * * *"
一样更改 kubernetes cronjob 的时间表?或者不需要做 kubectl apply -f deployment.yml
的任何其他方式?后者在复杂的 CI/CD 设置中可能非常麻烦,因为通常不需要手动编辑部署 yaml,尤其是如果文件是在构建过程中从模板创建的。
或者,有没有办法手动启动一个 cronjob? 例如,一个作业计划在 22 小时后启动,但我现在想手动触发一次而不用永久更改 cron 计划(用于测试或初始 运行)?
您可以通过修补只更新选定的资源字段
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 cronjob my-cronjob -p '{"spec":{"schedule": "42 11 * * *"}}'
此外,在当前的 kubectl 版本中,要启动已声明的 cronjob 的一次性执行,您可以手动创建一个符合 cronjob 规范的作业
kubectl create job --from=cronjob/mycron
我有一个朋友开发了一个 kubectl 插件来回答这个问题!
它需要一个现有的 cronjob 并从中创建一个工作。
参见 https://github.com/vic3lord/cronjobjob
查看自述文件以获取安装说明。
较新的k8s版本(从1.10开始)支持以下命令:
$ kubectl create job my-one-time-job --from=cronjobs/my-cronjob
来源已解决k8s github issue.
如果你想用 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)
有没有一种简单的方法可以像 kubectl change cronjob my-cronjob "10 10 * * *"
一样更改 kubernetes cronjob 的时间表?或者不需要做 kubectl apply -f deployment.yml
的任何其他方式?后者在复杂的 CI/CD 设置中可能非常麻烦,因为通常不需要手动编辑部署 yaml,尤其是如果文件是在构建过程中从模板创建的。
或者,有没有办法手动启动一个 cronjob? 例如,一个作业计划在 22 小时后启动,但我现在想手动触发一次而不用永久更改 cron 计划(用于测试或初始 运行)?
您可以通过修补只更新选定的资源字段
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 cronjob my-cronjob -p '{"spec":{"schedule": "42 11 * * *"}}'
此外,在当前的 kubectl 版本中,要启动已声明的 cronjob 的一次性执行,您可以手动创建一个符合 cronjob 规范的作业
kubectl create job --from=cronjob/mycron
我有一个朋友开发了一个 kubectl 插件来回答这个问题!
它需要一个现有的 cronjob 并从中创建一个工作。
参见 https://github.com/vic3lord/cronjobjob
查看自述文件以获取安装说明。
较新的k8s版本(从1.10开始)支持以下命令:
$ kubectl create job my-one-time-job --from=cronjobs/my-cronjob
来源已解决k8s github issue.
如果你想用 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)