Kubernetes CNI網絡插件性能瓶頸排查與優化實踐

cover

Kubernetes CNI網絡插件性能瓶頸排查與優化實踐

CNI(Container Network Interface)是 Kubernetes 網絡層的核心組件,不同 CNI 插件實現了容器間網絡通信、多租戶隔離、流量限速等功能。然而在大規模集群或高并發業務場景下,CNI 插件性能瓶頸往往成為網絡吞吐和容器部署速度的制約因素。本文結合真實生產環境案例,系統化地介紹了 CNI 插件的性能問題現象、定位思路、根因分析與解決方案,以及后續優化和預防監控措施。


一、問題現象描述

在一套千節點規模的 Kubernetes 集群中,采用 Calico CNI 插件,主要表現為:

  • 節點網絡連通性偶發性中斷,Pod 間流量丟包率在高并發場景下(>5000 QPS)上升到 5% 以上;
  • 新增節點或快速滾動部署時,CNI 相關的 calico-node DaemonSet 啟動緩慢,插入 iptables 規則耗時 5-10s,導致 Pod 調度延遲嚴重;
  • 節點上 felix 進程 CPU 占用長期保持在 80% 以上,網絡丟包增多。

業務方反饋業務峰值出現超時異常,排查后發現是網絡層性能瓶頸導致微服務調用鏈等待。

二、問題定位過程

定位 CNI 插件性能瓶頸,一般可從以下幾個維度進行排查:

  1. 觀察節點網絡狀態指標
    • sar -n DEV 1 10 查看網卡流量和錯誤報文;
    • ss -snetstat -s 查看系統網絡連接統計。
  2. 查看 CNI 插件日志
    • kubectl logs ds/calico-node -n kube-system,重點關注啟動日志、felix 報錯。
  3. 排查 iptables 規則數量
    • iptables-save | wc -l,若規則行數達到數千上萬,匹配效率極低。
  4. 監控 felix CPU 使用率
    • 通過 Prometheus 抓取 container_cpu_usage_seconds_total;
  5. 抓取 netfilter trace
    • 使用 tcpdump 配合 iptables TRACE

2.1 網卡錯誤與包丟失分析

# 采集網卡流量和錯誤報文
sar -n DEV 1 5
time          IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s  txcmp/s   rxmcst/s    %ifutil
12:00:01      eth0     3000.00   2950.50   4000.00    3800.00      0.00     0.00       0.00      1.00errors: 0  dropped: 0

網卡本身無錯誤丟包,說明底層物理網絡性能正常。

2.2 iptables 規則規模檢查

# 查看節點上的 iptables 規則總數
iptables-save | wc -l
# 結果: 24500

近 2.5 萬條規則,每次網絡包過來的時候都需要做規則匹配,開銷顯著。

2.3 felix 日志與 CPU 報表

# 查看 felix 日志
kubectl logs -f ds/calico-node -n kube-system | grep felix
# CPU 使用率
# 在 Prometheus 中查詢:sum(rate(container_cpu_usage_seconds_total{container="felix",pod=~"calico-node.*"}[5m])) by (instance)

felix 進程負責管理 BPF or iptables 規則,規則變更和網絡事件響應過于頻繁導致高 CPU。

三、根因分析與解決

通過上述定位,主要根因為:

  1. 使用 iptables 模式,規則條數過多;
  2. felix 默認全局掃描規則更新策略,不具備增量優化;
  3. 大規模集群場景下,CNI Controller 與節點同步延遲,頻繁重刷規則。

針對這些根因,可采取以下優化:

3.1 切換 Calico BPF 數據平面

Calico 自 v3.17+ 開始支持 BPF dataplane,在 Linux 5.8+ 環境下可替換 iptables,性能提升顯著。

  • 編輯 calico-node DaemonSet:
apiVersion: apps/v1
kind: DaemonSet
metadata:name: calico-nodenamespace: kube-system
spec:template:metadata:labels:k8s-app: calico-nodespec:containers:- name: calico-nodeenv:- name: FELIX_BPFENABLEDvalue: "true"- name: FELIX_BPFKERNELCOLLECTIONMODEvalue: "Disable" # 或 'Fallback'
  • 重啟 DaemonSet 生效:
kubectl rollout restart ds/calico-node -n kube-system

BPF 模式下,網絡包由 eBPF 程序直接處理,無需 iptables 多級查表,散列算法加速匹配。

3.2 優化 felix 配置

felixConfiguration CRD 中開啟增量編程和減少全局掃描:

apiVersion: projectcalico.org/v3
kind: FelixConfiguration
metadata:name: default
spec:endpointRoutesEnabled: false  # 關閉 Endpoint 路由interfacePrefix: "cali"     # 只匹配 cali* 接口iptablesRefreshInterval: 600s # 延長規則刷新周期ipsetsRefreshInterval: 600s   # 延長 ipset 刷新周期

修改后:

kubectl apply -f felix-config.yaml

重啟 calico-node 后,felix 僅增量更新規則,減少資源消耗。

四、優化改進措施

結合 BPF 模式和 felix 配置優化后,在相同流量模型下:

  • iptables-save | wc -l 規則行數減少至 3k;
  • felix CPU 使用率從 80% 降至 15%;
  • Pod 新增部署延遲從 5-10s 降至 500ms;
  • 網絡丟包率降至 <0.1%。

4.1 容器網絡資源隔離

為防止單節點網絡資源爭搶,可結合 Kubernetes NetworkPolicy:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: restrict-namespacenamespace: production
spec:podSelector: {}ingress:- from:- namespaceSelector:matchLabels:name: trustedpolicyTypes:- Ingress

通過合理的 NetworkPolicy 限流,減少 CNI 規則復雜度。

4.2 彈性擴縮容方案

配合 Kubernetes Cluster Autoscaler 或自研動態擴容腳本,當網絡利用率達到閾值時,自動擴充節點,均攤流量壓力。

五、預防措施與監控

  1. Prometheus 指標監控
    • felix_active_rule_count:規則總數
    • calico_bpf_programs_loaded:BPF 程序加載狀態
    • calico_felix_cpu_seconds_total:CPU 使用情況
  2. Grafana 可視化告警
    • 規則數量 > 5k 報警
    • felix CPU > 50% 報警
    • Pod 網絡錯誤 > 1% 報警
  3. 定期審計 CNI 插件版本
    • 保持 Calico、Cilium 等插件版本更新,及時獲取性能改進
  4. 文檔與 SOP
    • 制定 CNI 插件升級、配置變更的審批流程
    • 形成網絡故障應急診斷手冊

通過上述實踐,在生產環境中成功穩定運行 24x7,支持每日峰值流量 10 萬 QPS。希望本文對面臨 Kubernetes CNI 網絡性能挑戰的同學有所幫助。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89835.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89835.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89835.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

20250720-6-Kubernetes 調度-nodeName字段,DaemonS_筆記

一、污點與容忍&#xfeff;1. 給節點添加污點&#xfeff;1&#xff09;命令格式基本語法&#xff1a;kubectl taint node [node] keyvalue:[effect]示例&#xff1a;kubectl taint node k8s-node1 gpuyes:NoSchedule操作說明&#xff1a;與打標簽命令類似&#xff0c;將"…

微軟開源項目 Detours 詳細介紹與使用實例分享

目錄 1、Detours概述 2、Detours功能特性 3、Detours工作原理 4、Detours應用場景 5、Detours兼容性 6、Detours具體使用方法 7、Detours使用實例 - 使用Detours攔截系統庫中的UnhandledExceptionFilter接口,實現對程序異常的攔截 C++軟件異常排查從入門到精通系列教程…

研發知識系統選型實戰:從 Notion 到 Gitee Wiki 的迭代經驗

關鍵詞&#xff1a;知識管理、版本控制、協作編輯、國產平臺、研發效能 在日常研發管理中&#xff0c;知識管理平臺往往被視為“非核心工具”&#xff0c;但它的好壞直接影響著團隊交接效率、文檔可用性以及協作深度。過去幾年&#xff0c;我們團隊先后使用過 Notion、Confluen…

從一開始的網絡攻防(三):sqlmap快速上手

一、確定目標 使用sqlmap的第一步是確定探測的目標&#xff0c;一般有四種&#xff1a; 數據庫URL文件Google批量掃 環境 Target IP: 192.168.8.133 Port: 13306(Mysql)、8088(sqli_labs) mysql&#xff1a; docker pull的最新mysql sqlmap github&#xff1a;https://g…

《Anaconda 精簡路徑治理》系列 · 番外篇Conda 虛擬環境路徑結構方案全解——六種路徑布局對比、優劣與治理建議

Python 多版本環境治理理念驅動的系統架構設計&#xff1a;三維治理、四級隔離、五項自治 原則-CSDN博客 Anaconda 路徑精簡后暴露 python 及工具到環境變量的配置記錄-CSDN博客 【終極實戰】Conda/Poetry/Virtualenv/Pipenv/Hatch 多工具協同 AnacondaPyCharm&#xff1a;構建…

容器基礎知識3-kubectl、kubeadm 和 kubelet,kube-proxy

kubectl、kubeadm 和 kubelet&#xff0c;kube-proxy的概念和關系一、kubeadm&#xff1a;K8s 集群的 “搭建工程師”核心定位如果把 K8s 集群比作一棟大樓&#xff0c;kubeadm 就是負責 “打地基、搭框架” 的工程師&#xff0c;專門用來快速搭建 K8s 集群的工具。具體工作內容…

langchain調用本地ollama語言模型和嵌入模型

參考&#xff1a;ollama兼容OpenAIEmbeddings的解決思路 解決代碼&#xff1a; 訪問embedding模型代碼 # 測試以下兩個引用都可以 from langchain_openai import OpenAIEmbeddings #from langchain_community.embeddings import OpenAIEmbeddings from typing import List,…

gitlab私有化部署

以下是整理好的Markdown格式文檔&#xff0c;詳細描述了從下載鏡像、啟動鏡像、修改external_url以及設置或重置root密碼的步驟。 GitLab 安裝與配置指南 本文檔將指導您完成GitLab的安裝和基本配置過程&#xff0c;包括下載鏡像、啟動容器、修改外部訪問URL(external_url)及設…

CCLink IE轉ModbusTCP網關配置無紙記錄器(上篇)

本研究案例采用CCLink IE轉ModbusTCP網關技術&#xff0c;實現了將記錄儀數據傳輸至三菱PLCPLC的過程。具體操作步驟如下所述。在確保無紙記錄儀與PT100傳感器傳感器的連接無誤后&#xff0c;應將無紙記錄儀與個人計算機&#xff08;PC&#xff09;通過以太網線進行連接&#x…

近期工作感想:職業規劃篇

最近整理博客時&#xff0c;撞見意外的驚喜——17年剛畢業那會兒寫的職業規劃&#xff0c;靜靜躺在回收站里。 重讀那些碎碎念&#xff0c;忍不住想笑&#xff1a;那時候的焦慮太真切了&#xff0c;哪敢想后來會遇到這么多大佬&#xff0c;推著我往前一直陰暗爬行&#x1f602;…

Matlab自學筆記六十四:求解自變量帶有約束條件的方程

1.說明 有一些方程由于實際問題的需要&#xff0c;需要設置一些限制約束條件&#xff0c;例如x>0等&#xff0c;若使用Matlab編程求解&#xff0c;首先嘗試使用符號運算求解&#xff08;符號運算可參考文章54&#xff1a;Matlab自學筆記五十四&#xff1a;符號數學工具箱和…

Flutter狀態管理篇之ChangeNotifier(二)

目錄 前言 一、ChangeNotifier定義 1.ChangeNotifier定義 2.Listenable的定義 二、繼承體系 三、核心方法解析 1.類結構與屬性分析 1.Listenable的定義 2..核心字段 1.屬性解析 1._count 2._listeners 3.為什么不用const [] 4._notificationCallStackDep…

大帶寬服務器對于高流量網站的作用

隨著科學技術的快速發展&#xff0c;越來越多的網站面臨著高流量的訪問需求&#xff0c;在同一時間中會有著大量的用戶進行訪問&#xff0c;同時也提高了該企業的知名度&#xff0c;但是這對于服務器的性能需求也在逐漸增高&#xff0c;而大帶寬服務器卓越的性能和穩定的傳輸能…

2025年算法備案發號規律總結與下半年發號預測

上半年發號規律總結圖太糊&#xff1f;可看下方表格&#xff08;左劃看全表&#xff09;&#x1f447;今年批次算法備案總批次發布時間所發當批算法材料提交時間段審核周期25年第一批第十批2025/3/122025年1月&#xff08;春節前&#xff09;約2個月25年第二批第十一批2025/5/1…

高光譜相機(Hyperspectral Camera)

高光譜相機&#xff08;Hyperspectral Camera&#xff09;高光譜相機&#xff1a;是一種可以采集連續、多達上百個窄波段的光譜信息的成像設備。它的核心特征是&#xff1a;每個像素點都擁有一個完整的光譜曲線&#xff0c;類似于“像素級別的光譜儀”。舉例&#xff1a;普通彩…

經典排序算法之歸并排序(Merge Sort)

歸并算法定義&#xff1a;所謂歸并排序是指將兩個或兩個以上有序的數列&#xff08;或有序表&#xff09;&#xff0c;合并成一個仍然有序的數列&#xff08;或有序表&#xff09;。這樣的排序方法經常用于多個有序的數據文件歸并成一個有序的數據文件。歸并排序相比較之前的排…

Linux系統環境下 Node.js 20 安裝實踐:glibc 2.17 兼容方案與工具鏈優化

前言&#xff1a;在 CentOS 7.9 的生產環境中&#xff0c;默認搭載的 glibc 2.17 是系統的核心依賴&#xff0c;直接升級它可能引發穩定性風險。而 Node.js 20 作為較新的運行時&#xff0c;其與 glibc 的兼容性長期困擾著開發者&#xff1a;為什么有些場景下 Node.js 20 能直接…

構建一個簡單的Java框架來測量并發執行任務的時間

文章目錄一、完整代碼二、代碼解釋1、方法簽名2、初始化CountDownLatch3、提交任務到執行器4、任務線程的邏輯5、主線程的邏輯詳細解釋總結以下代碼實現了一個簡單的框架&#xff0c;用于測量并發執行任務的時間。它使用了Executor來執行任務&#xff0c;并通過CountDownLatch來…

精通 triton 使用 MLIR 的源碼邏輯 - 第001節:triton 的應用簡介

項目使用到 MLIR&#xff0c;通過了解 triton 對 MLIR 的使用&#xff0c;體會到 MLIR 在較大項目中的使用方式&#xff0c;匯總一下。1. Triton 概述OpenAI Triton 是一個開源的編程語言和編譯器&#xff0c;旨在簡化 GPU 高性能計算&#xff08;HPC&#xff09; 的開發&#…

Python爬蟲-政務網站自動采集數據框架

前言 本文是該專欄的第81篇,后面會持續分享python爬蟲干貨知識,記得關注。 本文,筆者將詳細介紹一個基于政務網站進行自動采集數據的爬蟲框架。對此感興趣的同學,千萬別錯過。 廢話不多說,具體細節部分以及詳細思路邏輯,跟著筆者直接往下看正文部分。(附帶框架完整代碼…