我正在学习容器和微服务。这个问题可能是基本的。让我们假设我在我的 PC 的容器上运行了一个微服务。我想知道在容器放大和缩小期间会发生什么。请举例说明
2 回答
我将从问题的语气中假设这是一个更具设计性的问题,并且您已经标记了 kubernetes 和 docker 的事实我将假设您计划使用或已经在某种程度上使用它。
好的,现在问题的前提是,考虑到您有一个微服务,或者在这种情况下,它可以与在您的机器或 VM 上运行的 docker 容器互换。
那么现在扩展服务意味着什么
在 Docker 中
- 您必须在所述 VM 上运行相同映像的多个容器实例
- 这些实例是在多个分配端口上运行的相同 docker 映像,为同一应用程序或 Web 应用程序或静态网站提供服务。
- 这个缩放的应用程序或 web 应用程序现在缩放到 2 的大小比例,并且运行在端口 8080 和 8081 上,为一个简单的 web 应用程序提供服务。
- 现在,为了确保这些扩展的应用程序对您的用例有用,您必须在这两个应用程序之上添加一个负载均衡器,这可以使用 Nginx 代理来完成。
- 为了缩小规模,这意味着您将不得不停止运行这些容器实例之一
docker stop id - 因此,现在您已缩小到 1 的大小比例。
在 Kubernetes
- 在间接使用 docker 做很酷的事情的 kubernetes 编排环境中,负载平衡和缩放机制等已经由 kubernetes 自己处理。
- 因此,在这种情况下,假设您有一个在 pod 中运行的 Web 应用程序容器,当您执行命令“kubectl scale pod_name 2”时,这将调用 Kubernetes API 并扩展或指示下面的 docker 启动另一个实例你的码头工人形象。
- 由于负载均衡器由 Kubernetes 处理,我们将只为我们提供一个简单的端点(还有一些其他的东西,如服务和负载均衡器端点,但我们可以跳过它作为我们的论点)
- 并且以类似的方式,您可以缩减在 pod 中运行的实例数量,并且 kubernetes 将在处理活动流量的同时处理其他所有事情。
您的微服务可能作为多个复制容器运行,每个容器执行相同的功能。例如,如果您有一个 Web 服务,而不仅仅是一个 Web 服务器,您可能有多个 Web 服务器,每个服务器都作为一个容器运行并提供相同的网页。然后,您还将在这些副本前面有一个负载均衡器,它将传入的请求转发到这些容器中的任何一个。
这样做的原因是为了增加微服务的容量。如果单个 Web 服务器每秒可以处理 10 个请求,那么 10 个 Web 服务器一起可以每秒处理 100 个请求。因此,您将服务的总容量增加到每秒 100 个请求。
现在,扩大/缩小只是意味着增加/减少副本容器的数量。例如,您可以扩展到 20 个副本,这会将您的服务的总容量增加到每秒 200 个请求。如果您不需要那么多容量并且想要节省资源,您可以将应用程序缩减到 5 个副本,这会将容量降低到每秒 50 个请求。
在 Kubernetes 中,容器作为 Pod 运行,管理一组复制 Pod 的对象是Deployment,负载均衡器是Service。