我们正在使用 vSphere 技术进行虚拟化,我的任务是开发可扩展的应用程序基础架构。我对 AWS 更熟悉。
在对扩展进行一些研究后,我不确定我是否理解了扩展 Docker 等容器的意义。假设我有一个具有 32GB RAM 的 VM,它正在运行我们的 Docker 容器。突然出现大量流量和工作负载,因此我想进行负载平衡和扩展。如果我在此服务器上启动更多相同的容器,我实际上并没有为应用程序分配新的资源来进行负载平衡。
那么,当它对解决问题没有帮助时,我如何证明使用容器管理应用程序来动态扩展docker容器是合理的,为什么它被用作负载平衡的解决方案?
编辑 1:从答案来看... 2 个虚拟服务器,我的容器有空间可以增长和缩小。 2 个服务器占用了 128MB RAM。 如果需要,同一服务器机架上的其他系统可以使用这 128MB RAM,但我却为我的两个虚拟服务器占用了 128MB。 这不是我想要的,我希望分配给我的资源可以增长和缩小。 因此,如果我们使用的是虚拟机而不是容器,我会启动另一个具有 64MB RAM 的虚拟机和/或停止虚拟机以动态释放 RAM。 我仍然不明白与扩展虚拟机相比,扩展容器的好处是什么。 它不会给我更多的资源来运行我的应用程序,也不会缩小我的资源以便其他系统可以使用我的资源。
答案1
自动缩放是为多机器环境设计的。无论是裸机还是虚拟机,您都可以利用其他机器的资源来满足容器中更多负载的需求。
只需看一下“Kubernetes 中的自动扩缩“(这是最流行的容器编排工具之一)。
此外 - 如果您将应用程序迁移到云,自动扩展将变得非常容易,并且您将在那里看到它的全部潜力。
但是,例如,您可以在本地设置一组机器,这些机器将自动扩展您的应用程序,直到服务器得到充分利用。例如,您可以在本地(非云)设置 Kubernetes 集群。
有用的链接:
答案2
Kubernetes 的起源作为容器操作系统,Google 发明了集群来调度作业。(虚拟机对他们来说太重了。)他们已经在他们不会告诉你有多少台机器上启动了数百万个容器。多节点扩展从一开始就是必然的。
此设计的元素可以缩小。
假设一个容器实例有 1 GB 的 RAM,足以执行一些有趣的操作,例如 Web 服务器。还假设您在物理服务器中有 128 GB 的 RAM。但是一个是零,因此为了实现高可用性,您需要两台物理服务器。无论您是否将计算划分为虚拟机,总共有大约 200 个容器容量。
由于是轻量级的,每个应用程序都可以拥有多个容器,从而实现滚动升级和扩展。也许一个 API 用 4 个容器运行,一个由它支持的网站用 2 个容器运行,一些相关的批处理作业用另外 2 个容器运行。我们想象中的集群可以容纳几十个这样的基于微服务的应用程序,这种集群的密度相当高。
网站服务可以扩展到更多容器。如果总体上需要更多计算,则可以向集群添加更多节点。Kubernetes 能够在这两个维度上自动扩展。
打个比方,考虑一下物理集装箱。卸货并不特别关心地面运输。总是有更多的火车将标准尺寸的集装箱运走。更大的节点 = 更长的火车。横向扩展 = 更多火车。不过,仍然有一些特殊的重载,比如数据库之类的,不容易放入集装箱中。