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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

容器核心技術(shù)Cgroups和Namespace

阿銘linux ? 來源:阿銘linux ? 2023-03-28 09:47 ? 次閱讀

| 什么是Cgroups

簡單一句話描述Cgroups:Cgroups是Linux內(nèi)核提供的一種可以限制單個進程或者多個進程所使用資源的機制,可以對 cpu,內(nèi)存等資源實現(xiàn)精細(xì)化的控制。
Cgroups全稱是Control Groups,Cgroup為每種可以控制的資源都定義了一個子系統(tǒng)。它的子系統(tǒng)有:

cpu子系統(tǒng):限制進程的cpu使用率;

cpuacct子系統(tǒng):統(tǒng)計Cgroups中進程cpu使用報告;

cpuset子系統(tǒng):為Cgroups中的進程分配單獨的cpu節(jié)點或者內(nèi)存節(jié)點;

memory子系統(tǒng):限制進程的memory使用量;

blkio子系統(tǒng):限制進程的塊設(shè)備io;

devices子系統(tǒng):控制進程能夠訪問某些設(shè)備;

net_cls子系統(tǒng):標(biāo)記cgroups中進程的網(wǎng)絡(luò)數(shù)據(jù)包,然后可以使用tc模塊(traffic control)對數(shù)據(jù)包進行控制;

freezer子系統(tǒng):掛起或者恢復(fù)cgroups中的進程;



其它的具體可以通過這個命令查看:

ls /sys/fs/cgroup/


| 理解Cgroups如何限制資源
在cpu子系統(tǒng)下創(chuàng)建目錄
cd /sys/fs/cgroup/cpu


mkdir container


ls container #下面會自動生成諸多文件,這些文件就是資源限制文件


cgroup.clone_children  

cpuacct.usage         

cpuacct.usage_percpu_sys   

cpuacct.usage_user  

cpu.rt_period_us   

cpu.stat


cgroup.procs           

cpuacct.usage_all     

cpuacct.usage_percpu_user  

cpu.cfs_period_us   

cpu.rt_runtime_us  

notify_on_release


cpuacct.stat           

cpuacct.usage_percpu  

cpuacct.usage_sys          

cpu.cfs_quota_us    

cpu.shares         

tasks
執(zhí)行一個耗費cpu資源的進程
while : ; do : ; done &  #這樣會做一個死循環(huán)進程,會導(dǎo)致cpu達到100%




[1] 39963


查看quota_us和period_us
[root@localhost container]# cat cpu.cfs_quota_us  ##-1表示未做任何限制


-1 


[root@localhost container]# cat cpu.cfs_period_us  ##這里的100000為us,也就是100ms


100000


兩個值組合在一起,就達到了一個限制的作用,修改上面兩個值
echo 30000 > cpu.cfs_quota_us  ##改為30ms,意思是100ms內(nèi),將cpu的限額最多給到30ms,也就是30%


再將上面的死循環(huán)進程id,做一下限制
echo  39963 > tasks


再次用top查看cpu使用率,會發(fā)現(xiàn)最終會使用30%,這就是Cgoups的限制。

| 總結(jié)Cgroups

Linux Cgroups的設(shè)計還是比較易用的,簡單粗暴地理解呢,它就是一個子系統(tǒng)目錄加上一組資源限制文件的組合。

而對于Docker等Linux容器項目來說,它們只需要在每個子系統(tǒng)下面,為每個容器創(chuàng)建一個控制組(即創(chuàng)建一個新目錄),然后在啟動容器進程之后,把這個進程的PID填寫到對應(yīng)控制組的tasks文件中就可以了。

而至于在這些控制組下面的資源文件里填上什么值,就靠用戶啟動容器時的參數(shù)指定了。

| 什么是Namespace

Namespace(命名空間)是一種隔離機制,用于將全局系統(tǒng)資源劃分為多個獨立的邏輯部分,以便不同的進程或應(yīng)用程序之間能夠使用不同的資源名稱或標(biāo)識符,避免沖突和混淆。

Linux的Namespace是一種由內(nèi)核直接提供的全局資源封裝,它是內(nèi)核針對進程設(shè)計的訪問隔離機制。

進程在一個獨立的 Linux Namespace中會認(rèn)為它擁有這臺 Linux 主機上的一切資源,不僅文件系統(tǒng)是獨立的,還有著獨立的 PID 編號(比如擁有自己的 0 號進程,即系統(tǒng)初始化的進程)、UID/GID 編號(比如擁有自己獨立的 root 用戶)、網(wǎng)絡(luò)(比如完全獨立的 IP 地址、網(wǎng)絡(luò)棧、防火墻等設(shè)置),等等。

| Namespace分類

事實上,Linux的Namespace設(shè)計最早只針對文件系統(tǒng),但到了后來,要求系統(tǒng)隔離其他訪問操作的呼聲就愈發(fā)強烈,從 2006 年起,內(nèi)核陸續(xù)添加了UTS、IPC等命名空間隔離,后續(xù)Linux命名空間支持了以下八種資源的隔離(內(nèi)核的官網(wǎng)Kernel.org上仍然只列出了前六種,從 Linux 的 Man 命令能查到全部八種):


命名空間 說明 內(nèi)核版本
Mount 文件系統(tǒng)隔離 2.4.19
UTS 主機的Hostname、Domain names 2.6.19
IPC 隔離進程間通信的渠道 2.6.19
PID 隔離進程編號,無法看到其它命名空間的PID 2.6.24
Network 隔離網(wǎng)絡(luò)資源,如網(wǎng)卡、網(wǎng)絡(luò)棧、IP地址、端口 2.6.29
User 隔離用戶和用戶組 3.8
Cgroup 隔離Cgroup信息,進程有自己的Cgroup的根目錄視圖 4.6
Time 隔離系統(tǒng)時間 5.6




容器技術(shù)的產(chǎn)生就是因為Linux的Namespace的存在,在Linux系統(tǒng)里要想運行多個容器,那么容器與宿主機之間、容器與容器之間必須要做到相互隔離,它們會認(rèn)為自己擁有了整個硬件以及軟件資源??梢哉f如果沒有Namespace技術(shù),就不會有容器技術(shù)。

審核編輯 :李倩

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

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207921
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    490

    瀏覽量

    21986

原文標(biāo)題:容器核心技術(shù)Cgroups和Namespace

文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    一文帶你搞懂Docker容器核心基石Cgroups

    可以限制、記錄任務(wù)組所使用的物理組員(比如 CPU、Memory、IO等),為容器實現(xiàn)虛擬化提供了基本保證,是構(gòu)建 Docker 等一些列虛擬化管理工具的基石。今天我們就來詳細(xì)介紹一下 cgroups 相關(guān)的內(nèi)容。
    發(fā)表于 11-24 09:54 ?541次閱讀

    最新視頻編碼標(biāo)準(zhǔn)H.264及其核心技術(shù)

    最新視頻編碼標(biāo)準(zhǔn)H.264及其核心技術(shù)H.264是ITU-T和ISO聯(lián)合研究制定的編碼效率高、網(wǎng)絡(luò)適應(yīng)性強的最新數(shù)字視頻編碼國際標(biāo)準(zhǔn).H.264是面向視頻電話、視頻會議等實際應(yīng)用的標(biāo)準(zhǔn),它能以低
    發(fā)表于 06-25 11:42

    佳靈變頻器故障與維修核心技術(shù)

    佳靈變頻器故障與維修核心技術(shù)
    發(fā)表于 08-05 20:55

    藍牙核心技術(shù)概述

    藍牙核心技術(shù)概述(一):藍牙概述藍牙核心技術(shù)概述(二):藍牙使用場景藍牙核心技術(shù)概述(三): 藍牙協(xié)議規(guī)范(射頻、基帶鏈路控制、鏈路管理)藍牙核心技術(shù)概述(四):藍牙協(xié)議規(guī)范(HCI、
    發(fā)表于 11-24 16:06

    【原創(chuàng)】Android視頻直播核心技術(shù)

    【原創(chuàng)】Android視頻直播核心技術(shù)回復(fù)即可獲取下載鏈接[hide=d15]鏈接:http://pan.baidu.com/s/1cC6wbW 密碼:smj8 學(xué)習(xí)群:150923287 [/hide]
    發(fā)表于 07-26 17:43

    31歲無核心技術(shù),迷茫

    再有3個月31整,再有9月就到2019了?;厥装l(fā)現(xiàn),無核心技術(shù),身價也越來越編制,職位上升無望,改怎么辦?同齡的你,有什么高見!??!期待您的回復(fù)。
    發(fā)表于 03-27 11:39

    云計算的五大核心技術(shù)

    云計算的核心技術(shù)有哪些?大數(shù)據(jù)云計算學(xué)習(xí)路線
    發(fā)表于 06-28 09:41

    五大核心技術(shù)如何實現(xiàn)物聯(lián)網(wǎng)

    以下是實現(xiàn)物聯(lián)網(wǎng)的五大核心技術(shù)核心技術(shù)之感知層:傳感器技術(shù)、射頻識別技術(shù)、二維碼技術(shù)、微機電系統(tǒng)1.傳感器
    發(fā)表于 07-25 06:38

    Small Cell是什么?Small Cell的核心技術(shù)包括哪些?

    Small Cell是什么?Small Cell的核心技術(shù)包括哪些?
    發(fā)表于 05-24 06:11

    無線遠(yuǎn)程監(jiān)控系統(tǒng)主要包括哪些核心技術(shù)?

    無線遠(yuǎn)程監(jiān)控系統(tǒng)主要包括哪些核心技術(shù)?
    發(fā)表于 05-25 06:45

    H.264與AVS視頻標(biāo)準(zhǔn)核心技術(shù)有什么不同?

    H.264與AVS視頻標(biāo)準(zhǔn)核心技術(shù)有什么不同?
    發(fā)表于 06-03 06:57

    視頻標(biāo)準(zhǔn)核心技術(shù)對比分析哪個好

    視頻標(biāo)準(zhǔn)核心技術(shù)對比分析哪個好
    發(fā)表于 06-07 06:12

    單片機應(yīng)用的核心技術(shù)是什么?

    單片機應(yīng)用的核心技術(shù)是什么?單片機神奇的工作原理是什么?匯編語言很難學(xué)怎么辦?
    發(fā)表于 11-02 06:17

    Arm Cortex-A65核心技術(shù)參考手冊

    Arm Cortex-A65核心技術(shù)參考手冊
    發(fā)表于 08-02 07:38

    Linux namespacecgroups簡介

    先放結(jié)論,namespace 是用來做資源隔離, cgroup 是用來做資源限制。
    的頭像 發(fā)表于 03-16 09:03 ?1650次閱讀