让我们说:
我有一项服务,该服务在启动时会带有一个ID。
我希望每个服务进程都在单独的k8s pod中运行。
我想在用户输入id N作为响应的前面放置一个API:
如果ID为N的服务正在运行,我会将用户路由到该服务。
如果没有为id N运行的服务,我将启动一个服务(即启动一个新的pod),然后将用户路由到那里。
我对(3.2)有一些想法:
“路由器”服务使用k8s api直接启动新的pod。感觉错了,但也许不是吗?
没有正在运行的服务的传入请求进入队列,根据队列大小触发水平pod扩展,并让新服务将id移出队列。
我错过了一个可以在这里帮助我的原始人吗?在kubernetes上实现此功能的最惯用的方法是什么?如果完全相关,我将在AKS上运行所有这些操作。
答案 0 :(得分:0)
在我看来,阅读您的需求,就像您在Kubernetes上需要更多类型的自己的PaaS一样,而不是一种扩展服务。有几种现有的解决方案,例如检查“ Deis Workflow”。
如果您真的想从头开始创建这样的解决方案,我将用作(1&2)的概念证明,这是Kubernetes的软件包管理器工具,称为helm,该工具有效在更高级别的抽象上-将一个Kubernetes资源捆绑在一个单独的“发行版”中,该资源构成了整个工作应用程序:Pod,Service,Persistence Volume等。
您实际上可以将“发布”与“ id”同等对待。在K8S集群中未创建任何发布=您的服务已缩放为零。除了“ helm”客户端工具之外,您还可以轻松地找到应用程序URL(特定用户ID的目标路由)。可以使用Kubernetes API client libraries 从Kubernetes API或直接通过Kubernetes REST API访问相同的信息,而您的前端将使用(3)。