Kubernetes:每个任务使用一个 Pod 实现无限工作负载

问题描述 投票:0回答:1

我正在尝试在 kubernetes 上创建类似于 Lambda 函数的东西。 我需要在单独的 Pod 上运行每个请求。一旦容器成功终止,就会返回响应,并且应该删除 pod,并创建一个新的 pod。 我想减少启动时间的延迟,所以我想提前创建pod并让它们等待请求。目前可扩展性不是问题,我可以接受在任何给定时间只有 5 个 pod 并行监听。

我考虑过使用部署控制器,但它不允许“restartPolicy: never”,这意味着 Pod 终止后它将重新启动而不是回收。 然后我发现了 Jobs,我能够通过创建一个具有有限完成次数和 5 并行度的作业来实现所需的行为。问题在于有限完成部分。如果我将完成更改为“null”(无限),则作业将在一个 pod 成功终止后停止创建新的 pod。 因此,本质上,我正在尝试使用有限作业控制器的逻辑,但要实现无限数量的完成。

  • 有比使用 kubernetes jobs 更好的方法吗?
  • 有没有办法定期重置作业的完成情况,以通过我当前的实现实现所需的行为?
  • 有没有办法创建一个无限完成的作业,其中终止的 Pod 会不断被替换?

我见过其他具有类似要求的 s/o 帖子,其中建议使用无限完成的作业,并故意使 Pod 因错误而终止,以使作业用新的作业替换它们,但我不认为这是一个好主意,尤其是监控方面。

感谢您的帮助。

kubernetes jobs infinite task-queue
1个回答
0
投票

基于类似于Lambda的考虑,您有特定的要求来回答第一个问题。

如果符合您的要求,可以查看 Kubeless(不再由 VMware 管理)和 KnativeCNCF 项目)。

如果上述方法未能解决您的确切问题,您可以退回到建议的使用Jobs的方法。

始终可以选择使用K8s中的自定义控制器/CRD来扩展现有K8s资源的行为。

想法是扩展控制器的行为,就像这里做Daemon Job一样,我想在所有可用的Nodes上安排JOB pod,并且一个完整的POD应该被removed,除非在restart/complete中状态。 我的示例 Daemonset 作业文章 - GitHub 代码

要编写控制器/操作员,您有多种选择

© www.soinside.com 2019 - 2024. All rights reserved.