【问题标题】:Weighted routing over kubernetes servicesKubernetes 服务上的加权路由
【发布时间】:2019-09-29 11:10:50
【问题描述】:

我有一个主服务和多个从服务。主服务使用来自 Google PubSub 的订阅者不断地轮询主题。从服务是 REST API。主服务收到消息后,会将消息委托给从服务。目前我在 Kubernetes 中使用 ClusterIP 服务。我的一些请求运行时间很长,有些请求很短。

我碰巧观察到,有时如果有一个短时间运行的请求而一个长时间运行的请求正在处理中,它必须等到长时间运行的请求才能完成,即使许多 pod 可用而没有提供任何流量。我认为这是由于循环负载平衡。我一直在尝试寻找解决方案并研究诸如使用入口和内部 HTTP 负载平衡器设置外部 HTTP 负载平衡器之类的方法。但是我真的很困惑这两者之间的区别以及哪一个适用于我的用例。您能建议哪种方法可以解决我的用例吗?

【问题讨论】:

    标签: kubernetes load-balancing google-kubernetes-engine kubernetes-ingress kubernetes-service


    【解决方案1】:

    TL;DR

    假设您希望 20% 的流量转到 x 服务,其余 80% 到 y 服务。为 2 个目标中的每一个创建 2 个入口文件,具有相同的主机名,唯一的区别是其中一个将带有以下 入口注释

    nginx.ingress.kubernetes.io/canary: "true" #--> tell the controller to not create a new vhost
    
    nginx.ingress.kubernetes.io/canary-weight: "20" #--> route here 20% of the traffic from the existing vhost 
    

    为什么和如何

    加权路由有点超出ClusterIP。正如你自己所说,是时候让新玩家进入游戏了——ingress controller

    这是 load balancer 的 k8s 抽象 - 一个强大的服务器,位于您的应用程序前面,并在 ClusterIPs 之间路由流量。

    install ingress controller on gcp cluster

    安装并运行后,使用其 canary 功能执行加权路由。这是使用以下注释完成的:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: http-svc
      annotations:
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/canary: "true"
        nginx.ingress.kubernetes.io/canary-weight: "20"
    spec:
      rules:
      - host: echo.com
        http:
          paths:
          - backend:
              serviceName: http-svc
              servicePort: 80
    

    here 是完整指南。

    外部与内部负载平衡

    (这是来自谷歌云文档的相关定义,但其他云提供商的概念相似)

    GCP的负载均衡器可以分为外部负载和内部负载 平衡器。外部负载均衡器分配来自 互联网到您的 GCP 网络。内部负载均衡器分布 您的 GCP 网络中的流量。

    https://cloud.google.com/load-balancing/docs/load-balancing-overview

    【讨论】:

    • 我在 Kubernetes 中遇到过就绪探针,可用于将 pod 设置为未就绪。如果 pod 未准备好,它们将从服务中删除。因此,新请求将分配给准备好的 pod。基于 nginx 入口的负载平衡与此相比如何?
    • @backprop k8s 在新的 pod 被标记为就绪之前不会移除旧的 pod。这是与入口无关的内部k8s问题。作为评论 - 如果我以前的帖子回答了您的问题,您应该接受我的回答。 see how
    猜你喜欢
    • 2020-10-02
    • 1970-01-01
    • 2020-03-13
    • 2019-02-03
    • 1970-01-01
    • 2021-04-02
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多