衡阳派盒市场营销有限公司

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

    文章

    113

    瀏覽量

    12391

原文標題:K8S之長連接負載均衡問題

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    OpenStack與K8s結合的兩種方案的詳細介紹和比較

    OpenStack與K8S結合主要有兩種方案。一是K8S部署在OpenStack平臺之上,二是K8S和OpenStack組件集成。
    的頭像 發表于 10-14 09:38 ?2.7w次閱讀

    如何使用kubernetes client-go實踐一個簡單的與K8s交互過程

    【導讀】Kubernetes項目使用Go語言編寫,對Go api原生支持非常便捷。 本篇文章介紹了如何使用kubernetes client-go實踐一個簡單的與K8s交互過程
    的頭像 發表于 02-02 11:16 ?6927次閱讀
    如何使用kubernetes client-go實踐一個簡單的與<b class='flag-5'>K8s</b>交互過程

    關于K8s最詳細的解析

    一個目標:容器操作;兩地三中心;四層服務發現;五種Pod共享資源;六個CNI常用插件;七層負載均衡;八種隔離維度;九個網絡模型原則;十類IP地址;百級產品線;千級物理機;萬級容器;相如無億,K8s有億:億級日服務人次。
    的頭像 發表于 04-08 13:55 ?7375次閱讀
    關于<b class='flag-5'>K8s</b>最詳細的解析

    Docker不香嗎為什么還要用K8s

    Docker 雖好用,但面對強大的集群,成千上萬的容器,突然感覺不香了。 這時候就需要我們的主角 Kubernetes 上場了,先來了解一下 K8s 的基本概念,后面再介紹實踐,由淺入深步步為營
    的頭像 發表于 06-02 11:56 ?3495次閱讀

    簡單說明k8s和Docker之間的關系

    這篇文章主要介紹了k8s和Docker關系簡單說明,本文利用圖文講解的很透徹,有需要的同學可以研究下 最近項目用到kubernetes(以下簡稱k8sks之間有
    的頭像 發表于 06-24 15:48 ?3470次閱讀

    K8S集群服務訪問失敗怎么辦 K8S故障處理集錦

    問題1:K8S集群服務訪問失敗? ? ? 原因分析:證書不能被識別,其原因為:自定義證書,過期等。 解決方法:更新證書即可。 問題2:K8S集群服務訪問失敗? curl: (7) Failed
    的頭像 發表于 09-01 11:11 ?1.6w次閱讀
    <b class='flag-5'>K8S</b>集群服務訪問失敗怎么辦 <b class='flag-5'>K8S</b>故障處理集錦

    K8S(kubernetes)學習指南

    K8S(kubernetes)學習指南
    發表于 06-29 14:14 ?0次下載

    mysql部署在k8s上的實現方案

    的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件之一。這里主要講 mysql 部署在 k8s 上,mysql 部署在 k8s 上的優勢主要有以下幾點。
    的頭像 發表于 09-26 10:39 ?2553次閱讀

    k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres

    ),Kubernetes提供了應用部署,規劃,更新,維護的一種機制。 在Kubernetes中,我們可以創建多個容器,每個容器里面運行一個應用實例,然后通過內置的負載均衡策略,實現對這一組應用實例的管理、發現、訪問,而這些細節都不需要運維人員去進行復雜的手工配置和處理。
    發表于 07-19 13:14 ?1153次閱讀

    什么是K3sK8sK3sK8s有什么區別?

    Kubernetes,通常縮寫為 K8s,是領先的容器編排工具。該開源項目最初由 Google 開發,幫助塑造了現代編排的定義。該系統包括了部署和運行容器化系統所需的一切。
    的頭像 發表于 08-03 10:53 ?7706次閱讀

    k8s生態鏈包含哪些技術

    1. Apache APISIX Ingress 定義 ? 在 K8s 生態中,Ingress 作為表示 K8s 流量入口的一種資源,想要讓其生效,就需要有一個 Ingress Controller
    的頭像 發表于 08-07 10:56 ?1299次閱讀
    <b class='flag-5'>k8s</b>生態鏈包含哪些技術

    K8S落地實踐經驗分享

    k8s 即 Kubernetes,是一個開源的容器編排引擎,用來對容器化應用進行自動化部署、 擴縮和管理。
    的頭像 發表于 01-02 11:45 ?1254次閱讀
    <b class='flag-5'>K8S</b>落地實踐經驗分享

    k8s云原生開發要求

    Kubernetes(K8s)云原生開發對硬件有一定要求。CPU方面,建議至少配備2個邏輯核心,高性能CPU更佳。內存至少4GB,但8GB或更高更推薦。存儲需至少20-30GB可用空間,SSD提升
    的頭像 發表于 10-24 10:03 ?278次閱讀
    <b class='flag-5'>k8s</b>云原生開發要求

    混合云部署k8s集群方法有哪些?

    混合云部署k8s集群方法是首先需在本地與公有云分別建立K8s集群,并確保網絡連接。接著,配置kubeconfig文件連接兩集群,并安裝云服務插件以實現資源互通。然后,編寫Deploym
    的頭像 發表于 11-07 09:37 ?189次閱讀

    k8s和docker區別對比,哪個更強?

    Docker和Kubernetes(K8s)是容器化技術的兩大流行工具。Docker關注構建和打包容器,適用于本地開發和單主機管理;而K8s則提供容器編排和管理平臺,適用于多主機或云環境,具備自動化
    的頭像 發表于 12-11 13:55 ?183次閱讀
    百家乐平注法到| 百家乐官网连闲几率| 葡京娱乐城姚记| 新全讯| 南安市| 百家乐官网投注平台信誉排行| 菲律宾百家乐官网太阳城| 百家乐官网娱乐平台真人娱乐平台 | 最好的百家乐官网论坛| 怎么看百家乐官网路单| 百家乐官网黏土筹码| 百家乐游戏平台排名| 百家乐网站那个诚信好| bet365扑克| 百家乐官网路单破解软件| 成都百家乐官网的玩法技巧和规则| 百家乐平台出租家乐平台出租 | 玩百家乐官网怎么才能赢| 太阳百家乐官网路单生| 百家乐变牌桌| 大发888网址是什么| 交口县| 试玩百家乐官网代理| 百家乐开户优惠多的平台是哪家| 大发888真钱娱乐城| 网上百家乐官网骗人不| 豪享博百家乐官网的玩法技巧和规则 | 皇冠娱乐城| 百家乐官网的分析| 永利百家乐娱乐平台| 大发888娱乐场开户注册| 娱乐城百家乐官网规则| 百家乐网娱乐城| 大发888资讯| 百家乐官网赢家电子书| 百家乐路单| 永利高足球博彩网| 百家乐官网保单机作弊| 太阳百家乐娱乐| 百家乐官网二人视频麻将| 百家乐冯氏坐庄法|