【问题标题】:How many side-car proxy is too much in a pod一个 Pod 中有多少个 Sidecar 代理太多了
【发布时间】:2021-11-16 21:12:05
【问题描述】:

我目前正在研究分布式系统,并且已经看到许多企业依赖 Sidecar 代理模式来提供服务。例如,我知道一家公司使用 nginx 代理对其服务、角色和权限进行身份验证,而不是在其服务中包含此业务逻辑。

另一个使用 GKE 上的 cloud-sql-proxy 来使用谷歌云上的 Cloud SQL 产品。因此,除了将它们的服务部署在运行在 pod 中的容器中之外,它们还只是用于与数据库通信的代理。

还有 istio,它是一种服务网格解决方案,可以部署为 pod 中的边车代理。

我很确定还有其他常见的使用这种模式的用例,但在某些时候,过多的边车代理有多少?运行它的 pod 有多重?在服务容器顶部使用 2、3 甚至 4 个 side car 代理会带来什么复杂性?

【问题讨论】:

    标签: kubernetes proxy containers cloud distributed-system


    【解决方案1】:

    我建议你定义你真正需要什么,并以此为基础继续你的研究,因为这个话题太宽泛,没有一个正确的答案。

    因此,我决定发布一个社区 wiki 答案。随意扩展它。

    在一个 pod 中运行一些容器可能有多种原因。根据Kubernetes documentation

    一个 Pod 可以封装一个由多个并置的应用组成的应用 紧密耦合并需要共享资源的容器。这些 位于同一地点的容器形成了一个单一的有凝聚力的服务单元——用于 例如,一个容器将存储在共享卷中的数据提供给 公共,而单独的 sidecar 容器刷新或更新 那些文件。 Pod 包装了这些容器、存储资源和一个 短暂的网络身份作为一个整体。

    以最简单的形式,sidecar 容器可用于向主应用程序添加功能,否则这些功能可能难以改进。

    使用边车容器的优势

    • sidecar 容器在运行时环境和编程语言方面独立于其主要应用程序;
    • 主应用程序和 Sidecar 容器之间的通信期间没有明显的延迟;
    • sidecar 模式需要设计模块化容器。模块化容器只需极少修改即可插入多个位置,因为您无需在每个应用程序中编写配置代码。

    有关使用边车容器的注意事项

    • 考虑制作一个不消耗太多资源的小型边车容器。 Sidecar 容器的优势在于它们体积小且可插拔。如果 sidecar 容器逻辑变得越来越复杂和/或与主应用程序容器的耦合越来越紧密,则最好将其与主应用程序的代码集成。

    • 为了确保任意数量的 sidecar 容器可以成功地与主应用程序一起工作,有必要在为 pod 定义资源限制时汇总所有资源/请求限制,因为所有容器将并行运行。整个功能只有在两种类型的容器都成功运行时才能工作,而且大多数情况下,这些边车容器既简单又小,消耗的资源比主容器少。

    【讨论】:

    • @WytrzymałyWiktor 是的!但产生了更多我需要研究的问题
    • +1 非常感谢您的深入回答。这是一个理论问题,因为我在任何项目中都没有使用任何边车容器。我只是对这种架构模式和这种方法的副作用感兴趣,因为大多数云技术都依赖这种模式在不触及应用程序代码的情况下将功能“注入”到他们的服务中(如指标、身份验证、断路器、服务发现等功能) )
    • 你知道同一个 pod 中的容器是否“通过网络”通信吗?反序列化和序列化这些请求并在容器之间发送它们的延迟是否增加了?例如,我正在考虑使用侧车容器来启用其服务的 istio 服务网格。如果我有 30 个服务都部署了一个 istio 侧车,那么对于服务之间的每个请求,由于添加了 istio 服务网格,它们会加倍。我想知道性能受到了多大的影响
    • 无论如何,我有很多或研究要做来回答我自己的问题
    • 您的研究进展如何?如果您有未回答的问题,最好单独提问。
    猜你喜欢
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 2010-12-26
    相关资源
    最近更新 更多