K8s-kubernetes(二)資源限制-詳細介紹

在這里插入圖片描述

K8s如何合理規定對象資源使用

基本概念

  • Kubernetes中,占用資源最小單元單個Pod
  • Kubernetes中,資源占用主要針對服務器CPU內存

為什么要做資源限制

  • 對于Kubernetes集群而言,所有Pod都會占用K8s集群所在服務器的資源,如果不做資源控制,則很有可能出現某些Pod無限制占用資源(CPU、內存),導致系統崩潰

資源限制設置方式

Pod、Container級別控制

關鍵參數:request、limits
  • request參數

    • controller做調度時,創建Pod最低資源占用標準
  • limits參數

    • 單個Pod運行時的資源占用上限真正限制資源可用到多少
    • 當容器試圖使用超過limits指定的CPU時會被 CFS 限流;試圖使用超過limits指定的內存時會被 OOM Killer 殺掉并重啟
使用示例
	apiVersion: v1kind: Podmetadata:name: demo-podspec:containers:- name: appimage: nginx:latestresources: # k8s中定義資源規格的關鍵字,主要針對CPU和內存requests: # Pod最低的資源占用。調度器在將Pod指派給某個節點時,會檢查該節點“可分配資源”是否滿足request要求cpu: "100m"        # 0.1 核memory: "128Mi"    # 128 MBlimits: # Pod運行時的最大資源使用上限,cpu: "500m"        # 0.5 核(上限)memory: "256Mi"    # 256 MB(上限)

命名空間級別控制

關鍵策略對象:LimitRange
  • 在命名空間級別,可以使用LimitRange給整個命名空間設置默認值/最大值
  • LimitRange不僅僅是默認值的概念,也是一道硬性檢查
    • 默認值:如果 Pod 或容器未顯式聲明 requests 或 limits,LimitRange 會自動注入默認值
    • 硬性檢查:如果Pod或容器顯式聲明了request或者limits,但是不在 LimitRange的允許范圍內不允許創建Pod
使用示例
apiVersion: v1
kind: LimitRange  #LimitRange類型對象
metadata:name: cpu-mem-limit #LimitRange對象名稱namespace: dev #該策略適用的命名空間
spec: #定義策略具體規則limits: #limits為一個列表,可以包含多個限制策略- type: Container #表示該限制針對的是容器級別,而不是Pod或其他級別min: #指定容器資源的最小值,如果容器請求的資源低于這個值,K8s 會拒絕創建cpu: 100m #最少請求 0.1 個 CPU 核心memory: 128Mi #最少請求128M內存max: #超過這個值的容器會被拒絕創建cpu: 1 #最大請求1個CPU核心memory: 1Gi #最大請求1G內存default: #默認配置,當容器和Pod沒有顯式聲明resources.limits,自動使用這里配置的默認值cpu: 500m #當容器和Pod沒有顯式聲明resources.limits,默認resources.limits.cpu=500mmemory: 512Mi #當容器和Pod沒有顯式聲明resources.limits,默認resources.limits.memory=512Mi defaultRequest: #默認配置,當容器和Pod沒有顯式聲明resources.request,默認的requests數量,request: Pod最低的資源占用。調度器在將Pod指派給某個節點時,會檢查該節點“可分配資源”是否滿足request要求cpu: 200mmemory: 256MimaxLimitRequestRatio: #限制比例:限制與請求的最大比例,控制 limit/request 的最大比例。作用:防止用戶設置過高的 limit 而請求很低的資源,防止節點資源被過度使用或者其他Pod的資源無法保證cpu: 2 # CPU的限制值不能超過請求值的2倍。如果請求是250M內存,則限制不能超過500M。如果超過這個比例,Pod 會被拒絕創建

命名空間/集群級別總量限制

關鍵對象:ResourceQuota
  • ResourceQuota是一種命名空間級別硬限制機制,作用是給每個命名空間設定資源總量紅線
  • 一旦配額用滿,任何導致超配的對象創建都會被拒絕,包括通過Deployment、StatefulSet等控制器間接創建的Pod
ResourceQuota作用范圍
  • ResourceQuota控制的是集群節點級別的總量,還是命名空間的總量?
    • ResourceQuota控制的是單個命名空間資源的總量
    • 如果希望控制集群節點級別,需要多命名空間+ResourceQuota集群級策略(如 ClusterPolicy、PodNodeSelector、多集群聯邦)來實現
ResourceQuota和LimitRange有什么區別
  • ResourceQuota限制的是整個命名空間資源的總量
  • LimitRange限制的是這個命名空間內,單個資源限制量默認值
  • 兩者需要結合使用才能達到最佳效果
使用示例
  1. 確保準入控制器已啟用
    • 大多數發行版默認已包含 --enable-admission-plugins=ResourceQuota;若手動搭建,需在 kube-apiserver 啟動參數里加入
  2. 編寫YML并應用
apiVersion: v1
kind: ResourceQuota #類型為ResourceQuota
metadata:name: team-a-quota #名稱namespace: team-a #作用的命名空間
spec:hard: #hard 是一個 map,key 是被限制的資源類型,value 是字符串形式的硬性上限requests.cpu: "20" #該命名空間內所有 非終止狀態 Pod 的 spec.containers[*].resources.requests.cpu 之和 ≤ 20 CPU(= 20 核)requests.memory: 40Gi #所有 Pod 的 requests.memory 總和 ≤ 40 GiBlimits.cpu: "40" #所有 Pod 的 limits.cpu 總和 ≤ 40 核limits.memory: 80Gi #所有 Pod 的 limits.memory 總和 ≤ 80 GiBpods: "50" #命名空間里當前存在的 Pod 對象數量 ≤ 50 個(Running / Pending / Succeeded 都算,Failed 或 Completed 且 TTL 已過的不算)persistentvolumeclaims: "10" #PVC 對象總數 ≤ 10 個count/deployments.apps: "15" #apps/v1 組下的 Deployment 對象 ≤ 15 個
  1. 查看配額使用/剩余
kubectl describe quota <ResourceQuota名稱> -n <命名空間>

引申問題1:LimitRange限制了容器最大使用資源,如果使用中超過這個限制,會發生什么

  • 結論
    • 最終表現是容器會被OOMKilled
  • 原因
    • LimitRange屬于準入控制,即在Pod創建/更新時作限制校驗,如果超出或低于限制要求,則不允許創建
    • Pod創建完后LimitRange任務結束,不再發揮作用
    • 實際的運行時限制,是由cgroup 和 kubelet 負責,限制的方式也不是拒絕分配,而是直接殺掉

引申問題2:如果容器資源一旦超限就OOMKilled,如何保證應用穩定性?

  1. 預估
    • 在配置上線前,充分壓測評估出最大峰值
    • 給足安全余量,一般要在壓測峰值上再加20%-50%作為安全余量
  2. 觀察
    • 上線后持續觀察,并設置預警措施
  3. 調優
    • 發現不足就及時調大,并滾動升級
    • 垂直擴容(加大limit限制值)
    • 水平擴容(拆業務、分片、增加副本數,降低單實例負載)
    • 應用層優化(減少緩存大小、調整GC參數、使用內存池、對象復用)**
  4. 兜底
    • 保證即使有實例被OOMKilled,其余實例還可以承載流量

引申問題3:LimitRange 和 ResourceQuota 對已有 Pod 有什么影響

這是一個非常重要的問題,涉及 Kubernetes 中資源限制策略的生效范圍和時效性

? 1. LimitRange 對已有 Pod 的影響
  • 不會影響已存在的 Pod
  • LimitRange 只在 新創建的 Pod 或容器 時生效。
  • 它的作用是在 Pod 創建時:
    • 自動補全 resources.requestsresources.limits
    • 驗證資源是否在允許范圍內。

🔍 如果已有 Pod 的資源配置超過了 LimitRange 的 max 限制

  • 不會強制修改或終止這些 Pod。
  • 它們會繼續運行,直到被手動刪除或更新。
  • 只有在重新創建或更新 Pod 時,才會觸發 LimitRange 的驗證。

? 2. ResourceQuota 對已有 Pod 的影響
  • 不會強制終止或修改已存在的 Pod
  • ResourceQuota 是針對命名空間資源總量的限制。
  • 它在創建新資源時檢查是否超過配額。

🔍 如果已有資源已經超過了配額限制

  • 不會影響這些資源的運行。
  • 無法再創建新的資源,直到資源使用量低于配額。

🧠 舉個例子

假設你在 dev 命名空間中設置了如下配額:

limits.cpu: "4"

而已有 Pod 總共使用了 5 個 CPU:

  • ? 已有 Pod 不會被刪除或停止。
  • ? 新 Pod 無法創建,除非已有 Pod 被刪除或資源使用量降低。

📌 總結
特性LimitRangeResourceQuota
是否影響已有 Pod? 不影響? 不影響
是否影響新建 Pod? 生效? 生效
是否強制修改已有資源? 不會? 不會
是否阻止新資源創建?(不符合規則)?(超出配額)

? 建議做法
  • 在設置 LimitRangeResourceQuota 前,先評估當前命名空間資源使用情況。
  • 使用 kubectl describe quotakubectl top pod 查看資源使用。
  • 如果想讓“老 Pod”也受新限制,只能人工或自動化地做:手動滾動重啟 Deployment/StatefulSet → 新 Pod 走新規則。
  • 配合策略引擎(如 Kyverno)實現更強的資源治理。

注意事項

  1. LimitRange 和 ResourceQuota設置前,已有存在的pod,這部分Pod不會不受影響
  2. 一個命名空間建議只創建一個
  3. 多租戶集群,防止某個用戶的 Pod 占用過多資源
  4. CICD環境,限制測試 Pod 的最大資源,防止資源爭搶
  5. 為未聲明資源的容器自動分配合理默認值,避免調度失敗

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

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

相關文章

量子神經網絡:從NISQ困境到邏輯比特革命的破局之路

——解析2025千比特時代開發者的機遇與行動框架 引言:量子計算的“20比特魔咒”與千比特悖論 當開發者被建議“避免在>20量子比特電路訓練”時,富士通卻宣布2025年實現10,000物理比特系統。這一矛盾揭示了量子計算從NISQ時代向FTQC時代躍遷的核心邏輯:千比特突破非為直接…

react+vite-plugin-react-router-generator自動化生成路由

前言&#xff1a;react項目實際使用中有很多提升性能與功能的插件&#xff0c;今天來說一說vite里面提供的vite-plugin-react-router-generator&#xff0c;他主要提供了自動生成路由的功能&#xff0c;配合我們的loadable/component可以實現路由的懶加載與統一管理。1、實現效…

服務器查看 GPU 占用情況的方法

在 Linux 系統中查看 GPU 占用情況&#xff0c;主要取決于你的 GPU 類型&#xff08;NVIDIA/AMD&#xff09;&#xff0c;以下是常用方法&#xff1a; 一、NVIDIA GPU&#xff08;最常用&#xff0c;如 RTX 系列、Tesla 系列&#xff09; 使用 NVIDIA 官方工具 nvidia-smi&…

【Docker實戰進階】Docker 實戰命令大全

Docker 實戰命令大全 Docker 實戰場景&#xff0c;以 Nginx 為核心示例&#xff0c;梳理容器生命周期、鏡像管理、網絡配置、數據持久化及 Compose 編排的核心命令與最佳實踐。 一、容器生命周期管理 1. 基礎生命周期命令 docker run - 創建并啟動容器 核心功能&#xff1a;基于…

PyCharm 2025.2:面向工程師的 AI 工具

引言 隨著人工智能技術的快速發展&#xff0c;AI 工程師對開發工具的需求也在不斷提升。PyCharm 2025.2 版本帶來了革命性的 AI 工具包&#xff0c;將 AI 開發所需的實驗、調試、評估和部署功能原生集成到 IDE 中。這一重大更新不僅提升了開發效率&#xff0c;也為 AI 工程師提…

爬蟲逆向--Day15--核心逆向案例2(Python逆向實現請求加密、請求堆棧、攔截器關鍵字)

一、逆向案例之Python逆向實現請求加密//具體代碼如下 function l(t, e) {return t.toString().toUpperCase() > e.toString().toUpperCase() ? 1 : t.toString().toUpperCase() e.toString().toUpperCase() ? 0 : -1}function u(t) {for (var e Object.keys(t).sort(l)…

時序數據庫市場前景分析

1. 引言隨著物聯網&#xff08;IoT&#xff09;、工業互聯網、金融科技、智慧城市等領域的快速發展&#xff0c;數據呈現爆發式增長&#xff0c;其中時間序列數據&#xff08;Time-Series Data&#xff09;占據了重要地位。時序數據庫&#xff08;Time-Series Database, TSDB&a…

【網絡安全測試】Burp Suite使用指導、配置及常見問題介紹(有關必回)

Burp Suite 是**滲透測試領域事實上的標準工具**&#xff0c;尤其擅長Web應用與API安全測試。針對AI系統&#xff0c;它主要用于測試模型API、管理后臺等Web接口。以下是專業級使用指南&#xff1a;---### **一、 核心模塊與功能概覽**| **模塊** | **核心功能** | **AI測試重點…

iOS 26 一鍵登錄失效:三大運營商 SDK 無法正常獲取手機號

近期&#xff0c;不少開發者和用戶反饋&#xff0c;在升級到 iOS 26 系統后&#xff0c;App 內的 一鍵登錄功能無法正常使用。無論是移動、電信還是聯通的 SDK&#xff0c;都會出現無法獲取手機號的情況&#xff0c;導致用戶需要改用短信驗證碼或手動輸入手機號完成登錄。問題現…

OpenLayers與Vue.js結合實現前端地圖應用

OpenLayers與Vue.js結合實現前端地圖應用 下面我將為您展示如何將OpenLayers與Vue.js結合創建一個功能豐富的前端地圖應用。這個教程包含了基礎地圖展示、標記點、地圖控件以及交互功能。 實現結果 實現思路 在Vue項目中集成OpenLayers庫創建基礎地圖視圖和OSM圖層添加標記點…

VisDrone數據集,專為無人機視覺任務打造

在農業巡查、環保監測、安防布控等廣闊天地&#xff0c;無人機&#xff08;UAV&#xff09;早已超越了“拍照打卡”的酷炫標簽&#xff0c;成為不可或缺的智能之眼。然而&#xff0c;當計算機視覺模型從地面“抬頭”望向無人機視角時&#xff0c;迎接它的卻是截然不同的挑戰&am…

【Python】Python 函數基本介紹(詳細版)?

Python 函數基本介紹&#xff08;詳細版&#xff09;? 文章目錄Python 函數基本介紹&#xff08;詳細版&#xff09;?前言一、函數的創建?1.1 函數名的命名規則?1.2 函數的創建?1.3 函數的調用?二、函數的參數?2.1 形參和實參?2.2 位置參數?2.3 關鍵字參數?2.4 默認參…

【前端Vue】log-viewer組件的使用技巧

目錄 修改行號和組件的樣式 修改高亮顯示的內容和顏色 **log-viewer組件合集** 【前端Vue】如何優雅地展示帶行號的日志文件或文本內容&#xff08;log-viewer組件的使用&#xff09; 【前端Vue】使用log-viewer組件時的踩坑記錄 【前端Vue】log-viewer組件的使用技巧 【前…

OpenCV Python——報錯AttributeError: module ‘cv2‘ has no attribute ‘bgsegm‘,解決辦法

Python在使用 bgsubmog cv2.bgsegm.createBackgroundSubtractorMOG() 去除背景&#xff0c;報錯AttributeError: module ‘cv2‘ has no attribute ‘bgsegm‘ 報錯原因&#xff1a;使用的python環境中沒有安裝擴展包contrib 可以通過pip或者conda安裝 pip install opencv-con…

react + i18n:國際化

注意版本 我這是舊版 react react 16.8.6 i18next 20.6.1 react-i18next 11.18.6文件&#xff1a;zh.json {“hello”: "你好" }文件&#xff1a;en.json {“hello”: "hello" }文件&#xff1a;i18n.tsx import i18n from i18next; import { initRea…

lesson38:MySQL數據庫核心操作詳解:從基礎查詢到高級應用

目錄 引言 一、條件查詢&#xff1a;精準篩選數據 1.1 基本語法 1.2 比較運算符 1.3 邏輯運算符 1.4 特殊條件查詢 1.4.1 模糊查詢&#xff08;LIKE&#xff09; 1.4.2 IN和NOT IN 1.4.3 BETWEEN AND 1.4.4 IS NULL和IS NOT NULL 二、聚合函數&#xff1a;數據統計與…

【數據分析】調控網絡分析:調節因子在腫瘤樣本中的表達相關性與生存效應分析

禁止商業或二改轉載,僅供自學使用,侵權必究,如需截取部分內容請后臺聯系作者! 文章目錄 介紹 數據準備與模擬 相關性分析與邊表生成 網絡可視化 結果展示與討論 加載R包 模擬數據 Spearman 相關 -> 邊表 畫圖 所有代碼 總結 系統信息 介紹 在生物醫學研究中,N?-甲基腺…

Flask中ORM的使用

Flask中ORM的使用 本文介紹Flask中ORM框架flask_sqlalchemy的基本使用&#xff0c;包含模型定義(簡單模型&#xff0c;一對一&#xff0c;一對多&#xff0c;多對多等)&#xff0c;由于實際開發中很少使用物理外鍵&#xff0c;所有本文所有模型都不使用物理外鍵&#xff0c;而關…

FPGA即插即用Verilog驅動系列——高速12位ADC

實現功能&#xff1a;單通道ADC驅動&#xff0c;速率由驅動的時鐘決定12位數據并行&#xff0c;可輕松修改為其他位寬&#xff0c;適應不同的ADC模塊將ADC輸入的unsigned數據轉換為signed&#xff0c;便于后續FIR&#xff0c;MULTI操作匹配AXI4-STREAM協議&#xff0c;有tvalid…

DeepSeek 部署中的常見問題及解決方案:從環境配置到性能優化的全流程指南

一、引言隨著大模型技術的發展&#xff0c;以 DeepSeek 為代表的開源中文大模型&#xff0c;逐漸成為企業與開發者探索私有化部署、垂直微調、模型服務化的重要選擇。然而&#xff0c;模型部署的過程并非 “一鍵啟動” 那么簡單。從環境依賴、資源限制&#xff0c;到推理性能和…