K8S cgroups詳解

以下是 Kubernetes 中?cgroups(Control Groups)?的詳細解析,涵蓋其核心原理、在 Kubernetes 中的具體應用及實踐操作:

一、cgroups 基礎概念

1.?是什么?
  • cgroups?是 Linux 內核提供的?資源隔離與控制機制,用于限制、統計和監控進程組(如容器)的資源使用。

  • 可管理的資源類型:

    • CPU:分配核心數、時間片權重

    • 內存:限制最大使用量、Swap 控制

    • I/O:磁盤和網絡帶寬限制

    • 進程數:防止 fork bomb

    • 設備訪問:限制特定設備使用

2.?核心組件
組件功能
Hierarchy樹狀層級結構,每個層級綁定一個或多個子系統(如 CPU、Memory)
Subsystem資源控制器(如?cpumemoryblkio),負責具體資源管理
Cgroup層級中的節點,包含一組進程及其資源限制規則
Task進程(線程),屬于某個 cgroup,資源受其規則約束
3.?cgroup v1 vs v2
特性cgroup v1cgroup v2
層級結構多層級,每個子系統獨立單一層級,統一管理所有子系統
資源分配模型分散控制統一權重分配(如?cpu.weight
內存控制memory.limit_in_bytesmemory.max
兼容性廣泛支持需較新內核(≥4.15)

二、Kubernetes 中的 cgroups 實現

1.?資源模型

Kubernetes 通過?Resource Requests/Limits?定義容器的資源需求,底層由容器運行時(如 containerd、Docker)轉換為 cgroup 配置。

resources:requests:cpu: "500m"    # 0.5 CPU 核心memory: "1Gi"   # 1 GB 內存limits:cpu: "1"       # 1 CPU 核心memory: "2Gi"   # 內存硬限制
2.?核心子系統映射
Kubernetes 參數cgroup 子系統關鍵文件/參數
CPU Requestscpucpu.shares(權重)
CPU Limitscpucpu.cfs_period_us?+?cpu.cfs_quota_us
Memory Limitsmemorymemory.limit_in_bytes(v1)或?memory.max(v2)
HugePageshugetlbhugetlb.<size>.limit_in_bytes
Ephemeral Storageblkio(部分)通過 XFS 配額或?blkio.throttle?控制
3.?cgroup 路徑結構

容器 cgroup 路徑示例(v1):

# 查看容器進程的 cgroup
$ cat /proc/<PID>/cgroup# 示例輸出:
12:memory:/kubepods/burstable/pod<UID>/<容器ID>
3:cpu,cpuacct:/kubepods/burstable/pod<UID>/<容器ID>

Kubernetes 層級命名規則:

/kubepods/[QoS-Class]/pod<Pod-UID>/<Container-ID>
  • QoS Classburstable(彈性)、besteffort(盡力而為)、guaranteed(保證)

三、實戰操作:驗證 cgroup 配置

1.?查看容器的 cgroup 限制

進入容器所在節點的 cgroup 目錄(以內存為例):

# 查找容器對應的 cgroup 路徑
$ CONTAINER_ID=$(docker ps | grep <容器名> | awk '{print $1}')
$ CGROUP_PATH=$(docker inspect $CONTAINER_ID | grep -i cgroup | grep memory | head -1 | cut -d'"' -f4)# 查看內存限制
$ cat /sys/fs/cgroup/memory/$CGROUP_PATH/memory.limit_in_bytes
2147483648  # 2Gi
2.?動態調整 cgroup 參數(調試用)
# 臨時修改 CPU 配額(慎用!)
echo 50000 > /sys/fs/cgroup/cpu/$CGROUP_PATH/cpu.cfs_quota_us  # 限制為 50ms/100ms 周期

四、Kubernetes 資源 QoS 與 cgroup

1.?QoS 等級
QoS 級別條件cgroup 表現
Guaranteed所有容器設置?limits=requests高優先級,cpu.shares?根據 requests 分配,內存不足時最后被 OOMKill
Burstable至少一個容器設置?requests<limits?或未設置 limits中等優先級,資源超用時可能被限制或終止
BestEffort所有容器未設置?requests?和?limits最低優先級,資源緊張時優先被終止
2.?OOM 處理機制
  • 當節點內存不足時,OOM Killer?按優先級終止容器:

    • BestEffort?→ 2.?Burstable?→ 3.?Guaranteed

  • 查看 OOM 事件:

    dmesg | grep -i "oom"
    journalctl -k | grep -i "oom"

五、高級配置

1.?自定義 cgroup 驅動

Kubernetes 支持兩種 cgroup 驅動:

  • cgroupfs:直接寫入 cgroup 文件系統(默認)。

  • systemd:通過 systemd 管理 cgroup(需節點使用 systemd)。

配置 kubelet 使用 systemd 驅動:

--cgroup-driver=systemd
2.?設置 cgroup 根目錄

調整 kubelet 參數:

--cgroup-root=/custom-cgroup
3.?Reserved Resources

為系統進程預留資源,避免容器占用全部資源:

# kubelet 配置
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
systemReserved:cpu: "500m"memory: "1Gi"

六、常見問題排查

1.?容器被 OOMKilled
  • 檢查點

    kubectl describe pod <pod-name> | grep -i "OOM"
    kubectl get events --field-selector=reason=OOMKilled
  • 解決:調整?spec.containers[].resources.limits.memory

2.?CPU 節流(Throttling)
  • 檢查點

    kubectl top pod --containers
    cat /sys/fs/cgroup/cpu/$CGROUP_PATH/cpu.stat | grep nr_throttled
  • 解決:優化應用 CPU 使用或增加?limits.cpu

總結

  • 核心作用:Kubernetes 通過 cgroups 實現容器資源隔離,保障多租戶環境穩定性。

  • 配置關鍵:合理設置?requests/limits,結合 QoS 策略優化資源分配。

  • 調試工具docker statskubectl top、直接查看 cgroup 文件系統。

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

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

相關文章

javaer快速從idea轉戰vscode

插件安裝列表 在插市場安裝下面插件 Extension Pack for JavaSpring Boot Tools 配置文件提示Database Client Database/No-SQL管理工具httpYac - Rest Client .http文件編輯、API測試工具 https://httpyac.github.io/guide/request.htmlGit Graph 圖形化Git工具XML by Red H…

[項目總結] 抽獎系統項目技術應用總結

&#x1f338;個人主頁:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;?熱門專欄: &#x1f9ca; Java基本語法(97平均質量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection與…

【趙渝強老師】TiDB SQL層的工作機制

TiDB節點的SQL層&#xff0c;即TiDB Server&#xff0c;它負責將SQL翻譯成Key-Value操作&#xff0c;將其轉發給共用的分布式Key-Value存儲層TiKV&#xff0c;然后組裝TiKV返回的結果&#xff0c;最終將查詢結果返回給客戶端。這一層的節點都是無狀態的&#xff0c;節點本身并不…

性能遠超SAM系模型,蘇黎世大學等開發通用3D血管分割基礎模型

如果把人的身體比作一座龐大的城市&#xff0c;那么血管無疑就是這座城市的「道路」&#xff0c;動脈、靜脈以及毛細血管對應著高速公路、城市道路以及鄉間小道&#xff0c;它們相互協作&#xff0c;通過血液將營養物質、氧氣等輸送到身體各處&#xff0c;從而維持著這座「城市…

git高效殺器——cz-customizable 搭配 commitlint

What is cz-customizable and commitlint? cz-customizable 一款可定制化的Commitizen插件(也可作為獨立工具),旨在幫助創建如約定式提交規范的一致性提交消息。commitlint commitlint 是一個用于檢查 Git 提交信息的工具,它可以幫助開發者保持提交信息的規范性和一致性。…

Spark 中RDD、Job,stage,task的關系

目錄 1. 概念定義1.1 Job1.2 Stage1.3 Task 2. 關系總結3. 示例分析代碼示例執行過程 4. Spark中的運行流程5. 關鍵點5.1 寬依賴和窄依賴5.2 并行度5.3 性能優化 **6. 總結****1. RDD的核心作用****1.1 什么是RDD&#xff1f;****1.2 RDD與Job、Stage、Task的關系** **2. Job、…

Kubernetes基礎(三十二):Worker節點啟動全解析

Worker節點是Kubernetes集群的"肌肉"&#xff0c;負責實際運行業務負載。本文將深入剖析Worker節點的完整啟動流程&#xff0c;并揭秘生產環境中的關鍵優化點。 一、啟動流程全景圖 二、核心啟動階段詳解 1. 系統初始化&#xff08;0-30秒&#xff09; 關鍵任務&a…

matlab實現模型預測控制

考慮擴展狀態空間形式 縮寫為 對于未來的預測&#xff0c;這里要注意&#xff0c;默認了最小預測時域為1&#xff0c;如果不為1&#xff0c;從k1到k最小預測時域的x的預測為0 模型預測控制matlab運行代碼&#xff0c;可實現模型預測控制。 StateMPC是按照錢積新版《預測控制》…

Python_day22

DAY 22 復習日 復習日 仔細回顧一下之前21天的內容&#xff0c;沒跟上進度的同學補一下進度。 作業&#xff1a; 自行學習參考如何使用kaggle平臺&#xff0c;寫下使用注意點&#xff0c;并對下述比賽提交代碼 kaggle泰坦里克號人員生還預測 一、Kaggle 基礎使用步驟 注冊與登錄…

【軟件測試】基于項目驅動的功能測試報告(持續更新)

目錄 一、項目的介紹 1.1 項目背景 二、測試目標 2.1 用戶服務模塊 2.1.1 用戶注冊模塊 2.1.1.1 測試點 2.1.1.2 邊界值分析法(等價類+邊界值) 2.1.1.2.1 有效等價類 2.1.1.2.2 無效等價類 2.1.1.2.3 邊界值 2.1.1.2.4 測試用例設計 2.1.2 用戶登錄 2.1.2.1 測試…

QT中多線程的實現

采用官方推薦的 QObject::moveToThread 方式實現&#xff08;相比繼承 QThread 更靈活&#xff09;&#xff0c;包含耗時任務執行、主線程通信、線程安全退出等核心功能。 環境說明 Qt 版本&#xff1a;Qt 5.15 或 Qt 6&#xff08;兼容&#xff09;項目類型&#xff1a;GUI …

從知識圖譜到精準決策:基于MCP的招投標貨物比對溯源系統實踐

前言 從最初對人工智能的懵懂認知&#xff0c;到逐漸踏入Prompt工程的世界&#xff0c;我們一路探索&#xff0c;從私有化部署的實際場景&#xff0c;到對DeepSeek技術的全面解讀&#xff0c;再逐步深入到NL2SQL、知識圖譜構建、RAG知識庫設計&#xff0c;以及ChatBI這些高階應…

maven如何搭建自己的私服(LINUX版)?

環境準備 安裝 JDK &#xff1a;確保系統已安裝 JDK 8 或更高版本。可以通過以下命令安裝 JDK&#xff1a; 安裝 OpenJDK &#xff1a;sudo apt update && sudo apt install openjdk-11-jdk 安裝 Oracle JDK &#xff1a;需要添加第三方倉庫&#xff0c;例如 WebUpd8 …

armv7 backtrace

ref&#xff1a; ARM Cortex-M3/M4/M7 Hardfault異常分析_arm hardfault-CSDN博客

探索 C++23 的 views::cartesian_product

文章目錄 一、背景與動機二、基本概念與語法三、使用示例四、特點與優勢五、性能與優化六、與 P2374R4 的關系七、編譯器支持八、總結 C23 為我們帶來了一系列令人興奮的新特性&#xff0c;其中 views::cartesian_product 是一個非常實用且強大的功能&#xff0c;它允許我們輕…

SHAP分析!Transformer-BiLSTM組合模型SHAP分析,模型可解釋不在發愁!

SHAP分析&#xff01;Transformer-BiLSTM組合模型SHAP分析&#xff0c;模型可解釋不在發愁&#xff01; 目錄 SHAP分析&#xff01;Transformer-BiLSTM組合模型SHAP分析&#xff0c;模型可解釋不在發愁&#xff01;效果一覽基本介紹程序設計參考資料 效果一覽 基本介紹 基于SH…

牛客周賽 Round 92-題解

牛客周賽 Round 92-題解 A-小紅的簽到題 code #include<iostream> #include<string> using namespace std; string s; int main() {int n;cin >> n;cout << "a_";for (int i 0; i < n - 2; i )cout << b;return 0; }B-小紅的模…

Java設計模式之建造者模式:從入門到精通

1. 建造者模式概述 1.1 定義與核心概念 **建造者模式(Builder Pattern)**是一種創建型設計模式,它將復雜對象的構建過程與其表示分離,使得同樣的構建過程可以創建不同的表示。 專業術語解釋表: 術語解釋產品(Product)最終要構建的復雜對象建造者(Builder)定義創建產品各個…

各類有關NBA數據統計數據集大合集

這些數據我已上傳大家在CSDN上直接搜索就可以&#xff01; 一、【2022-2023 NBA球員統計】數據集 關鍵詞: 籃球 描述: 語境 該數據集每場比賽包含2022-2023常規賽NBA球員統計數據。 請注意&#xff0c;由團隊更改產生了重復的球員名稱。 * [2021-2022 NBA播放器統計]&#…

3、食品包裝控制系統 - /自動化與控制組件/food-packaging-control

76個工業組件庫示例匯總 食品包裝線控制系統 這是一個用于食品包裝線控制系統的自定義組件&#xff0c;提供了食品包裝生產線的可視化監控與控制界面。組件采用工業風格設計&#xff0c;包含生產流程控制、實時數據監控和邏輯編程三個主要功能區域。 功能特點 工業風格UI設…