Docker容器資源控制CGroup的使用
一、CGroups的含義
CGroups是Linux內(nèi)核提供的一 種可以限制單個(gè)進(jìn)程或者多個(gè)進(jìn)程所使用資源的機(jī)制,可以對 CPU、內(nèi)存和磁盤I/O等資源實(shí)現(xiàn)檢制。Docker可使用CGroups提倡的資源限制功能來完成CPU、內(nèi)存等部分的資源控制。
CGroups提供了對進(jìn)程進(jìn)行分組化管理的功能和接口的基礎(chǔ)結(jié)構(gòu),內(nèi)存或磁盤I/O的分配控制等具體的資源管理功能是通過對進(jìn)程進(jìn)行分組化管理來實(shí)現(xiàn)的。這些具體的資源管理功能稱為CGroups子系統(tǒng)或控制器,主要通過以下九大子系統(tǒng)實(shí)現(xiàn)。
(1)blkio:為每個(gè)塊設(shè)備設(shè)置I/O限制,如磁盤、光盤和USB等設(shè)備。
(2) cpu:使用調(diào)度程序提供對CPU的CGroup任務(wù)訪問。
(3) cpuacct:自動(dòng)生成CGroup任務(wù)的CPU資源使用報(bào)告。
(4)cpuset:為CGroup中的任務(wù)分配獨(dú)立CPU (在多核系統(tǒng)中)和內(nèi)存節(jié)點(diǎn)。
(5) devices:允許或拒絕CGroup任務(wù)訪問設(shè)備。
(6) freezer: 暫停和恢復(fù)CGroup任務(wù)。
(7)memory:設(shè)置每個(gè)CGroup任務(wù)使用的內(nèi)存限制,并自動(dòng)生成內(nèi)存資源使用報(bào)告。
(8)net_ clsI: 標(biāo)記每個(gè)網(wǎng)絡(luò)包以供CGroup任務(wù)使用。
(9)ns:命名空間子系統(tǒng)。(namesparce)
二、CGroup的功能和特點(diǎn)
1、CGroups的主要功能
(1) CGroups可實(shí)現(xiàn)對進(jìn)程組使用的資源總額的限制。例如,使用memory子系統(tǒng)為進(jìn)程組設(shè)定一個(gè)內(nèi)存使用上限, 當(dāng)進(jìn)程組使用的內(nèi)存達(dá)到限額后再申請內(nèi)存時(shí),會(huì)觸發(fā)OOM(OutOfMemory)警告。
(2)CGroups可實(shí)現(xiàn)對進(jìn)程組的優(yōu)先級(jí)控制。通過分配CPU時(shí)間片數(shù)量及硬盤I/O、帶寬大小可控制進(jìn)程的優(yōu)先級(jí)。例如,使用CPU子系統(tǒng)為某個(gè)進(jìn)程組分配特定cpu share。
(3) CGroups 可實(shí)現(xiàn)對進(jìn)程組使用的資源數(shù)量的記錄。例如,使用cpuacct子系統(tǒng)可記錄某個(gè)進(jìn)程組使用的CPU時(shí)間。
(4) CGroups 可實(shí)現(xiàn)對進(jìn)程組的隔離和控制。例如,使用ns子系統(tǒng)對不同的進(jìn)程組使用不同的namespace,以達(dá)到隔離的目的,使用不同的進(jìn)程組實(shí)現(xiàn)各自的進(jìn)程、網(wǎng)絡(luò)、文件系統(tǒng)掛載空間,也可使用feezer子系統(tǒng)將進(jìn)程組暫停和恢復(fù)。
2、CGroups的特點(diǎn)
(1)控制族群:控制族群是組按照某種標(biāo)準(zhǔn)劃分的進(jìn)程。CGroups中的資源控制都是以控制族群為單位實(shí)現(xiàn)的。一個(gè)進(jìn)程可以加入某個(gè)控制族群中,也可以從一個(gè)進(jìn)程組遷移到另一個(gè)控制族群。一個(gè)進(jìn)程組的進(jìn)程可以使用CGroups以控制族群為單位分配資源,并受到CGroups以控制族群為單位設(shè)定的限制。
(2)層級(jí):控制族群可以組織為hierarchical 的形式,即一棵控制族群樹。子控制組自動(dòng)繼承父節(jié)點(diǎn)的特定屬性,子控制組還可以有自己特定的屬性。
(3)子系統(tǒng):一個(gè)子系統(tǒng)就是一個(gè)資源控制器, 如memory 子系統(tǒng)是一個(gè)內(nèi)存控制器。子系統(tǒng)必須附加到一個(gè)層級(jí)上才能起作用。個(gè)子 系統(tǒng)附加到某個(gè)層級(jí)以后, 這個(gè)層級(jí)上的所有控制族群都受到這個(gè)子系統(tǒng)的控制。
三、實(shí)訓(xùn)
1、利用CGroups實(shí)現(xiàn)CPU資源控制
(1)利用busybox鏡像生成容器,設(shè)置容器調(diào)度的周期為5000,將容器在每個(gè)周期內(nèi)的CPU配額設(shè)置為25000
[root@controller ~]# docker run -dit --name t1 --cpu-period 50000 --cpu-quota 25000 busybox:latest da8f5d80873d6dc349e7aae44ef51571b7c530070b8600468aceaec9c20936ac
(2)利用busybox鏡像生成容器。將容器綁定到CPU上執(zhí)行,設(shè)置容器調(diào)度的周期和周期內(nèi)的CPU配額為50000
[root@controller ~]# docker run -dit --name t2 --cpuset-cpus 0 --cpu-period 50000 --cpu-quota 50000 busybox 8bc68f70004e051b344948717d82acba9e9c1a0f5a15f911fa60394618436e12
(3)利用busybox鏡像生成兩個(gè)容器,設(shè)置第二個(gè)容器的CPU使用率是第一個(gè)容器的兩倍
[root@controller ~]# docker run -dit --name t3 --cpu-quota 1000 busybox 4908f5f5846fc5f269e5a5c7ebf82a4bf53a6f4dacf47753bbbfb2579fccbf88 [root@controller ~]# docker run -dit --name t4 --cpu-quota 2000 busybox 71f56247679674f65c888562f3ea8f90f783a20e25a2a0f803bdb1ebef928aa4
2、利用CGroups實(shí)現(xiàn)內(nèi)存資源控制
(1)利用busybox鏡像生成容器,設(shè)置容器使用的最大內(nèi)存為256MB
[root@controller ~]# docker run -dit --name t5 --memory 256MB busybox 3349f1259d61026be4353a6d9460a5e4f43bd960451547d1c4dd383df292fadc
3、利用CGroups實(shí)現(xiàn)磁盤I/O控制
(1)利用busybox鏡像生成容器,設(shè)置第二個(gè)容器讀這些磁盤的帶寬是第一個(gè)容器兩倍
[root@controller ~]# docker run -dit --name t6 --device-read-bps /dev/sda1:1mb --device-write-bps /dev/sda1:1mb busybox b55bce694ef2a24f029ac9c13afe28510085db2751162d876de1b97e210c1066 [root@controller ~]# docker run -dit --name t7 --device-read-bps /dev/sda1:2mb --device-write-bps /dev/sda1:2mb busybo 79d2920ce67a8c9956d499cff05fc09bee19ab412e419817ea7f220cd6cfc45c
(2)利用busybox鏡像生成容器,設(shè)置容器讀寫速度為30MB/s
[root@controller ~]# docker run -dit --name t8 --device-write-bps /dev/sd2:30mb busybox 70ce52a12add7635fcf082311f5cd719ade0036c0a716ced275a83c4802ea4a2
到此這篇關(guān)于Docker容器資源控制CGroup的使用的文章就介紹到這了,更多相關(guān)Docker容器資源控制CGroup內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker官方鏡像下載及使用Dockerfile創(chuàng)建鏡像的方法
這篇文章主要介紹了docker官方鏡像下載及使用Dockerfile創(chuàng)建鏡像的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02
Docker Compose 網(wǎng)絡(luò)設(shè)置詳解
這篇文章主要介紹了Docker Compose 網(wǎng)絡(luò)設(shè)置詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
在Ubuntu 16.04上用Docker Swarm和DigitalOcean創(chuàng)建一個(gè)Docker容器集群的方法
這篇文章主要介紹了在Ubuntu 16.04上用Docker Swarm和DigitalOcean創(chuàng)建一個(gè)Docker容器集群的方法,需要的的朋友參考下吧2017-01-01
pod污點(diǎn)taint?與容忍度tolerations詳解
這篇文章主要為大家介紹了pod污點(diǎn)taint與容忍度tolerations示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
docker環(huán)境下安裝jenkins容器的詳細(xì)教程
這篇文章主要介紹了docker環(huán)境下安裝jenkins容器的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05

