Kubernetes使用自定义算法缩放pod

问题描述 投票:1回答:2

我们的云应用程序包含3个紧密耦合的Docker容器,Nginx,Web和Mongo。目前,我们在一台机器上运行这些容器。然而,随着我们的用户越来越多,我们正在寻找扩展的解决方案。使用Kubernetes,我们将形成一个多容器pod。如果我们要复制,我们需要将所有3个容器复制为一个单元。我们的云应用程序由移动应用程序用户使用。我们的应用程序每个Worker节点只能处理大约30000个用户,我们打算在单个工作节点上放置一个pod。移动设备连接到工作节点后,必须继续仅使用该计算机(唯一的IP地址)

我们计划使用Kubernetes来管理容器。负载平衡对我们的用例不起作用,因为移动设备需要在分配后绑定到单个计算机,并且每个Pod独立地使用其自己的持久卷。但是,如果用户数超过30000,我们需要一种在工作节点上启动新Pod的方法,依此类推。

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

Kubernetes是否适合这种设计,我们如何实现自定义pod规模算法。

谢谢

docker kubernetes autoscaling
2个回答
2
投票

小猪支持Jonah Benton的答案:

虽然这在技术上是可行的 - 但问题不在于Kubernetes,而在于您的应用程序!让我指出你的问题:

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

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

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

目前,我们在一台机器上运行这些容器。

虽然不是严格意义上的问题 - 但我非常怀疑扩展您的应用程序意味着什么以及可扩展性带来的挑战!

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

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

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

我们还有另一个赢家 - 不!您正在尝试将Kubernetes视为您的内部部署基础架构!如果你继续这样做,你将会失败,并在此过程中诅咒Kubernetes!

既然我告诉了你一些你认为错误的事情 - 如果我没有就如何使这项工作提出一些建议,我会是一个什么样的人:

在Kubernetes中,您的三个应用程序不应该在一个pod中运行!它们应该在不同的pod中运行:

随意问你是否还有其他问题!


1
投票

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

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

也就是说,关于kubernetes是否适合这种设计的问题 - 我的答案是:不是真的。

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

这个工作量不是其中之一。为了获得任何好处,您必须编写一个调度程序来处理此应用程序的边缘故障和错误情况(当您在短时间内丢失节点时会发生什么......)以对k8s有意义的方式。你必须加快正常的k8s操作速度。

通过提供的信息,很难理解为什么人们会在这些工作负载上使用k8s而不是在某些VM上运行docker并编写一些自动化脚本。

© www.soinside.com 2019 - 2024. All rights reserved.