kubernetes cronjob意外的调度行为



我使用kubernetes 1.21 cronjob来安排一些作业在每天的某个时间运行。

我计划在下午4点通过kubectl apply -f <name of yaml file>运行一个作业。随后,我使用相同的命令kubectl apply -f <name of yaml file>更新了yamlschedule: "0 22 * * *"以在晚上10点触发作业然而,在下午1点左右应用配置后,作业仍然在下午4点触发(本不应该发生(,然后在晚上10点再次触发(预定触发时间(。

有没有解释为什么会发生这种情况,我能阻止它吗?

以下cronjob的示例yaml:

apiVersion: batch/v1
kind: CronJob
metadata:
name: job-name-1
spec:
schedule: "0 16 * * *" # 4pm
successfulJobsHistoryLimit: 1
failedJobsHistoryLimit: 1
jobTemplate:
spec:
template:
spec:
containers:
- image: sample-image
name: job-name-1
args:
- node
- ./built/script.js
env:
- name: NODE_OPTIONS
value: "--max-old-space-size=5000"
restartPolicy: Never
nodeSelector:
app: cronjob

我预计这项工作只会在晚上10点开始。

删除cronjob并重新应用它似乎可以消除此类问题,但在某些情况下,我无法删除该作业(因为它仍在运行(。

  1. 当您使用kubectl apply -f <name of yaml file>在晚上10点安排第二个作业时,这意味着它将安排一个新作业,但不会取代现有作业。所以原因是下午4点的作业也安排好了,它运行了

相反,您需要使用以下命令将作业替换为另一个计划作业。

kubectl patch cronjob my-cronjob -p '{"spec":{"schedule": "0 22 * * *"}}'

这将仅在晚上10点运行作业。

  1. 要删除正在运行的作业,请使用以下进程:

在控制台中运行:

crontab -e

然后,您将使用编辑器打开crontab,只需删除其中的行,保存文件并退出编辑器即可。

如果您使用root用户运行,则使用下面的命令并按照上面的步骤进行。

sudo crontab -e  

最新更新