0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

K8S之长连接负载均衡不均如何解决

马哥Linux运维 来源:马哥Linux运维 2023-06-05 11:01 次阅读

一、前言

本文针对我们生产上出现的流量不均的问题,介绍一下解决方案。

k8s是一个特别复杂的系统,而网络相关的问题是其中最复杂的问题,要通过一两篇文章介绍清楚是很难的。这个流量不均的问题出现的原因并不复杂,就是因为kube-proxy使用了默认的iptables做负载均衡,而它是以概率的方式转发,使用长连接且连接数较少时,偏差会比较大。下面介绍两种场景。

二、场景

2.1滚动更新负载不均

在连接数比较固定或波动不大的情况下,滚动更新时,旧 Pod 上的连接逐渐断掉,重连到新启动的 Pod 上,越先启动的 Pod 所接收到的连接数越多,造成负载不均:

1e3b4e60-034b-11ee-90ce-dac502259ad0.png

2.2rr 策略负载不均

假如长连接服务的不同连接的保持时长差异很大,而 ipvs 转发时默认是 rr 策略转发,如果某些后端 Pod "运气较差",它们上面的连接保持时间比较较长,而由于是 rr 转发,它们身上累计的连接数就可能较多,节点上通过 ipvsadm -Ln -t CLUSTER-IP:PORT 查看某个 service 的转发情况:

1e42534a-034b-11ee-90ce-dac502259ad0.png

我们发现部分 Pod 连接数高,它们相比连接数低的 Pod 要同时处理更多的连接,消耗的资源也就相对更多从而造成负载不均。

将 kube-proxy 的 ipvs 转发模式设置为 lc (Least-Connection) ,即倾向转发给连接数少的 Pod,可能会有所缓解,但也不一定,因为 ipvs 的负载均衡状态是分散在各个节点的,并没有收敛到一个地方,也就无法在全局层面感知哪个 Pod 上的连接数少,并不能真正做到 lc。可以尝试设置为 sh (Source Hashing),并且这样可以保证即便负载均衡状态没有收敛到同一个地方,也能在全局尽量保持负载均衡。

这边很多对kupe-proxy的ipvs模式可能不太了解,ipvs和iptables都是基于netfilter的,两者差别如下:

ipvs 为大型集群提供了更好的可扩展性和性能

ipvs 支持比 iptables 更复杂的负载均衡算法(最小负载、最少连接、加权等等)

ipvs 支持服务器健康检查和连接重试等功能

2.3、扩容失效问题 在连接数比较固定或波动不大的情况下,工作负载在 HPA 自动扩容时,由于是长链接,连接数又比较固定,所有连接都 "固化" 在之前的 Pod 上,新扩出的 Pod 几乎没有连接,造成之前的 Pod 高负载,而扩出来的 Pod 又无法分担压力,导致扩容失效:

1e47feda-034b-11ee-90ce-dac502259ad0.png

三、最佳实践

业务层面自动重连,避免连接 "固化" 到某个后端 Pod 上。比如周期性定时重连,或者一个连接中处理的请求数达到阈值后自动重连。

不直接请求后端,通过七层代理访问。比如 gRPC 协议,可以 使用 nginx ingress 转发 gRPC,也可以 使用 istio 转发 gRPC,这样对于 gRPC 这样多个请求复用同一个长连接的场景,经过七层代理后,可以自动拆分请求,在请求级别负载均衡。

kube-proxy 的 ipvs 转发策略设置为 sh (--ipvs-scheduler=sh)。

编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 负载均衡
    +关注

    关注

    0

    文章

    97

    浏览量

    12186

原文标题:K8S之长连接负载均衡问题

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    全面提升,阿里云Docker/Kubernetes(K8S) 日志解决方案与选型对比

    摘要: 今天,日志服务再次升级Kubernetes(k8s)的日志解决方案。1分钟内即可完成整个集群部署,支持动态扩容,提供采集宿主机日志、容器日志、容器stdout等所有数据源的一站式采集。点此
    发表于 02-28 12:49

    全面提升,阿里云Docker/Kubernetes(K8S) 日志解决方案与选型对比

    摘要: 今天,日志服务再次升级Kubernetes(k8s)的日志解决方案。1分钟内即可完成整个集群部署,支持动态扩容,提供采集宿主机日志、容器日志、容器stdout等所有数据源的一站式采集。点此
    发表于 02-28 12:50

    K8S容器编排的互通测试

    K8S容器编排之NetWorkPolicy官方实例
    发表于 06-06 11:28

    k8s核心原理学习指南3

    k8s学习3 - 核心原理
    发表于 09-25 16:37

    K8s 从懵圈到熟练 – 集群网络详解

    。鸟瞰总体上来说,阿里云 K8S 集群网络配置完成之后,如下图所示:包括集群 CIDR、VPC 路由表、节点网络、节点的 podCIDR、节点上的虚拟网桥 cni0、连接 Pod 和网桥的 veth 等
    发表于 10-14 15:06

    从零开始入门 K8s | 应用存储和持久化数据卷:核心知识

    的常见类型:本地存储,常用的有 emptydir/hostpath;网络存储:网络存储当前的实现方式有两种,一种是 in-tree,它的实现代码是放在 K8s 代码仓库中的,随着 K8s 对存储类型支持
    发表于 10-15 14:55

    从零开始入门 K8s | 应用存储和持久化数据卷:核心知识

    首先看一下 Pod Volumes 的常见类型:本地存储,常用的有 emptydir/hostpath;网络存储:网络存储当前的实现方式有两种,一种是 in-tree,它的实现代码是放在 K8s 代码
    发表于 10-16 10:10

    k8s volume中的本地存储和网络存储

    八 、 k8s volume 本地存储和网络存储
    发表于 03-25 08:44

    搭建K8s环境平台的步骤

    1 搭建K8s环境平台规划1.1 单master集群1.2 多master集群
    发表于 11-04 06:03

    负载均衡是什么意思?负载均衡器有什么用

    负载平衡也称负载共享,是指对系统中的负载情况进行动态调整,以尽量消除或减少系统中各节点负载不均衡的现象。
    发表于 12-21 09:48 1.8w次阅读
    <b class='flag-5'>负载</b><b class='flag-5'>均衡</b>是什么意思?<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>器有什么用

    基于不均衡医学数据集的疾病预测模型

    基于不均衡医学数据集的疾病预测模型
    发表于 06-15 14:15 9次下载

    一种新的不均衡关联分类算法ACI

    基于规则的分类算法具有分类性能妤、可解释性强的优点,得到了广泛的应用。然而已有的基于规则的分类算法没有考虑不均衡数据的情况,从而影响了其对不均衡数据的分类效果。文中提出了一种新的不均衡关联分类算法
    发表于 06-17 15:27 16次下载

    服务器负载均衡有几种类型,做负载均衡好在哪

    对于服务器负载均衡可能很多朋友并不了解是什么,服务器负载均衡的简单理解就是指对系统中的负载情况进行动态调整,以尽量消除或减少系统中各节点
    的头像 发表于 09-02 17:57 2915次阅读

    解密负载均衡技术和负载均衡算法

    负载均衡器是一种软件或硬件设备,它起到了将网络流量分散到一组服务器的作用,可以防止任何一台服务器过载。负载均衡算法就是负载
    的头像 发表于 11-12 09:16 813次阅读

    DataParallel里为什么会显存不均匀以及如何解

    DataParallel里为什么会显存不均匀以及如何解
    的头像 发表于 12-14 10:36 778次阅读