当前位置: 首页 > 知识库问答 >
问题:

库伯内特斯的默认负载平衡

马业
2023-03-14

我最近开始研究Kubernetes集群。在我们的集群中,对给定Kubernetes服务的网络调用流如下所示:

外部非K8S负载均衡器-

对于给定的服务,有两个副本。通过查看副本中容器的日志,我可以看到调用被路由到不同的pod。据我所知,我们还没有为Kubernetes中的服务明确设置任何负载平衡策略。

我有几个问题:

1)K8S是否有默认的负载平衡策略?我读过库贝-proxy和随机路由。它看起来绝对不是循环的。2)是否有明显的方法在入口资源本身中指定负载平衡规则?基于每个服务?

查看我们的一个入口资源,我可以看到“loadBalancer”属性为空:

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
ingress.kubernetes.io/rewrite-target: /
kubectl.kubernetes.io/last-applied-configuration: |
  {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"ingress.kubernetes.io/rewrite-target":"/","nginx.ingress.kubernetes.io/rewrite-target":"/"},"name":"example-service-ingress","namespace":"member"},"spec":{"rules":[{"host":"example-service.x.x.x.example.com","http":{"paths":[{"backend":{"serviceName":"example-service-service","servicePort":8080},"path":""}]}}]}}
nginx.ingress.kubernetes.io/rewrite-target: /
  creationTimestamp: "2019-02-13T17:49:29Z"
  generation: 1
  name: example-service-ingress
  namespace: x
  resourceVersion: "59178"
  selfLink: /apis/extensions/v1beta1/namespaces/x/ingresses/example-service-ingress
  uid: b61decda-2fb7-11e9-935b-02e6ca1a54ae
spec:
  rules:
  - host: example-service.x.x.x.example.com
    http:
      paths:
      - backend:
          serviceName: example-service-service
          servicePort: 8080
status:
  loadBalancer:
    ingress:
    - {}

我应该具体说明-我们使用的是本地库伯内特斯集群,而不是云端。

干杯

共有2个答案

胥诚
2023-03-14

我看到两个选项可以与k8s一起使用:

>

>

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
...
spec:
  ...
  subsets:
  - name: test
    ...
    trafficPolicy:
      loadBalancer:
        simple: ROUND_ROBIN

在k8s上与大使一起使用特使代理中的lb\U类型。有关大使的更多信息https://www.getambassador.io.

邵骁
2023-03-14

几天前,这个问题中已经讨论了服务pod之间的“内部负载平衡”。

Ingress并没有做任何特别的事情(除非您已经在它使用的NGINX配置中进行了黑客攻击)-它将使用与链接问题中相同的服务规则。

如果您想要或需要对POD在服务中的路由方式进行细粒度控制,可以扩展Kubernetes的功能-我建议您研究一下Istio的流量管理功能,因为它的一个功能是能够动态控制服务中不同POD接收的流量。

 类似资料:
  • 什么是负载均衡器? 负载平衡改进了跨多个计算资源(如计算机、计算机群集、网络链路、中央处理器或磁盘驱动器)的工作负载分布 NodePort不是负载平衡器。(我知道一旦流量在集群内,kube proxy就会在pod之间进行负载平衡)我的意思是,最终用户点击http://NODEIP:30111(例如)访问应用程序的URL。即使POD之间的流量是负载平衡的,用户仍然会点击一个节点,即“节点”,它是K8

  • 我们在库伯内特斯运行了Spring Boot服务,并且正在使用Spring Cloud库伯内特斯负载均衡器功能和RestTemboard来调用其他Spring Boot服务。我们这样做的主要原因之一是历史上的——因为之前我们使用Eureka在EC2中运行我们的服务进行服务发现,迁移后我们保持了Spring发现客户端/客户端负载平衡(更新依赖项等,以便它与Spring Cloud库伯内特斯项目一起工

  • 我有一个包含 3 个节点的 Kubernetes 集群。 示例部署 我没有入口,但我有外部负载均衡器,可以轮询 80.11.12.10、80.11.12.11、 的流量。 所以我这样设置我的服务。 问题在于,由于现有的 kubernetes 服务负载均衡器,流量会获得两次负载均衡。除此之外,这是不必要的,它会破坏连接持久性。有没有办法强制 Kubernetes 在每个节点的本地机器 Pod 上转发

  • 我在两个节点上运行 Kubernetes,并在两个节点上部署一个应用程序(两个 pod,每个节点一个)。 这是一个Spring Boot应用程序。它使用OpenFygnd来实现服务可发现性。在应用程序中,我定义了一个一来控制程序,它有几个API和一个从API内部调用的@Autow的@Service。 每当我对其中一个API进行请求时,Kubernetes都会使用某种负载平衡来将流量路由到其中一个p

  • 我在pod中运行了高视频编码任务。这些任务在接收用户请求时运行,并且CPU密集型非常高。我想确保CPU使用率最低的pod应该在传入请求中接收。库伯内特斯有没有办法根据CPU使用率的百分比来平衡我的负载?

  • 我定义了一个StatefulSet,里面有一个容器,它会启动。列出了CPU限制和请求,但我从未为内存指定相同的限制。我现在正在运行pod,但我不知道它们占用了多少内存。不管是什么,它都太多了,所以我想降低它。我如何知道它是什么?