【问题标题】:Kubernetes-services load balancingKubernetes 服务负载均衡
【发布时间】:2022-10-23 19:46:56
【问题描述】:

我已经阅读了this question,这与我的要求非常相似,但仍然想写一个新问题,因为那里接受的答案似乎非常不完整并且可能是错误的。

基本上,对于常规 Kubernetes 服务的内置负载平衡,似乎存在一些缺失或矛盾的信息(我不是在谈论 LoadBalancer 服务)。例如,官方Cilium documentation 声明“Kubernetes 没有实现负载平衡”。另外,我在 Kubernetes 官方文档中找不到任何关于内部服务负载均衡的信息(只有a section discussing this under ingresses)。

所以我的问题是 - 当我们从 Kubernetes 集群内向 Kubernetes 服务的内部地址发出请求时,负载平衡或请求分配如何工作?

我知道每个节点上都有一个 Kubernetes 代理为此类服务创建 DNS 记录,但是跨多个 pod 和节点的服务呢?必须有某种形式的请求分配或负载平衡,否则这根本行不通,不是吗?

【问题讨论】:

    标签: kubernetes load-balancing kubernetes-service


    【解决方案1】:

    标准 Kubernetes Service 提供基本的负载平衡。即使是 ClusterIP 类型的 Service,Service 也有自己的集群内部 IP 地址和 DNS 名称,并将请求转发到其 selector: 指定的 Pod 集合。

    在正常使用中,创建一个多副本 Deployment,设置一个 Service 指向它的 Pod,只向 Service 发送请求就足够了。所有副本都将收到请求。

    该文档对the implementation of internal load balancing 的讨论比应用程序开发人员通常需要的更详细。除非您的集群管理员进行了额外的设置,否则您可能会获得循环请求路由——第一个 Pod 将接收第一个请求,第二个 Pod 将接收第二个,依此类推。

    ... Cilium 官方文档指出 ...

    这几乎可以肯定是关于外部的负载均衡。作为集群管理员(不是程序员),“普通”Kubernetes 安装不包括外部负载均衡器实现,并且 LoadBalancer 类型的服务与 NodePort 类型的服务行为相同。

    轮询调度存在明显的缺陷,最明显的是,如果您最终遇到需要很长时间和大量资源来服务的单个网络请求。作为应用程序开发人员,解决这个问题的最佳方法是让这些运行时间很长的请求异步运行;返回类似 HTTP 201 Created 的状态,每个作业都有唯一的 URL,并在单独的队列支持的工作人员中执行实际工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 2021-01-10
      • 2013-08-26
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多