【问题标题】:Load balancing does not work correctly when scale pod扩展 pod 时负载均衡无法正常工作
【发布时间】:2021-05-11 02:27:54
【问题描述】:

发生了什么:

当我对 nginx 进行压力测试时,nginx 部署扩展了,但是新创建的 nginx pod 没有任何负载。如果我停止压力测试两分钟,所有 pod 都会开始正常工作。如下图所示: image

你预期会发生什么:

pod一旦创建并通过hpa运行,就可以正常参与负载均衡了。

如何重现它(尽可能最小和精确):

使用 helm 创建 bitnami/nginx:

# helm get values nginx -ntest-p1
USER-SUPPLIED VALUES:
autoscaling:
  enabled: false
  maxReplicas: 40
  minReplicas: 1
  targetCPU: 30
  targetMemory: 30
resources:
  limits:
    cpu: 200m
    memory: 128Mi
  requests:
    cpu: 200m
    memory: 128Mi

还有什么我们需要知道的吗?:

我的测试工具:http_load 如果我在缩减期间开始压力测试,它告诉我没有路由到主机错误

环境:

Kubernetes版本(使用kubectl版本):v1.18.8-aliyun.1

云提供商或硬件配置:阿里云

OS (e.g: cat /etc/os-release): Alibaba Cloud Linux (Aliyun Linux) 2.1903 LTS (Hunting Beagle)

Kernel (e.g. uname -a): Linux 4.19.91-23.al7.x86_64 #1 SMP Tue Mar 23 18:02:34 CST 2021 x86_64 x86_64 x86_64 GNU/Linux

Network plugin and version (if this is a network-related bug): flannel:v0.11.0.2-g6e46593e-aliyun

其他:

kube-proxy模式为ipvs,其他配置默认。

github 上的相同问题:https://github.com/kubernetes/kubernetes/issues/101887

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    我对 http_load 不熟悉,文档也很少。 根据您的观察,我假设 http_load 使用 HTTP keepalive,因此重用 TCP 连接。 Kubernetes 在 TCP 级别进行负载平衡,因此只有新连接才会到达添加的副本。

    您可以将 nginx 配置为不提供 keepalive,这会降低常规用例的效率,或者在发生扩展后启动多个 http_load 实例以观察效果。

    【讨论】:

    • 感谢您的回答。你说的方法我都试过了,结果是一样的。我在这里发现了和我一样的问题:github.com/kubernetes/kubernetes/issues/81775
    • 这确实是由ipvs引起的不同问题,而不是怀疑的keep alive。
    猜你喜欢
    • 1970-01-01
    • 2015-09-26
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 2013-08-26
    相关资源
    最近更新 更多