我正在使用 kubernetes 1.21 cronjob 來安排一些作業在每天的某個時間運行。
我計劃在下午 4 點通過kubectl apply -f <name of yaml file>. 隨后,我更新了 yamlschedule: "0 22 * * *"以在晚上 10 點觸發作業,使用相同的命令kubectl apply -f <name of yaml file>
但是,在下午 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 并重新應用它似乎可以消除此類問題,但在某些情況下我無法洗掉該作業(因為它仍在運行)。
uj5u.com熱心網友回復:
- 當您
kubectl apply -f <name of yaml file>過去在晚上 10 點安排第二個作業時,這意味著它將安排一個新作業,但不會替換現有作業。所以原因是下午 4 點的 Job 也被安排并運行了。
相反,您需要使用以下命令將 Job 替換為另一個計劃的 Job。
kubectl patch cronjob my-cronjob -p '{"spec":{"schedule": "0 22 * * *"}}'
這將僅在晚上 10 點運行 Job。
- 為了洗掉正在運行的作業,請使用以下流程:
在控制臺中運行:
crontab -e
然后您將使用編輯器打開 crontab,只需洗掉那里的行,保存檔案并退出編輯器 - 就是這樣。
如果您使用 root 用戶運行,請使用以下命令并按照上述步驟進行操作。
sudo crontab -e
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/521524.html
標籤:Google Cloud Collective Kubernetescron谷歌 Kubernetes 引擎
上一篇:k8s中不同服務的相同秘密
