我正在尝试在 kubernetes 上创建类似于 Lambda 函数的东西。 我需要在单独的 Pod 上运行每个请求。一旦容器成功终止,就会返回响应,并且应该删除 pod,并创建一个新的 pod。 我想减少启动时间的延迟,所以我想提前创建pod并让它们等待请求。目前可扩展性不是问题,我可以接受在任何给定时间只有 5 个 pod 并行监听。
我考虑过使用部署控制器,但它不允许“restartPolicy: never”,这意味着 Pod 终止后它将重新启动而不是回收。 然后我发现了 Jobs,我能够通过创建一个具有有限完成次数和 5 并行度的作业来实现所需的行为。问题在于有限完成部分。如果我将完成更改为“null”(无限),则作业将在一个 pod 成功终止后停止创建新的 pod。 因此,本质上,我正在尝试使用有限作业控制器的逻辑,但要实现无限数量的完成。
我见过其他具有类似要求的 s/o 帖子,其中建议使用无限完成的作业,并故意使 Pod 因错误而终止,以使作业用新的作业替换它们,但我不认为这是一个好主意,尤其是监控方面。
感谢您的帮助。
基于类似于Lambda的考虑,您有特定的要求来回答第一个问题。
如果符合您的要求,可以查看 Kubeless(不再由 VMware 管理)和 Knative(CNCF 项目)。
如果上述方法未能解决您的确切问题,您可以退回到建议的使用Jobs的方法。
始终可以选择使用K8s中的自定义控制器/CRD来扩展现有K8s资源的行为。
想法是扩展控制器的行为,就像这里做Daemon Job一样,我想在所有可用的Nodes上安排JOB pod,并且一个完整的POD应该被removed,除非在restart/complete中状态。 我的示例 Daemonset 作业文章 - GitHub 代码
要编写控制器/操作员,您有多种选择