【发布时间】:2019-12-07 01:59:42
【问题描述】:
假设:
我有一个服务,它在启动时需要一个 id。
我希望每个服务进程在单独的 k8s pod 中运行。
-
我想在用户输入 id N 的地方放置一个 API 并作为响应:
如果 id N 的服务正在运行,我会将用户路由到它。
如果没有为 id N 运行服务,我会启动一个(即启动一个新 pod),然后将用户路由到那里。
我对 (3.2) 的一些想法:
“路由器”服务使用 k8s api 直接启动新的 pod。这感觉不对,但也许不是?
没有正在运行的服务的传入请求进入队列,根据队列大小触发 pod 水平缩放,并让新服务从队列中取出 id。
我错过了一个可以帮助我的原语吗?在 kubernetes 上实现这个的最惯用的方法是什么?如果它完全相关,我将在 AKS 上运行所有这些。
【问题讨论】:
-
我认为选项 1 是最好的选择。让路由器使用 id 命名约定创建 pod,并有一个脚本首先检查 pod 是否存在,如果不存在,则创建一个新 pod
-
这听起来有点像您需要一个归零解决方案。查看 KNative - 它带来了无服务器原语,利用 Istio 来“保留”您的请求,直到出现处理您的请求的 pod。通过一些定制,我认为它可以满足您的需求。 OpenFaas/Fn 等其他无服务器解决方案也值得一试。
标签: kubernetes