我希望每15分钟就能触发一次工作,但每30分钟就会触发一次。
更新
我只是通过运行来简化问题:
kubectl run hello --schedule="*/1 * * * *" --restart=OnFailure --image=busybox -- /bin/sh -c "date; echo Hello from the Kubernetes cluster"
如此处的文档中所述:https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/
然而,这份工作仍然拒绝按时运作。$ kubectl get cronjobs
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
hello */1 * * * * False 1 5m 30m
hello2 */1 * * * * False 1 5m 12m
命令行创建cronjob需要25分钟才能运行,而从yaml创建的cronjob需要7分钟。他们最终都是在同一时间安排的,所以它几乎就像是etcd终于醒来并做了些什么?
原始问题:
当我深入到一个活跃的工作时,我看到Status: Terminated: Completed
但是
Age: 25 minutes
或大于15的东西。
在日志中,我看到要运行的python脚本已经完成了它的最终打印声明。该脚本基于s3中的输出文件大约需要2分钟才能完成。然后没有新的工作安排在28分钟以上。
我尝试过不同的配置:
Schedule: */15 * * * *
和Schedule: 0,15,30,45 * * * *
以及
Concurrency Policy: Forbid
和Concurrency Policy: Replace
这里还有什么可能出错?
修改了识别行的完整配置:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
labels:
type: f-c
name: f-c-p
namespace: extract
spec:
concurrencyPolicy: Forbid
failedJobsHistoryLimit: 1
jobTemplate:
metadata:
creationTimestamp: null
spec:
template:
metadata:
creationTimestamp: null
labels:
type: f-c
spec:
containers:
- args:
- /f_c.sh
image: identifier.amazonaws.com/extract_transform:latest
imagePullPolicy: Always
env:
- name: ENV
value: prod
- name: SLACK_TOKEN
valueFrom:
secretKeyRef:
key: slack_token
name: api-tokens
- name: AWS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
key: aws_access_key_id
name: api-tokens
- name: AWS_SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
key: aws_secret_access_key
name: api-tokens
- name: F_ACCESS_TOKEN
valueFrom:
secretKeyRef:
key: f_access_token
name: api-tokens
name: s-f-c
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Never
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
schedule: '*/15 * * * *'
successfulJobsHistoryLimit: 1
suspend: false
status: {}
答案 0 :(得分:2)
在测试集群中运行这些作业后,我发现外部环境阻止它们按预期运行。
在原始群集上,有大约20个预定的工作。 Kubernetes的内置调度程序尚不能始终如一地处理此卷。
可以可靠运行的最大作业数(在预期时间的一分钟内)可能取决于主节点的大小。
答案 1 :(得分:0)
这不是设计的吗?
cron作业在其计划的每个执行时间创建一个作业对象。我们说“约”,因为在某些情况下可能会创建两个作业,或者不会创建任何作业。我们试图使这些罕见,但不要完全阻止它们。因此,工作应该是幂等的。
参考。 https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#cron-job-limitations