NestJS - 任务调度 - 防止在 K8s 中的相同服务实例中并行运行相同的作业

taz*_*az_ 5 node.js kubernetes nestjs

我们正在运行一个基于Nestjs的 monorepo,其中包含几个服务,每个服务在 google cloud k8s 中至少有两个实例。最近,我们实现了几个计划作业来处理存储在 mongo 副本集中的一些数据,并每 10 分钟输出一次结果。我们没有想到的是,拥有同一服务的多个实例将导致运行同一个作业的次数与我们在同一时间点针对同一数据集拥有实例的次数一样多。处理该问题并使计划作业仅在一个实例中运行(仅在预定义时间运行一次)的最佳实践是什么?

Gui*_*het 2

您需要使用.spec.concurrencyPolicyCron Job 规范中的字段并将其设置为Forbid,以防止同一作业并发运行。

请参阅此 k8s 文档中的并发策略章节: https: //kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/