日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux cgroup、kubernetes limit

發布時間:2024/1/8 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux cgroup、kubernetes limit 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

linux cgroup、kubernetes limit

1.cgroups 簡介

  • cgroups,其名稱源自控制組群(control groups)的縮寫,是內核的一個特性,用于限制、記錄和隔離一組進程的資源使用(CPU、內存、磁盤 I/O、網絡等)
  • 資源限制:可以配置cgroup,從而限制進程可以對特定資源(例如內存或 CPU)的使用量
  • 優先級 :當資源發生沖突時,您可以控制一個進程相比另一個cgroup 中的進程可以使用的資源量(CPU、磁盤或網絡)
  • 記錄:在 cgroup 級別監控和報告資源限制
  • 控制:您可以使用單個命令更改cgroup 中所有進程的狀態(凍結、停止或重新啟動)

Cgroups功能的實現依賴于四個核心概念:子系統、控制組、層級樹、任務

2.limit限制

k8s當設置了limit,真正設置限制的是cgroup,但是最終設置在哪一個組件上?下面一個圖就可以清晰看出來。這也是k8s在24版本后放棄docker的原因,因為k8s可以直接調用到containerd,無序中間在多走一步docker

最終設置在了containerd-shim的執行中。同時cgroup也是設置在了這里。

3.cgroup文件

cgroup是樹形結構的。當最下層的目錄中沒有限制(例如shares為空,則繼承上級父目錄的限制)

cgroup文件在 /sys/fs/cgroup下面,可以看到能限制的所有資源。

如果想要看到某種資源的限制情況,例如cpu,可以進入到cpu查看。可以看到這里cpu的限制是1024,也就是當前task文件里的所有進程,都是cpu限制上限1024。

當k8s創建一個pod時,會根據QOS分級,創建對應的文件夾,其中Guaranteed的pod會單獨創建。

進入到burstable等級的文件夾中,會發現pod信息都在這里,k8s設置的limit值,就是在該目錄下對文件的修改。

我本地啟動了一個Guaranteed類型的pod

這個時候,cgroup下也出現了這個目錄,進入這個目錄查看cpu.shares和memory.limit_in_bytes。發現和describe pod中設置的limit信息是一致的。



這里有個小實驗,就是把cpu.shares改小或者改大。這時候這個pod的限制回隨著改動變化。但是describe pod的時候顯示的依然是最初得值(存在了etcd),所以要在cgroup目錄下直接修改值。

4.subsystem(子系統)
這里就是設置資源限制的使用量。直接貼文檔了。
4.1、cpu子系統:于限制進程的 CPU 利用率

參數說明
cpu.shares-cpu比重分配。通過一個整數的數值來調節cgroup所占用的cpu時間。例如,有2個cgroup(假設為CPU1,CPU2),其中一個(CPU1)cpu.shares設定為100另外一個(CPU2)設為200,那么CPU2所使用的cpu時間將是CPU1所使用時間的2倍。cpu.shares 的值必須為2或者高于2-
cpu.cfs_period_us規定CPU的時間周期(單位是微秒)。最大值是1秒,最小值是1000微秒。如果在一個單CPU的系統內,要保證一個cgroup 內的任務在1秒的CPU周期內占用0.2秒的CPU時間,可以通過設置cpu.cfs_quota_us 為200000和cpu.cfs_period_us 為 1000000
cpu.cfs_quota_us在單位時間內(即cpu.cfs_period_us設定值)可用的CPU最大時間(單位是微秒)。cpu.cfs_quota_us值可以大于cpu.cfs_period_us值,例如在一個雙CPU的系統內,想要一個cgroup內的進程充分的利用2個CPU,可以設定cpu.cfs_quota_us為 200000 及cpu.cfs_period_us為 100000

當設定cpu.cfs_quota_us為-1時,表明不受限制,同時這也是默認值

4.2 cpuacct子系統:統計各個 Cgroup 的 CPU 使用情況

參數說明
cpuacct.statcgroup中所有任務的用戶和內核分別使用CPU的時長
cpuacct.usagecgroup中所有任務的CPU使用時長(納秒)
cpuacct.usage_percpucgroup中所有任務使用的每個cpu的時間(納秒)

4.3 cpuset子系統:為一組進程分配指定的CPU和內存節點

參數說明
cpuset.cpus允許cgroup中的進程使用的CPU列表。如0-2,16代表 0,1,2,16這4個CPU
cpuset.mems允許cgroup中的進程使用的內存節點列表。如0-2,16代表 0,1,2,16這4個可用節點
cpuset.memory_migrate當cpuset.mems變化時內存頁上的數據是否遷移(默認值0,不遷移;1,遷移)
cpuset.cpu_exclusivecgroup是否獨占cpuset.cpus 中分配的cpu 。(默認值0,共享;1,獨占),如果設置為1,其他cgroup內的cpuset.cpus值不能包含有該cpuset.cpus內的值
cpuset.mem_exclusive是否獨占memory,(默認值0,共享;1,獨占)
cpuset.mem_hardwallcgroup中任務的內存是否隔離,(默認值0,不隔離;1,隔離,每個用戶的任務將擁有獨立的空間)
cpuset.sched_load_balancecgroup的cpu壓力是否會被平均到cpuset中的多個cpu上。(默認值1,啟用負載均衡;0,禁用。)

4.4 memory子系統:限制cgroup所能使用的內存上限

參數說明
memory.limit_in_bytes設定最大的內存使用量,可以加單位(k/K,m/M,g/G)不加單位默認為bytes
memory.soft_limit_in_bytes和 memory.limit_in_bytes 的差異是,這個限制并不會阻止進程使用超過限額的內存,只是在系統內存不足時,會優先回收超過限額的進程占用的內存,使之向限定值靠攏。該值應小于memory.limit_in_bytes設定值
memory.stat統計內存使用情況。各項單位為字節
memory.memsw.limit_in_bytes設定最大的內存+swap的使用量
memory.oom_control當進程出現Out of Memory時,是否進行kill操作。默認值0,kill;設置為1時,進程將進入睡眠狀態,等待內存充足時被喚醒
memory.force_empty當設置為0時,清空該group的所有內存頁;該選項只有在當前group沒有tasks才可以使用

4.5 blkio子系統:限制cgroup對IO的使用

參數說明
blkio.weight設置權值,范圍在[100, 1000],屬于比重分配,不是絕對帶寬。因此只有當不同 Cgroup 爭用同一個 阻塞設備時才起作用
blkio.weight_device對具體設備設置權值。它會覆蓋上面的選項值
blkio.throttle.read_bps_device對具體的設備,設置每秒讀磁盤的帶寬上限
blkio.throttle.write_bps_device對具體的設備,設置每秒寫磁盤的帶寬上限
blkio.throttle.read_iops_device對具體的設備,設置每秒讀磁盤的IOPS帶寬上限
blkio.throttle.write_iops_device對具體的設備,設置每秒寫磁盤的IOPS帶寬上限

4.6 devices子系統:限定cgroup內的進程可以訪問的設備
devices.allow:允許訪問的設備。文件包括4個字段:type(設備類型), major(主設備號), minor(次設備號), and access(訪問方式)

type

  • a — 適用所有設備,包括字符設備和塊設備
  • b — 塊設備
  • c — 字符設備

major, minor

  • 9:*
  • *:*
  • 8:1

access

  • r — 讀
  • w — 寫
  • m — 創建不存在的設備
參數說明
devices.deny禁止訪問的設備,格式同devices.allow
devices.list顯示目前允許被訪問的設備列表

4.7 freezer子系統:暫停或恢復任務
freezer.state:當前cgroup中進程的狀態

FROZEN:掛起進程
FREEZING:進程正在掛起中
THAWED:激活進程

1.掛起進程時,會連同子進程一同掛起。
2.不能將進程移動到處于FROZEN狀態的cgroup中。
3.只有FROZEN和THAWED可以被寫進freezer.state中, FREEZING則不能

總結

以上是生活随笔為你收集整理的linux cgroup、kubernetes limit的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。