如何动态扩展docker swarm

如何动态扩展docker swarm

我们有一个 docker 容器,它每次只能处理一个用户请求。因此,我们希望在收到用户请求时进行扩展和缩减。

但在 docker swarm 中,我只能看到通过提供数字将服务的容器数量设置为静态。我们需要的是,每当有来自用户的新请求时,如果现有容器正在与其他用户/会话交互,则容器应该扩大,一旦会话完成或缩小,容器就应该销毁。

谁能建议一下如何做到这一点?

答案1

据我所知,Docker Swarm 不提供基于资源利用率的自动和动态扩展。当今的常见主题是使用 Kubernetes (K8s) 或其他容器编排平台为您完成此操作。话虽如此,您仍然可以编写自定义脚本或应用程序来主动监视容器的利用率并向您的集群发出命令,但这不是一个稳定且有效的解决方案。

这还取决于您在哪里运行容器。如果是在云端(取决于提供商),它们都提供用于容器编排的托管服务,甚至更好的是,它们也有 K8s 解决方案。K8s 有一定的学习曲线,但这就是现在处理容器的方式。如果您在单台计算机或裸机上运行它们,则有利用 K8s 的框架,例如minikube

答案2

您可以使用Docker 流量监控器使用Docker Swarm实现自动扩展的堆栈包括:

Prometheus:抓取指标并在达到特定阈值时发出警报。Docker Flow Monitor:它扩展了 Prometheus 的自动配置功能。

Alertmanager:接收来自 Prometheus 的警报,并根据匹配的路由将其转发到其他服务。

Jenkins:执行计划或触发的作业。我们将使用它作为扩展服务的引擎。

Docker Flow Proxy:它扩展了 HAProxy 的自动配置能力。

Docker Flow Swarm Listener:监听 Swarm 事件并在创建或更新服务时发送通知。我们将使用它向 Docker Flow Monitor 和 Docker Flow Proxy 发送通知。

链接的示例基于响应时间,但应该能够基于不同的指标来确定扩展事件。

然而在这种情况下,最好修复微服务,以便它可以处理多个并发会话。

答案3

我也在考虑这个。要记住的一件事是,一个节点内的容器会填满该节点以最大限度地提高节点的利用率……如果节点过载,那么有多少个容器实际上并不重要,您必须扩展到另一个节点,在该节点上,容器会调整大小,并且给定相同数量的容器,每个容器会拥有更多的 RAM。如果您只是创建比预期节点更多的容器副本,然后将副本模式设置为全局,那么您甚至不必编写脚本来扩大容器的规模。如果您使用的是 AWS,则可以创建云监视警报指标来监视每个节点的 CPU 使用率,在达到某个阈值的警报时自动扩大规模,并让每个节点在容器在群中平衡时自动加入群。您还可以编写一个脚本来定期监视您的群实际拥有的节点数,然后使用比节点多几个副本重新部署服务。

相关内容