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

禁用库伯内特斯副本集负载平衡

张勇
2023-03-14

我有一个包含 3 个节点的 Kubernetes 集群。

示例部署

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

我没有入口,但我有外部负载均衡器,可以轮询 80.11.12.10、80.11.12.11、80.11.12.12.12 的流量。 所以我这样设置我的服务。

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
  externalIPs:
    - 80.11.12.10
    - 80.11.12.11
    - 80.11.12.12

问题在于,由于现有的 kubernetes 服务负载均衡器,流量会获得两次负载均衡。除此之外,这是不必要的,它会破坏连接持久性。有没有办法强制 Kubernetes 在每个节点的本地机器 Pod 上转发流量?

共有2个答案

周飞语
2023-03-14

kube-proxy 正在使用 IPvs 来管理最近的 K8s 版本中的负载平衡。IPVSADM 可以在节点级别使用,以便选择您希望 IPvs 使用的负载平衡算法。根据 https://linux.die.net/man/8/ipvsadm,您可以在 8 种负载平衡算法之间进行选择:轮循机制、加权轮询、最少连接、加权最小连接、基于位置的最小连接、基于位置的最小复制连接、目标哈希和源哈希。有关其他信息,请查看 ipvsadm 的 --scheduler 选项的文档。

耿敏达
2023-03-14

如果将 service.spec.externalTrafficPolicy 设置为值 Local,则 kube-proxy 仅将代理请求代理到本地endpoint,而不会将流量转发到其他节点。

kubectl patch svc servicename -p '{"spec":{"externalTrafficPolicy":"Local"}}'

如果没有本地endpoint,发送到该节点的数据包将被丢弃。

对于Club sterIP类型服务,您需要使用服务拓扑

服务拓扑使服务能够基于集群的节点拓扑路由流量。例如,服务可以指定流量优先路由到与客户端在同一节点上或在同一可用性区域中的endpoint。

这是kubernetes 1.17提供的alpha特性,需要通过启用特性标志来打开

 类似资料:
  • 我最近开始研究Kubernetes集群。在我们的集群中,对给定Kubernetes服务的网络调用流如下所示: 外部非K8S负载均衡器- 对于给定的服务,有两个副本。通过查看副本中容器的日志,我可以看到调用被路由到不同的pod。据我所知,我们还没有为Kubernetes中的服务明确设置任何负载平衡策略。 我有几个问题: 1)K8S是否有默认的负载平衡策略?我读过库贝-proxy和随机路由。它看起来绝

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

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

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

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

  • 我假设没有愚蠢的问题,所以这里有一个我找不到直接答案的问题。 现在的情况 我目前有一个运行1.15的Kubernetes集群。AKS上的x,通过Terraform部署和管理。AKS最近宣布Azure将在AKS上停用Kubernetes的1.15版本,我需要将集群升级到1.16或更高版本。现在,据我所知,直接在Azure中升级集群不会对集群的内容产生任何影响,即节点、豆荚、秘密和当前在那里的所有其他