我希望能够限制同时运行的给定“类型”的作业数量(可能基于它们的标签,例如,标签为 mylabel
的作业不能同时运行)时间)。
我有一个长时间运行的计算,需要许可证 key 才能运行。我有 N 个许可证 key ,我想将同时运行的作业数量限制为 N。我想象它是如何工作的:我用一些特殊的 tag
来标记作业。 。然后,我调度 N + K 个作业,那么最多 N 个作业可能处于“正在运行”状态,并且 K 个作业应该在队列中,并且只有当正在运行的作业总数标记为 mytag
时才可以转换到“正在运行”状态。小于或等于N。
[更新]
- 这些作业彼此独立。
- 执行顺序并不重要,尽管我希望它们是 FIFO(时间明智的)。
- 这些作业是根据用户请求安排的。也就是说,没有预先知道需要处理的固定工作量,使用某些参数集(配置文件)运行作业的请求偶尔会及时出现。
最佳答案
不幸的是,k8s 中没有内置功能可以使用标签来完成此操作。但是,由于您的作业是根据不可预测的用户请求来安排的,因此您可以像这样实现您的目标:
- 创建一个新的命名空间
kubectl create namespacequota-pod-ns
- 创建 ResourceQuota
apiVersion: v1
kind: ResourceQuota
metadata:
name: pod-max-number
namespace: quota-pod-ns
spec:
hard:
pods: "5"
这会将命名空间配额-pod-ns 中的最大 pod 数量限制为 5。
- 在quota-pod-ns命名空间中创建k8s作业。
当您想在该命名空间中运行第 6 个作业时,k8s 将尝试创建第 6 个 pod,但会失败。但是,一旦其中一个正在运行的 pod 完成,作业 Controller 将在最大限制内创建该新 pod。
关于kubernetes - 如何限制某个 "type"同时运行的作业数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71036676/