我们的云应用程序包含3个紧密耦合的Docker容器,Nginx,Web和Mongo。目前,我们在一台机器上运行这些容器。然而,随着我们的用户越来越多,我们正在寻找扩展的解决方案。使用Kubernetes,我们将形成一个多容器pod。如果我们要复制,我们需要将所有3个容器复制为一个单元。我们的云应用程序由移动应用程序用户使用。我们的应用程序每个Worker节点只能处理大约30000个用户,我们打算在单个工作节点上放置一个pod。移动设备连接到工作节点后,必须继续仅使用该计算机(唯一的IP地址)
我们计划使用Kubernetes来管理容器。负载平衡对我们的用例不起作用,因为移动设备需要在分配后绑定到单个计算机,并且每个Pod独立地使用其自己的持久卷。但是,如果用户数超过30000,我们需要一种在工作节点上启动新Pod的方法,依此类推。
我们的想法是,我们有某种自定义调度程序,它根据该节点上的用户数为移动设备分配工作节点(域/ IP地址)。
Kubernetes是否适合这种设计,我们如何实现自定义pod规模算法。
由于
答案 0 :(得分:2)
Piggy-Backing对Jonah Benton的回答:
虽然这在技术上是可行的 - 但问题不在于Kubernetes与你的应用程序有关!让我指出你的问题:
我们的云应用程序由3个紧密耦合的Docker容器组成,Nginx,Web和Mongo。
这是您的第一个问题:您是否只能将这三个容器一起部署而不是独立部署 - 您无法扩展其中一个! 虽然MongoDB可以扩展到疯狂的负载 - 如果它与您的Web服务器和Web应用程序捆绑在一起,它就无法......
因此,您的第一步是分解这三个组件,以便可以相互独立地进行管理。下一个:
目前我们在一台机器上运行这些容器。
虽然不是严格意义上的问题 - 但我非常怀疑扩展您的应用程序意味着什么以及可扩展性带来的挑战!
移动设备连接到工作节点后,必须继续仅使用该计算机(唯一的IP地址)
现在,这是一个问题。您正在寻找在Kubernetes上运行应用程序,但我不认为您理解这样做的后果:Kubernetes协调您的资源。这意味着它将在节点之间移动pod(通过杀死和重新创建)(如果需要,移动到同一节点)。它完全自主(这很棒,让你睡个好觉)如果你依赖于坚持单个节点IP的客户,你会在半夜起床,因为Kubernetes尝试纠正节点故障并移动您的pod,现在已经消失,用户无法再连接。您需要利用Kubernetes中的负载平衡功能(服务)。只有他们能够处理Kubernetes集群中发生的动态变化。
使用Kubernetes,我们将形成一个多容器窗格。
我们还有另一个赢家 - 不!您正在尝试将Kubernetes视为您的内部部署基础架构!如果你继续这样做,你就会在这个过程中失败并诅咒Kubernetes!
现在我告诉了你一些你认为错误的事情 - 如果我没有就如何使这项工作提出一些建议,那么我将成为什么样的人:
在Kubernetes中,您的三个应用程序不应该在一个pod中运行!它们应该在不同的pod中运行:
随时问你是否还有其他问题!
答案 1 :(得分:1)
支持构建自定义调度程序并同时运行多个调度程序:
https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
那就是说,kubernetes是否适合这种设计 - 我的答案是:不是真的。
K8可能难以操作,其收益是它为整类工作负载提供的自动化和弹性水平。
此工作负载不是其中之一。为了获得任何好处,您必须编写一个调度程序来处理此应用程序的边缘故障和错误情况(当您在短时间内丢失节点时会发生什么......)以对k8s有意义的方式。你必须加快正常的k8s操作速度。
通过提供的信息,很难理解为什么人们会在某些虚拟机上运行docker并使用某些自动化脚本来为此工作负载使用k8s。