kubernetes - 如何限制某个 "type"同时运行的作业数量?

标签 kubernetes

我希望能够限制同时运行的给定“类型”的作业数量(可能基于它们的标签,例如,标签为 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/

相关文章:

kubernetes - 识别Istio内部网格源流量的最优雅方法是哪种?

postgresql - 如何将 Postgres DB 从一个 Kubernetes 集群移动到另一个

python - 使用 kubernetes python 客户端重试 watch 时如何避免 "resource too old"?

azure - 当 Pod 重新创建时,Prometheus 发生崩溃循环

amazon-web-services - Amazon Kubernetes AWS-EKS 未正确创建或未与 kubectl 同步

volume - 如何防止两个卷声明在 Kubernetes 上声明相同的卷?

amazon-web-services - AWS EKS,如何直接从浏览器访问 Pod?

postgresql - 从 Kubernetes 访问外部数据库

kubernetes - 创建自定义计划程序无效

amazon-web-services - 无法使用 AWS IAM 身份验证器获取 token 访问被拒绝