kubernetes服务上的加权路由

kubernetes服务上的加权路由,kubernetes,load-balancing,google-kubernetes-engine,kubernetes-ingress,kubernetes-service,Kubernetes,Load Balancing,Google Kubernetes Engine,Kubernetes Ingress,Kubernetes Service,我有一个主服务和多个从服务。主服务使用来自Google PubSub的订阅服务器连续轮询主题。从属服务是RESTAPI。一旦主服务接收到消息,它就会将消息委托给从属服务。目前我正在Kubernetes使用ClusterIP服务。我的一些请求是长时间运行的,而有些请求是很短的 我碰巧注意到,有时如果在处理长时间运行的请求时有一个短时间运行的请求,那么它必须等到长时间运行的请求完成,即使有许多pod可用,但不提供任何流量。我认为这是由于循环负载平衡。我一直在试图找到一个解决方案,并研究了一些方法,如

我有一个主服务和多个从服务。主服务使用来自Google PubSub的订阅服务器连续轮询主题。从属服务是RESTAPI。一旦主服务接收到消息,它就会将消息委托给从属服务。目前我正在Kubernetes使用ClusterIP服务。我的一些请求是长时间运行的,而有些请求是很短的

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

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

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
。正如你自己所说,是时候让一个新玩家加入游戏了——一个新的玩家

这是对a的k8s抽象-一个功能强大的服务器,位于您的应用程序前面,在
ClusterIP
s之间路由流量

一旦安装并运行了它,使用它的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
这是完整的指南

外部与内部负载平衡 (这是谷歌云文档中的相关定义,但与其他云提供商的概念类似)

GCP的负载平衡器可分为外部负载和内部负载 平衡器。外部负载平衡器分配来自 将internet连接到您的GCP网络。内部负载平衡器分配 GCP网络中的流量

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

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
。正如你自己所说,是时候让一个新玩家加入游戏了——一个新的玩家

这是对a的k8s抽象-一个功能强大的服务器,位于您的应用程序前面,在
ClusterIP
s之间路由流量

一旦安装并运行了它,使用它的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
这是完整的指南

外部与内部负载平衡 (这是谷歌云文档中的相关定义,但与其他云提供商的概念类似)

GCP的负载平衡器可分为外部负载和内部负载 平衡器。外部负载平衡器分配来自 将internet连接到您的GCP网络。内部负载平衡器分配 GCP网络中的流量


我在Kubernetes中遇到过准备就绪探测器,可以用来将吊舱设置为未就绪状态。如果POD未完成,它们将从服务中删除。因此,新请求将被分配给准备就绪的pod。基于nginx ingress的负载平衡与之相比如何?@backprop k8s只是在新POD标记为就绪之前不会移除旧POD。这是内部k8s问题,与入口无关。作为一句话——如果我之前的帖子回答了你的问题,你应该接受我的回答。我在Kubernetes中遇到过就绪探测器,它可以用来将吊舱设置为未就绪。如果POD未完成,它们将从服务中删除。因此,新请求将被分配给准备就绪的pod。基于nginx ingress的负载平衡与之相比如何?@backprop k8s只是在新POD标记为就绪之前不会移除旧POD。这是内部k8s问题,与入口无关。作为一句话——如果我之前的帖子回答了你的问题,你应该接受我的回答。