禁用Kubernetes中的cronjob

Jas*_*tha 18 kubernetes google-kubernetes-engine

我已经安排了一个在Kubernetes中作为Cronjob运行的应用程序.当代码发生变化时,我正在改变CronJob中的图像.

我正在寻找一个选项,我可以禁用当前运行的CronJob并使用新创建的Image部署新的CronJob.

如何在不删除yaml的情况下禁用Kubernetes中的Cronjob?

Ami*_*tyo 26

如果要通过补丁程序暂停cronjob,请使用:

kubectl patch cronjobs <job-name> -p '{"spec" : {"suspend" : true }}'
Run Code Online (Sandbox Code Playgroud)

  • `kubectl patch cronjobs &lt;作业名称&gt; -p '{\"spec\" : {\"suspend\" : true }}'` (4认同)
  • 要一次性暂停所有 cronjobs,请执行 `kubectl get cronjobs | grep 假 | 切 -d' ' -f 1 | xargs kubectl patch cronjobs -p '{"spec" : {"suspend" : true }}'` (3认同)
  • 我尝试使用上述命令暂停,但收到错误 error: 无法解析“'{spec”: yaml: 发现意外的流结束 (2认同)

小智 19

您可以使用对 Cron Job 格式有效的内容,但实际上该日期不应出现在日历日期中的任何时间,例如 2 月 31 日。

* * 31 2 *
Run Code Online (Sandbox Code Playgroud)

  • 有创意,但仍然是一种解决方法。注意:不适用于其他行星。 (21认同)

小智 16

kubectl patch cronjobs job-name -p "{\"spec\" : {\"suspend\" : true }}"
Run Code Online (Sandbox Code Playgroud)


Pat*_*k W 8

编辑当前的cronjob资源以包含.spec.suspend字段并将其设置为true.任何当前正在运行的作业都将完成,但将来的作业将被暂停

如果您还需要停止当前正在运行的作业,则必须将其删除


小智 6

选项 1 带命令行

$ kubectl patch cronjobs $(kubectl get cronjobs | awk '{ print $1 }' | tail -n +2) -p '{"spec" : {"suspend" : true }}'
Run Code Online (Sandbox Code Playgroud)

使用命令行的选项 2:

$ kubectl get cronjobs | grep False | cut -d' ' -f 1 | xargs kubectl patch cronjobs -p '{"spec" : {"suspend" : true }}'
Run Code Online (Sandbox Code Playgroud)

选项 3 创建资源配额。我相信这是更清洁的选择。

cat <<EOF | kubectl apply -f -
# https://kubernetes.io/docs/concepts/policy/resource-quotas/#object-count-quota
apiVersion: v1
kind: ResourceQuota
metadata:
  name: limit-generic-resources
spec:
  hard:
    pods: "0"
    count/persistentvolumeclaims : "0"
    count/services : "0"
    count/secrets : "0"
    count/configmaps : "0"
    count/replicationcontrollers : "0"
    count/deployments.apps : "0"
    count/replicasets.apps : "0"
    count/statefulsets.apps : "0"
    count/jobs.batch : "0"
    count/cronjobs.batch : "0"
EOF
Run Code Online (Sandbox Code Playgroud)