繁体   English   中英

Kubernetes使用自定义算法扩展Pod

[英]Kubernetes scaling pods using custom algorithm

我们的云应用程序包含3个紧密耦合的Docker容器:Nginx,Web和Mongo。 当前,我们在单个计算机上运行这些容器。 但是,随着用户数量的增加,我们正在寻找可扩展的解决方案。 使用Kubernetes,我们将形成一个多容器容器。 如果要复制,则需要将所有3个容器复制为一个单元。 我们的云应用程序被移动应用程序用户使用。 我们的应用程序每个工人节点只能处理大约30000个用户,我们打算在单个工人节点上放置一个Pod。 一旦移动设备连接到工作节点,它就必须继续仅使用该机器(唯一的IP地址)

我们计划使用Kubernetes管理容器。 负载平衡不适用于我们的用例,因为一旦分配了移动设备就需要将其绑定到一台机器上,并且每个Pod均以其自己的持久卷独立工作。 但是,如果用户数量超过30000,我们需要一种在工作节点上旋转新Pod的方法,依此类推。

我们的想法是,我们有某种自定义调度程序,可根据该节点上的用户数量为移动设备分配一个工作节点(域/ IP地址)。

Kubernetes是否非常适合此设计,以及如何实现自定义的pod scale算法。

谢谢

对乔纳·本顿的答案进行小抄:

尽管这在技术上是可能的-您的问题不是Kubernetes而是应用程序! 让我指出你的问题:

我们的云应用程序包含3个紧密耦合的Docker容器,Nginx,Web和Mongo。

这是您的第一个问题:是您只能将这三个容器一起部署,而不能独立部署吗?您无法扩展一个或另一个! 虽然MongoDB可以扩展到疯狂的负载-如果将它与Web服务器和Web应用程序捆绑在一起,它将无法...

因此,您的第一步是分解这三个组件,以便可以彼此独立地进行管理。 下一个:

当前,我们在单个计算机上运行这些容器。

尽管不是严格的问题,但我非常怀疑扩展您的应用程序意味着什么以及可伸缩性带来的挑战!

一旦移动设备连接到工作节点,它就必须继续仅使用该机器(唯一的IP地址)

现在,这是一个问题。 您正在寻找在Kubernetes上运行应用程序的方法,但我认为您不理解这样做的后果:Kubernetes协调您的资源。 这意味着它将在节点之间(必要时移至同一节点)(通过杀死和重新创建)移动容器。 它实现了这种完全自主的功能(这很棒,并且可以让您睡个好觉)。如果您依赖客户端坚持使用单个节点IP,那么您将在半夜起床,因为Kubernetes尝试纠正节点发生故障,移动了您的Pod,该Pod现在不见了,用户无法连接。 您需要利用Kubernetes中的负载平衡功能(服务)。 只有他们能够处理Kubernetes集群中发生的动态变化。

使用Kubernetes,我们将形成一个多容器容器。

我们还有另一个赢家-不! 您正在尝试将Kubernetes视为您的本地基础架构! 如果继续这样做,您将失败并诅咒Kubernetes!

现在,我告诉您一些您在想错的事情-如果我不提供有关如何进行这项工作的建议,那么我将成为一个什么样的人:

在Kubernetes中,您的三个应用程序不应在一个Pod中运行! 它们应在单独的Pod中运行:

随时问您还有其他问题!

支持构建自定义调度程序并同时运行多个调度程序:

https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/

就是说,对于kubernetes是否适合这种设计的问题,我的回答是:并非如此。

K8可能难以操作,其收益在于它为整个类别的工作负载提供了开箱即用的自动化和弹性水平。

此工作负载不是其中之一。 为了获得任何好处,您必须编写一种调度程序来处理此应用程序遇到的边缘故障和错误情况(短时间内丢失节点会发生什么情况……),这对于k8s来说是有意义的。 而且,您必须加快正常的k8s操作速度。

凭借提供的信息,很难理解为什么仅在某些VM上运行docker并编写一些自动化脚本,而不是使用k8来处理这种工作负载。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM