【发布时间】:2019-03-17 12:25:27
【问题描述】:
我已安排一个应用程序在 Kubernetes 中作为 Cronjob 运行。当有代码更改时,我也在更改 CronJob 的图像。
我正在寻找可以禁用当前运行的 CronJob 并使用最新映像版本部署新 CronJob 的选项。
如何在不删除 yaml 清单的情况下禁用 Kubernetes 中的 Cronjob?
【问题讨论】:
标签: kubernetes google-kubernetes-engine
我已安排一个应用程序在 Kubernetes 中作为 Cronjob 运行。当有代码更改时,我也在更改 CronJob 的图像。
我正在寻找可以禁用当前运行的 CronJob 并使用最新映像版本部署新 CronJob 的选项。
如何在不删除 yaml 清单的情况下禁用 Kubernetes 中的 Cronjob?
【问题讨论】:
标签: kubernetes google-kubernetes-engine
如果您想通过补丁暂停 cronjob,请使用:
kubectl patch cronjobs <job-name> -p '{"spec" : {"suspend" : true }}'
【讨论】:
kubectl patch cronjobs <job-name> -p '{\"spec\" : {\"suspend\" : true }}'
kubectl get cronjobs | grep False | cut -d' ' -f 1 | xargs kubectl patch cronjobs -p '{"spec" : {"suspend" : true }}'
编辑您当前的 cronjob 资源以包含 .spec.suspend field and set it to true。当前运行的所有作业都将完成,但未来的作业将暂停。
如果您还需要停止当前正在运行的作业,则必须将其删除
【讨论】:
kubectl patch cronjobs job-name -p "{\"spec\" : {\"suspend\" : true }}"
【讨论】:
您可以使用对 Cron Job 格式有效但实际上该日期不应出现在日历日期(如 2 月 31 日)中的任何时间。
* * 31 2 *
【讨论】:
带有命令行的选项 1
$ kubectl patch cronjobs $(kubectl get cronjobs | awk '{ print $1 }' | tail -n +2) -p '{"spec" : {"suspend" : true }}'
带有命令行的选项 2:
$ kubectl get cronjobs | grep False | cut -d' ' -f 1 | xargs kubectl patch cronjobs -p '{"spec" : {"suspend" : true }}'
选项 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
【讨论】: