我正在运行一个microk8s示例,并试图每60秒运行一次CronJob,但它根本不起作用。我的理解是CronJob不需要任何手动干预来启动它们,但是这个系统已经运行了一个多月,我没有看到cron作业的pod(处于 any 状态),所以我决定尝试使用kubectl create job --from=cronjob/health-status-cron health-status-cron
手动启动它。手动启动后,作业成功完成:
health-status-cron-2hh96 0/1 Completed 0 17h
我希望Kubernetes会开始安排未来的工作,但它没有。以下是我的清单(其中一些是用Helm模板化的,但这不重要):
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: health-status-cron
namespace: {{ .Values.global.namespace }}
labels:
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/release-name: {{ .Release.Name }}
app.kubernetes.io/release-namespace: {{ .Release.Namespace }}
spec:
schedule: "* * * * *"
concurrencyPolicy: Replace
successfulJobsHistoryLimit: 1
jobTemplate:
spec:
template:
spec:
containers:
- name: health-status-cron
image: busybox
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- /usr/bin/curl -k http://restfulservices/api/system-health
restartPolicy: OnFailure
还需要注意的是,根据以下内容,该作业在35天内未安排:
$ k -ntango get cronjobs
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
health-status-cron * * * * * False 0 35d 36d
在这一点上,我完全不知道我做错了什么,或者为什么这个特定的作业没有运行。任何帮助都非常感谢。
编辑:我最终放弃了整个命名空间并重新部署。不幸的是,我仍然不知道根本原因,但现在一切似乎都正常了。
1条答案
按热度按时间rsaldnfx1#
你可以检查一些其他的东西:
1.你有任何状态为
failed
的cron pod吗?如果你这样做,检查这些吊舱的原因。1.是不是以前工作过,然后突然停止了?
kubectl describe cronjob health-status-cron -n tango
1.你的cron运行的代码是否需要> 1分钟才能完成?如果是这样的话,你的日程安排太激进了,你可能想放松一下日程安排
1.集群中是否安装了任何自定义/第三方webhook或插件?这些可能会干扰pod的创建。
1.您是否在命名空间中创建了任何 * 作业 *?
kubectl get jobs -n tango
如果你发现了大量的job对象,检查它们,看看为什么它们没有生成pod。我在2020年遇到了一个有点类似的问题(writeup有一个链接,指向我在Kubernetes项目本身中提出的问题):https://blenderfox.com/2020/08/07/the-snowball-effect-in-kubernetes/