一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

K8S之長連接負載均衡不均如何解決

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2023-06-05 11:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、前言

本文針對我們生產上出現的流量不均的問題,介紹一下解決方案。

k8s是一個特別復雜的系統(tǒng),而網絡相關的問題是其中最復雜的問題,要通過一兩篇文章介紹清楚是很難的。這個流量不均的問題出現的原因并不復雜,就是因為kube-proxy使用了默認的iptables做負載均衡,而它是以概率的方式轉發(fā),使用長連接且連接數較少時,偏差會比較大。下面介紹兩種場景。

二、場景

2.1滾動更新負載不均

在連接數比較固定或波動不大的情況下,滾動更新時,舊 Pod 上的連接逐漸斷掉,重連到新啟動的 Pod 上,越先啟動的 Pod 所接收到的連接數越多,造成負載不均:

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

2.2rr 策略負載不均

假如長連接服務的不同連接的保持時長差異很大,而 ipvs 轉發(fā)時默認是 rr 策略轉發(fā),如果某些后端 Pod "運氣較差",它們上面的連接保持時間比較較長,而由于是 rr 轉發(fā),它們身上累計的連接數就可能較多,節(jié)點上通過 ipvsadm -Ln -t CLUSTER-IP:PORT 查看某個 service 的轉發(fā)情況:

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

我們發(fā)現部分 Pod 連接數高,它們相比連接數低的 Pod 要同時處理更多的連接,消耗的資源也就相對更多從而造成負載不均。

將 kube-proxy 的 ipvs 轉發(fā)模式設置為 lc (Least-Connection) ,即傾向轉發(fā)給連接數少的 Pod,可能會有所緩解,但也不一定,因為 ipvs 的負載均衡狀態(tài)是分散在各個節(jié)點的,并沒有收斂到一個地方,也就無法在全局層面感知哪個 Pod 上的連接數少,并不能真正做到 lc。可以嘗試設置為 sh (Source Hashing),并且這樣可以保證即便負載均衡狀態(tài)沒有收斂到同一個地方,也能在全局盡量保持負載均衡。

這邊很多對kupe-proxy的ipvs模式可能不太了解,ipvs和iptables都是基于netfilter的,兩者差別如下:

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

ipvs 支持比 iptables 更復雜的負載均衡算法(最小負載、最少連接、加權等等)

ipvs 支持服務器健康檢查和連接重試等功能

2.3、擴容失效問題 在連接數比較固定或波動不大的情況下,工作負載在 HPA 自動擴容時,由于是長鏈接,連接數又比較固定,所有連接都 "固化" 在之前的 Pod 上,新擴出的 Pod 幾乎沒有連接,造成之前的 Pod 高負載,而擴出來的 Pod 又無法分擔壓力,導致擴容失效:

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

三、最佳實踐

業(yè)務層面自動重連,避免連接 "固化" 到某個后端 Pod 上。比如周期性定時重連,或者一個連接中處理的請求數達到閾值后自動重連。

不直接請求后端,通過七層代理訪問。比如 gRPC 協(xié)議,可以 使用 nginx ingress 轉發(fā) gRPC,也可以 使用 istio 轉發(fā) gRPC,這樣對于 gRPC 這樣多個請求復用同一個長連接的場景,經過七層代理后,可以自動拆分請求,在請求級別負載均衡。

kube-proxy 的 ipvs 轉發(fā)策略設置為 sh (--ipvs-scheduler=sh)。

編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 負載均衡
    +關注

    關注

    0

    文章

    122

    瀏覽量

    12597

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    什么是 K8S,如何使用 K8S

    Kubernetes(簡稱K8S)是一個用于管理容器化應用程序的開源平臺。以下是關于K8S及其使用方法的介紹: 一、什么是 K8S 核心特點 自動化容器編排:自動處理容器的部署、擴展、負載
    發(fā)表于 06-25 06:45

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

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

    關于K8s最詳細的解析

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

    Docker不香嗎為什么還要用K8s

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

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

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

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

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

    K8S(kubernetes)學習指南

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

    mysql部署在k8s上的實現方案

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

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

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

    什么是K3sK8s?K3sK8s有什么區(qū)別?

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

    k8s生態(tài)鏈包含哪些技術

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

    k8s云原生開發(fā)要求

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

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

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

    k8s和docker區(qū)別對比,哪個更強?

    Docker和Kubernetes(K8s)是容器化技術的兩大流行工具。Docker關注構建和打包容器,適用于本地開發(fā)和單主機管理;而K8s則提供容器編排和管理平臺,適用于多主機或云環(huán)境,具備自動化
    的頭像 發(fā)表于 12-11 13:55 ?667次閱讀

    搭建k8s需要買幾臺云主機?

    至少3臺。搭建Kubernetes(K8s)集群所需的云主機數量因實際需求而異。一個基本的K8s集群通常需要至少3臺云主機,包括1個Master節(jié)點和2個Worker節(jié)點。如果考慮高可用性和容錯能力
    的頭像 發(fā)表于 02-20 10:40 ?428次閱讀