【问题标题】:AutoScaling in Docker ContainersDocker 容器中的自动缩放
【发布时间】:2017-03-10 23:15:47
【问题描述】:

我研究 Docker 容器化已经有一段时间了,但仍然有一些事情让我感到困惑。我知道所有容器都被分组到一个集群中,并且可以使用 Docker Swarm、DC/OS、Kubernetes 或 Rancher 等集群管理工具来管理 docker 容器。我一直在使用 DC/OS 和 Kubernetes 测试容器集群管理,但仍有一些问题没有得到解答。

容器级别的自动缩放如何帮助我们在生产服务器中使用? 应用程序如何为来自多个容器的流量提供服务?

假设我们已经使用容器部署了一个 Web 应用程序并且它们已经自动缩放。流量如何流向容器?如何管理会话?

为自动缩放容器计算哪些指标?

【问题讨论】:

    标签: docker kubernetes dcos


    【解决方案1】:

    DC/OS 中的自动缩放(注意:Mesosphere 是公司,DC/OS 是开源项目)自动缩放在docs 中有详细描述。与 Kubernetes 基本相同,您可以使用 CPU 利用率等低级指标来决定何时增加应用程序实例的数量,也可以使用应用程序吞吐量等更高级别的指标,例如使用 Microscaling 方法。

    关于路由如何工作(如何将请求转发到实例,即单个容器运行)的问题:您需要一个负载均衡器,DC/OS 为您提供了开箱即用的功能。同样,docs 中详细列出了这些选项,主要是:基于 HAProxy 的南北向或基于 IPtables 的东西向(集群内部)负载平衡器。

    【讨论】:

    【解决方案2】:

    Kubernetes 有一个名为service 的概念。 Kubernetes 服务是一种抽象,它定义了一组逻辑 Pod 和访问它们的策略。 Kubernetes 使用服务来服务来自多个容器的流量。您可以阅读有关服务的更多信息here

    AFAIK,会话在 kubernetes 之外进行管理,但是可以通过将 service.spec.sessionAffinity 设置为“ClientIP”来选择基于 Client-IP 的会话亲和性。您可以阅读更多关于服务和会话亲和性here

    多个指标(如 cpu 和内存)可用于自动缩放容器。有一个很好的 blog,您可以阅读有关自动缩放、何时以及如何进行的信息。

    【讨论】:

    • 来自所提供博客的有用信息。我完全了解如何设置 kubernetes 集群以及所有...我的问题是多个容器如何使用单个服务来处理来自多个用户的请求?它如何平衡负载以及服务如何识别哪个会话与哪个容器粘在一起?它在实时生产应用程序中的用途。
    • 同一部分中有图片 - kubernetes.io/docs/user-guide/services/… - 你看到了吗,服务可以像负载均衡器一样工作。
    • 是的,这解释了一部分......但是这些服务是如何维护的?路线配置和所有...关于 Mesosphere 的任何想法?
    • 这不是一个简单的问题。就典型服务而言,当前的实现基于 iptables。通常会有一个随机概率匹配,但如果您添加sessionAffinity:ClientIP,则会使用recent 模块添加新规则以保持相同的后端匹配。对于摄取流量,您可以使用 Ingress 和 IngressController,例如 contrib-nginx-ingress,它不通过 iptables,而是将端点直接添加到后端列表,因此以自己的方式处理诸如会话亲和性之类的事情
    猜你喜欢
    • 2016-02-06
    • 1970-01-01
    • 2017-08-01
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多