kubernetes - 防止两个作业在 Kubernetes 中并行运行
问题描述
ATT : 我不知道为什么,但有时一个 pod 突然将状态变为未知,这就是新 pod 开始的地方
我在 gcloud 中使用 kubernetes。
我为需要运行的 cron 作业构建了 yaml 文件:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: etl-table-feed-from-schema-vtex-to-schema-sale-all
spec:
schedule: "* * * * *"
concurrencyPolicy: "Forbid"
failedJobsHistoryLimit: 3
successfulJobsHistoryLimit: 1
startingDeadlineSeconds: 60 # 1 min
jobTemplate:
spec:
backoffLimit: 0
#activeDeadlineSeconds: 3600 # 1 hora
template:
spec:
containers:
- name: etl-table-feed-from-schema-vtex-to-schema-sale-all
image: (myimage)
command: ["/bin/sh", "-c"]
args: (mycommands)
env:
- name: PYTHONUNBUFFERED
value: "1"
envFrom:
- secretRef:
name: etl-secret
restartPolicy: Never
nodeSelector:
#<labelname>:value
etlnode: etl-hi-cpu
我一次只需要运行一个 pod,只需要一个。但有时,我不知道为什么,而且我无法重现,一次运行多个 pod。
我已经将 concurrencyPolicy 写为 Forbid,但似乎还不够。
我在 gcloud 的抢占式池中运行它。
同时运行的两个 pod:
解决方案
就我而言,问题在于这concurrencyPolicy: "Forbid"
还activeDeadlineSeconds
不够。我以前的 pod 收到SIGTERM
但在它实际被杀死之前又运行了 30 秒,所以我最终得到了两个并行运行 30 秒的作业。
请参阅此问题:Kubernetes Cron Job Terminate Pod before creation of next schedule,在我的情况下,此答案提供了解决方案:https ://stackoverflow.com/a/63721120/5868044 。两种选择:
- 使 pod 立即停止
SIGTERM
(例如使用 bashtrap 'exit' SIGTERM
) - 通过设置小于
activeDeadlineSeconds
计划间隔,在您的作业之间留出 30 多秒的时间间隔。
推荐阅读
- java - Vaadin:网格重复数据
- jquery - jQuery getJSON 不填充 html 表
- javascript - 停止 extract-css-chunks-webpack-plugin 组合所有 CSS
- javascript - javascript里程计算
- vb.net - 在 Visual Basic 中滚动时,将固定面板保持在表单可见区域的底部
- php - 表格未发布一个字段
- editor - 在 ABAP 编辑器中禁用按钮保存以进行自动完成
- zip - 压缩和导航大型压缩目录的策略
- powershell - PowerShell 查找所有没有成员或计算机对象的空 AD 安全组
- node.js - NPM 运行