kubernetes - 扩展服务以响应 Kubernetes 上的请求
问题描述
比方说:
我有一个服务,它在启动时需要一个 id。
我希望每个服务进程在单独的 k8s pod 中运行。
我想在用户输入 id N 的地方放置一个 API 并作为响应:
如果 id N 的服务正在运行,我会将用户路由到它。
如果没有为 id NI start one 运行服务(即启动一个新的 pod),则将用户路由到那里。
我对(3.2)的一些想法:
“路由器”服务使用 k8s api 直接启动新的 pod。这感觉不对,但也许不是?
没有运行服务的传入请求进入队列,根据队列大小触发水平 pod 缩放,并让新服务将 id 从队列中取出。
我错过了一个可以帮助我的原语吗?在 kubernetes 上实现这个的最惯用的方法是什么?如果它完全相关,我将在 AKS 上运行所有这些。
解决方案
在我看来,阅读您的需求,就像您需要在 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)。
推荐阅读
- mysql - 根据用户拥有的“机会”数量分配行
- r - R:找到值> 0并检查数据帧中两个连续值的总和?
- eigen - 自定义标量类型的两个动态大小的特征矩阵之间的乘积
- bash - 这个 bash 参数扩展语法是什么意思?
- sql - SQL - 当转换和替换已经使用时,修剪并只保留字符串中的最后一个单词
- bash - 搜索第一个模式并搜索第二个模式,然后在第二个模式上方插入新行
- php - 为什么数组键值设置在数组末尾而不是特定位置?
- ruby-on-rails - 我的 Fail2Ban 过滤器似乎不起作用
- java - 当我在 Intellij IDEA 中更新文件时如何重新运行 kotlin 项目
- c# - 仅在使用 JOIN 时出现错误“CHARACTER SET ISO8859_1 is not installed”