首页 > 解决方案 > 扩展服务以响应 Kubernetes 上的请求

问题描述

比方说:

  1. 我有一个服务,它在启动时需要一个 id。

  2. 我希望每个服务进程在单独的 k8s pod 中运行。

  3. 我想在用户输入 id N 的地方放置一个 API 并作为响应:

    1. 如果 id N 的服务正在运行,我会将用户路由到它。

    2. 如果没有为 id NI start one 运行服务(即启动一个新的 pod),则将用户路由到那里。

我对(3.2)的一些想法:

  1. “路由器”服务使用 k8s api 直接启动新的 pod。这感觉不对,但也许不是?

  2. 没有运行服务的传入请求进入队列,根据队列大小触发水平 pod 缩放,并让新服务将 id 从队列中取出。

我错过了一个可以帮助我的原语吗?在 kubernetes 上实现这个的最惯用的方法是什么?如果它完全相关,我将在 AKS 上运行所有这些。

标签: kubernetes

解决方案


在我看来,阅读您的需求,就像您需要在 Kubernetes 之上更多的一种自己的 PaaS,而不是一种扩展服务。有几个现有的解决方案,例如检查' Deis Workflow '。

如果您真的打算从头开始创建这样的解决方案,我将使用 (1 & 2) 的概念证明,这是一个 Kubernetes 的包管理器工具,称为helm,它适用于更高级别的抽象 - 单个“发布”中的捆绑包构成整个工作应用程序的 Kubernetes 资源:Pod、Service、Persistence Volume 等。

从字面上看,您可以将“释放”与“id”同等对待。在 K8S 集群中未创建任何版本 = 您的服务被缩放为零。除了 'helm' 客户端工具外,您还可以轻松找到应用程序 URL(特定用户 ID 的目标路由)。使用Kubernetes API 客户端库或直接通过Kubernetes REST API可以从 Kubernetes API 访问相同的信息,您的前端将使用 (3)。


推荐阅读