欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Docker 容器使用 cgroups 限制資源使用

 更新時(shí)間:2017年01月19日 09:16:01   作者:SammyLiu  
本篇文章主要介紹了Docker 容器使用 cgroups 限制資源使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

上一篇文章將到 Docker 容器使用 linux namespace 來(lái)隔離其運(yùn)行環(huán)境,使得容器中的進(jìn)程看起來(lái)就像愛(ài)一個(gè)獨(dú)立環(huán)境中運(yùn)行一樣。但是,光有運(yùn)行環(huán)境隔離還不夠,因?yàn)檫@些進(jìn)程還是可以不受限制地使用系統(tǒng)資源,比如網(wǎng)絡(luò)、磁盤(pán)、CPU以及內(nèi)存 等。為了讓容器中的進(jìn)程更加可控,Docker 使用 Linux cgroups 來(lái)限制容器中的進(jìn)程允許使用的系統(tǒng)資源。

1. 基礎(chǔ)知識(shí):Linux control groups

1.1 概念

  Linux Cgroup 可​​​讓​​​您​​​為​​​系​​​統(tǒng)​​​中​​​所​​​運(yùn)​​​行​​​任​​​務(wù)​​​(進(jìn)​​​程​​​)的​​​用​​​戶​​​定​​​義​​​組​​​群​​​分​​​配​​​資​​​源​​​ — 比​​​如​​​ CPU 時(shí)​​​間​​​、​​​系​​​統(tǒng)​​​內(nèi)​​​存​​​、​​​網(wǎng)​​​絡(luò)​​​帶​​​寬​​​或​​​者​​​這​​​些​​​資​​​源​​​的​​​組​​​合​​​。​​​您​​​可​​​以​​​監(jiān)​​​控​​​您​​​配​​​置​​​的​​​ cgroup,拒​​​絕​​​ cgroup 訪​​​問(wèn)​​​某​​​些​​​資​​​源​​​,甚​​​至​​​在​​​運(yùn)​​​行​​​的​​​系​​​統(tǒng)​​​中​​​動(dòng)​​​態(tài)​​​配​​​置​​​您​​​的​​​ cgroup。所以,可以將 controll groups 理解為 controller (system resource) (for) (process)groups,也就是是說(shuō)它以一組進(jìn)程為目標(biāo)進(jìn)行系統(tǒng)資源分配和控制。

它主要提供了如下功能:

  • Resource limitation: 限制資源使用,比如內(nèi)存使用上限以及文件系統(tǒng)的緩存限制。
  • Prioritization: 優(yōu)先級(jí)控制,比如:CPU利用和磁盤(pán)IO吞吐。
  • Accounting: 一些審計(jì)或一些統(tǒng)計(jì),主要目的是為了計(jì)費(fèi)。
  • Control: 掛起進(jìn)程,恢復(fù)執(zhí)行進(jìn)程。

使​​​用​​​ cgroup,系​​​統(tǒng)​​​管​​​理​​​員​​​可​​​更​​​具​​​體​​​地​​​控​​​制​​​對(duì)​​​系​​​統(tǒng)​​​資​​​源​​​的​​​分​​​配​​​、​​​優(yōu)​​​先​​​順​​​序​​​、​​​拒​​​絕​​​、​​​管​​​理​​​和​​​監(jiān)​​​控​​​。​​​可​​​更​​​好​​​地​​​根​​​據(jù)​​​任​​​務(wù)​​​和​​​用​​​戶​​​分​​​配​​​硬​​​件​​​資​​​源​​​,提​​​高​​​總​​​體​​​效​​​率​​​。

在實(shí)踐中,系統(tǒng)管理員一般會(huì)利用CGroup做下面這些事(有點(diǎn)像為某個(gè)虛擬機(jī)分配資源似的):

  • 隔離一個(gè)進(jìn)程集合(比如:nginx的所有進(jìn)程),并限制他們所消費(fèi)的資源,比如綁定CPU的核。
  • 為這組進(jìn)程分配其足夠使用的內(nèi)存
  • 為這組進(jìn)程分配相應(yīng)的網(wǎng)絡(luò)帶寬和磁盤(pán)存儲(chǔ)限制
  • 限制訪問(wèn)某些設(shè)備(通過(guò)設(shè)置設(shè)備的白名單)

Linux 系統(tǒng)中,一切皆文件。Linux 也將 cgroups 實(shí)現(xiàn)成了文件系統(tǒng),方便用戶使用。在我的 Ubuntu 14.04 測(cè)試環(huán)境中:

root@devstack:/home/sammy# mount -t cgroup
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,relatime,cpuset)
cgroup on /sys/fs/cgroup/cpu type cgroup (rw,relatime,cpu)
systemd on /sys/fs/cgroup/systemd type cgroup (rw,noexec,nosuid,nodev,none,name=systemd)

root@devstack:/home/sammy# lssubsys -m
cpuset /sys/fs/cgroup/cpuset
cpu /sys/fs/cgroup/cpu
cpuacct /sys/fs/cgroup/cpuacct
memory /sys/fs/cgroup/memory
devices /sys/fs/cgroup/devices
freezer /sys/fs/cgroup/freezer
blkio /sys/fs/cgroup/blkio
perf_event /sys/fs/cgroup/perf_event
hugetlb /sys/fs/cgroup/hugetlb

root@devstack:/home/sammy# ls /sys/fs/cgroup/ -l
total 0
drwxr-xr-x 3 root root 0 Sep 18 21:46 blkio
drwxr-xr-x 3 root root 0 Sep 18 21:46 cpu
drwxr-xr-x 3 root root 0 Sep 18 21:46 cpuacct
drwxr-xr-x 3 root root 0 Sep 18 21:46 cpuset
drwxr-xr-x 3 root root 0 Sep 18 21:46 devices
drwxr-xr-x 3 root root 0 Sep 18 21:46 freezer
drwxr-xr-x 3 root root 0 Sep 18 21:46 hugetlb
drwxr-xr-x 3 root root 0 Sep 18 21:46 memory
drwxr-xr-x 3 root root 0 Sep 18 21:46 perf_event
drwxr-xr-x 3 root root 0 Sep 18 21:46 systemd

我們看到 /sys/fs/cgroup 目錄中有若干個(gè)子目錄,我們可以認(rèn)為這些都是受 cgroups 控制的資源以及這些資源的信息。

  • blkio — 這​​​個(gè)​​​子​​​系​​​統(tǒng)​​​為​​​塊​​​設(shè)​​​備​​​設(shè)​​​定​​​輸​​​入​​​/輸​​​出​​​限​​​制​​​,比​​​如​​​物​​​理​​​設(shè)​​​備​​​(磁​​​盤(pán)​​​,固​​​態(tài)​​​硬​​​盤(pán)​​​,USB 等​​​等​​​)。
  • cpu — 這​​​個(gè)​​​子​​​系​​​統(tǒng)​​​使​​​用​​​調(diào)​​​度​​​程​​​序​​​提​​​供​​​對(duì)​​​ CPU 的​​​ cgroup 任​​​務(wù)​​​訪​​​問(wèn)​​​。​​​
  • cpuacct — 這​​​個(gè)​​​子​​​系​​​統(tǒng)​​​自​​​動(dòng)​​​生​​​成​​​ cgroup 中​​​任​​​務(wù)​​​所​​​使​​​用​​​的​​​ CPU 報(bào)​​​告​​​。​​​
  • cpuset — 這​​​個(gè)​​​子​​​系​​​統(tǒng)​​​為​​​ cgroup 中​​​的​​​任​​​務(wù)​​​分​​​配​​​獨(dú)​​​立​​​ CPU(在​​​多​​​核​​​系​​​統(tǒng)​​​)和​​​內(nèi)​​​存​​​節(jié)​​​點(diǎn)​​​。​​​
  • devices — 這​​​個(gè)​​​子​​​系​​​統(tǒng)​​​可​​​允​​​許​​​或​​​者​​​拒​​​絕​​​ cgroup 中​​​的​​​任​​​務(wù)​​​訪​​​問(wèn)​​​設(shè)​​​備​​​。​​​
  • freezer — 這​​​個(gè)​​​子​​​系​​​統(tǒng)​​​掛​​​起​​​或​​​者​​​恢​​​復(fù)​​​ cgroup 中​​​的​​​任​​​務(wù)​​​。​​​
  • memory — 這​​​個(gè)​​​子​​​系​​​統(tǒng)​​​設(shè)​​​定​​​ cgroup 中​​​任​​​務(wù)​​​使​​​用​​​的​​​內(nèi)​​​存​​​限​​​制​​​,并​​​自​​​動(dòng)​​​生​​​成​​​​​內(nèi)​​​存​​​資​​​源使用​​​報(bào)​​​告​​​。​​​
  • net_cls — 這​​​個(gè)​​​子​​​系​​​統(tǒng)​​​使​​​用​​​等​​​級(jí)​​​識(shí)​​​別​​​符​​​(classid)標(biāo)​​​記​​​網(wǎng)​​​絡(luò)​​​數(shù)​​​據(jù)​​​包​​​,可​​​允​​​許​​​ Linux 流​​​量​​​控​​​制​​​程​​​序​​​(tc)識(shí)​​​別​​​從​​​具​​​體​​​ cgroup 中​​​生​​​成​​​的​​​數(shù)​​​據(jù)​​​包​​​。​​​
  • net_prio — 這個(gè)子系統(tǒng)用來(lái)設(shè)計(jì)網(wǎng)絡(luò)流量的優(yōu)先級(jí)
  • hugetlb — 這個(gè)子系統(tǒng)主要針對(duì)于HugeTLB系統(tǒng)進(jìn)行限制,這是一個(gè)大頁(yè)文件系統(tǒng)。

默認(rèn)的話,在 Ubuntu 系統(tǒng)中,你可能看不到 net_cls 和 net_prio 目錄,它們需要你手工做 mount:

root@devstack:/sys/fs/cgroup# modprobe cls_cgroup
root@devstack:/sys/fs/cgroup# mkdir net_cls
root@devstack:/sys/fs/cgroup# mount -t cgroup -o net_cls none net_cls

root@devstack:/sys/fs/cgroup# modprobe netprio_cgroup
root@devstack:/sys/fs/cgroup# mkdir net_prio
root@devstack:/sys/fs/cgroup# mount -t cgroup -o net_prio none net_prio

root@devstack:/sys/fs/cgroup# ls net_prio/cgroup.clone_children cgroup.procs     net_prio.ifpriomap notify_on_release tasks
cgroup.event_control  cgroup.sane_behavior net_prio.prioidx  release_agent
root@devstack:/sys/fs/cgroup# ls net_cls/
cgroup.clone_children cgroup.event_control cgroup.procs cgroup.sane_behavior net_cls.classid notify_on_release release_agent tasks



1.2 實(shí)驗(yàn)

1.2.1 通過(guò) cgroups 限制進(jìn)程的 CPU

寫(xiě)一段最簡(jiǎn)單的 C 程序:

int main(void)
{
  int i = 0;
  for(;;) i++;
  return 0;
}

編譯,運(yùn)行,發(fā)現(xiàn)它占用的 CPU 幾乎到了 100%:

top - 22:43:02 up  1:14,  3 users,  load average: 0.24, 0.06, 0.06  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 2304 root      20   0    4188    356    276 R 99.6  0.0   0:11.77 hello

接下來(lái)我們做如下操作:

root@devstack:/home/sammy/c# mkdir /sys/fs/cgroup/cpu/hello
root@devstack:/home/sammy/c# cd /sys/fs/cgroup/cpu/hello
root@devstack:/sys/fs/cgroup/cpu/hello# ls
cgroup.clone_children cgroup.procs    cpu.cfs_quota_us cpu.stat      tasks
cgroup.event_control  cpu.cfs_period_us cpu.shares    notify_on_release
root@devstack:/sys/fs/cgroup/cpu/hello# cat cpu.cfs_quota_us
-1
root@devstack:/sys/fs/cgroup/cpu/hello# echo 20000 > cpu.cfs_quota_us
root@devstack:/sys/fs/cgroup/cpu/hello# cat cpu.cfs_quota_us
20000
root@devstack:/sys/fs/cgroup/cpu/hello# echo 2428 > tasks

然后再來(lái)看看這個(gè)進(jìn)程的 CPU 占用情況:

 PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 2428 root      20   0    4188    356    276 R 19.9  0.0   0:46.03 hello

它占用的 CPU 幾乎就是 20%,也就是我們預(yù)設(shè)的閾值。這說(shuō)明我們通過(guò)上面的步驟,成功地將這個(gè)進(jìn)程運(yùn)行所占用的 CPU 資源限制在某個(gè)閾值之內(nèi)了。

如果此時(shí)再啟動(dòng)另一個(gè) hello 進(jìn)程并將其 id 加入 tasks 文件,則兩個(gè)進(jìn)程會(huì)共享設(shè)定的 CPU 限制:

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 2428 root      20   0    4188    356    276 R 10.0  0.0 285:39.54 hello
12526 root      20   0    4188    356    276 R 10.0  0.0   0:25.09 hello

1.2.2 通過(guò) cgroups 限制進(jìn)程的 Memory

同樣地,我們針對(duì)它占用的內(nèi)存做如下操作:

root@devstack:/sys/fs/cgroup/memory# mkdir hello
root@devstack:/sys/fs/cgroup/memory# cd hello/
root@devstack:/sys/fs/cgroup/memory/hello# cat memory.limit_in_bytes
18446744073709551615
root@devstack:/sys/fs/cgroup/memory/hello# echo 64k > memory.limit_in_bytes
root@devstack:/sys/fs/cgroup/memory/hello# echo 2428 > tasks
root@devstack:/sys/fs/cgroup/memory/hello#

上面的步驟會(huì)把進(jìn)程 2428 說(shuō)占用的內(nèi)存閾值設(shè)置為 64K。超過(guò)的話,它會(huì)被殺掉。

1.2.3 限制進(jìn)程的 I/O

運(yùn)行命令:

sudo dd if=/dev/sda1 of=/dev/null

通過(guò) iotop 命令看 IO (此時(shí)磁盤(pán)在快速轉(zhuǎn)動(dòng)),此時(shí)其寫(xiě)速度為 242M/s:

 TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
 2555 be/4 root      242.60 M/s    0.00 B/s  0.00 % 61.66 % dd if=/dev/sda1 of=/dev/null

接著做下面的操作:

root@devstack:/home/sammy# mkdir /sys/fs/cgroup/blkio/io
root@devstack:/home/sammy# cd /sys/fs/cgroup/blkio/io
root@devstack:/sys/fs/cgroup/blkio/io# ls -l /dev/sda1
brw-rw---- 1 root disk 8, 1 Sep 18 21:46 /dev/sda1
root@devstack:/sys/fs/cgroup/blkio/io# echo '8:0 1048576' > /sys/fs/cgroup/blkio/io/blkio.throttle.read_bps_device
root@devstack:/sys/fs/cgroup/blkio/io# echo 2725 > /sys/fs/cgroup/blkio/io/tasks

結(jié)果,這個(gè)進(jìn)程的IO 速度就被限制在 1Mb/s 之內(nèi)了:

 TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
 2555 be/4 root      990.44 K/s    0.00 B/s  0.00 % 96.29 % dd if=/dev/sda1 of=/dev/null

1.3 術(shù)語(yǔ)

cgroups 的術(shù)語(yǔ)包括:

  • 任務(wù)(Tasks):就是系統(tǒng)的一個(gè)進(jìn)程。
  • 控制組(Control Group):一組按照某種標(biāo)準(zhǔn)劃分的進(jìn)程,比如官方文檔中的Professor和Student,或是WWW和System之類(lèi)的,其表示了某進(jìn)程組。Cgroups中的資源控制都是以控制組為單位實(shí)現(xiàn)。一個(gè)進(jìn)程可以加入到某個(gè)控制組。而資源的限制是定義在這個(gè)組上,就像上面示例中我用的 hello 一樣。簡(jiǎn)單點(diǎn)說(shuō),cgroup的呈現(xiàn)就是一個(gè)目錄帶一系列的可配置文件。
  • 層級(jí)(Hierarchy):控制組可以組織成hierarchical的形式,既一顆控制組的樹(shù)(目錄結(jié)構(gòu))??刂平M樹(shù)上的子節(jié)點(diǎn)繼承父結(jié)點(diǎn)的屬性。簡(jiǎn)單點(diǎn)說(shuō),hierarchy就是在一個(gè)或多個(gè)子系統(tǒng)上的cgroups目錄樹(shù)。
  • 子系統(tǒng)(Subsystem):一個(gè)子系統(tǒng)就是一個(gè)資源控制器,比如CPU子系統(tǒng)就是控制CPU時(shí)間分配的一個(gè)控制器。子系統(tǒng)必須附加到一個(gè)層級(jí)上才能起作用,一個(gè)子系統(tǒng)附加到某個(gè)層級(jí)以后,這個(gè)層級(jí)上的所有控制族群都受到這個(gè)子系統(tǒng)的控制。Cgroup的子系統(tǒng)可以有很多,也在不斷增加中。

2. Docker 對(duì) cgroups 的使用

2.1 默認(rèn)情況

默認(rèn)情況下,Docker 啟動(dòng)一個(gè)容器后,會(huì)在 /sys/fs/cgroup 目錄下的各個(gè)資源目錄下生成以容器 ID 為名字的目錄(group),比如:

/sys/fs/cgroup/cpu/docker/03dd196f415276375f754d51ce29b418b170bd92d88c5e420d6901c32f93dc14

此時(shí) cpu.cfs_quota_us 的內(nèi)容為 -1,表示默認(rèn)情況下并沒(méi)有限制容器的 CPU 使用。在容器被 stopped 后,該目錄被刪除。

運(yùn)行命令 docker run -d --name web41 --cpu-quota 25000 --cpu-period 100 --cpu-shares 30 training/webapp python app.py 啟動(dòng)一個(gè)新的容器,結(jié)果:

root@devstack:/sys/fs/cgroup/cpu/docker/06bd180cd340f8288c18e8f0e01ade66d066058dd053ef46161eb682ab69ec24# cat cpu.cfs_quota_us
25000
root@devstack:/sys/fs/cgroup/cpu/docker/06bd180cd340f8288c18e8f0e01ade66d066058dd053ef46161eb682ab69ec24# cat tasks
3704
root@devstack:/sys/fs/cgroup/cpu/docker/06bd180cd340f8288c18e8f0e01ade66d066058dd053ef46161eb682ab69ec24# cat cpu.cfs_period_us
2000

Docker 會(huì)將容器中的進(jìn)程的 ID 加入到各個(gè)資源對(duì)應(yīng)的 tasks 文件中。表示 Docker 也是以上面的機(jī)制來(lái)使用 cgroups 對(duì)容器的 CPU 使用進(jìn)行限制。

相似地,可以通過(guò) docker run 中 mem 相關(guān)的參數(shù)對(duì)容器的內(nèi)存使用進(jìn)行限制:

   --cpuset-mems string     MEMs in which to allow execution (0-3, 0,1)
   --kernel-memory string    Kernel memory limit
 -m, --memory string        Memory limit
   --memory-reservation string  Memory soft limit
   --memory-swap string     Swap limit equal to memory plus swap: '-1' to enable unlimited swap
   --memory-swappiness int    Tune container memory swappiness (0 to 100) (default -1)

比如  docker run -d --name web42 --blkio-weight 100 --memory 10M --cpu-quota 25000 --cpu-period 2000 --cpu-shares 30 training/webapp python app.py:

root@devstack:/sys/fs/cgroup/memory/docker/ec8d850ebbabaf24df572cb5acd89a6e7a953fe5aa5d3c6a69c4532f92b57410# cat memory.limit_in_bytes
10485760

 root@devstack:/sys/fs/cgroup/blkio/docker/ec8d850ebbabaf24df572cb5acd89a6e7a953fe5aa5d3c6a69c4532f92b57410# cat blkio.weight
 100

目前 docker 已經(jīng)幾乎支持了所有的 cgroups 資源,可以限制容器對(duì)包括 network,device,cpu 和 memory 在內(nèi)的資源的使用,比如:

root@devstack:/sys/fs/cgroup# find -iname ec8d850ebbabaf24df572cb5acd89a6e7a953fe5aa5d3c6a69c4532f92b57410
./net_prio/docker/ec8d850ebbabaf24df572cb5acd89a6e7a953fe5aa5d3c6a69c4532f92b57410
./net_cls/docker/ec8d850ebbabaf24df572cb5acd89a6e7a953fe5aa5d3c6a69c4532f92b57410
./systemd/docker/ec8d850ebbabaf24df572cb5acd89a6e7a953fe5aa5d3c6a69c4532f92b57410
./hugetlb/docker/ec8d850ebbabaf24df572cb5acd89a6e7a953fe5aa5d3c6a69c4532f92b57410
./perf_event/docker/ec8d850ebbabaf24df572cb5acd89a6e7a953fe5aa5d3c6a69c4532f92b57410
./blkio/docker/ec8d850ebbabaf24df572cb5acd89a6e7a953fe5aa5d3c6a69c4532f92b57410
./freezer/docker/ec8d850ebbabaf24df572cb5acd89a6e7a953fe5aa5d3c6a69c4532f92b57410
./devices/docker/ec8d850ebbabaf24df572cb5acd89a6e7a953fe5aa5d3c6a69c4532f92b57410
./memory/docker/ec8d850ebbabaf24df572cb5acd89a6e7a953fe5aa5d3c6a69c4532f92b57410
./cpuacct/docker/ec8d850ebbabaf24df572cb5acd89a6e7a953fe5aa5d3c6a69c4532f92b57410
./cpu/docker/ec8d850ebbabaf24df572cb5acd89a6e7a953fe5aa5d3c6a69c4532f92b57410
./cpuset/docker/ec8d850ebbabaf24df572cb5acd89a6e7a953fe5aa5d3c6a69c4532f92b57410

 2.2 net_cls

   net_cls 和 tc 一起使用可用于限制進(jìn)程發(fā)出的網(wǎng)絡(luò)包所使用的網(wǎng)絡(luò)帶寬。當(dāng)使用 cgroups network controll net_cls 后,指定進(jìn)程發(fā)出的所有網(wǎng)絡(luò)包都會(huì)被加一個(gè) tag,然后就可以使用其他工具比如 iptables 或者 traffic controller (TC)來(lái)根據(jù)網(wǎng)絡(luò)包上的 tag 進(jìn)行流量控制。關(guān)于 TC 的文檔,網(wǎng)上很多,這里不再贅述,只是用一個(gè)簡(jiǎn)單的例子來(lái)加以說(shuō)明。

  關(guān)于 classid,它的格式是 0xAAAABBBB,其中,AAAA 是十六進(jìn)制的主ID(major number),BBBB 是十六進(jìn)制的次ID(minor number)。因此,0X10001 表示 10:1,而 0x00010001 表示 1:!。

  (1)首先在host 的網(wǎng)卡 eth0 上做如下設(shè)置:

tc qdisc del dev eth0 root   #刪除已有的規(guī)則
tc qdisc add dev eth0 root handle 10: htb default 12       
tc class add dev eth0 parent 10: classid 10:1 htb rate 1500kbit ceil 1500kbit burst 10k     #限速
tc filter add dev eth0 protocol ip parent 10:0 prio 1 u32 match ip protocol 1 0xff flowid 10:1 #只處理 ping 參數(shù)的網(wǎng)絡(luò)包

其結(jié)果是:

  • 在網(wǎng)卡 eth0 上創(chuàng)建了一個(gè) HTB root 隊(duì)列,hangle 10: 表示隊(duì)列句柄也就是major number 為 10
  • 創(chuàng)建一個(gè)分類(lèi) 10:1,限制它的出發(fā)網(wǎng)絡(luò)帶寬為 80 kbit (千比特每秒)
  • 創(chuàng)建一個(gè)分類(lèi)器,將 eth0 上 IP IMCP 協(xié)議 的 major ID 為 10 的 prio 為 1 的網(wǎng)絡(luò)流量都分類(lèi)到 10:1 類(lèi)別

(2)啟動(dòng)容器

容器啟動(dòng)后,其 init 進(jìn)程在host 上的 PID 就被加入到 tasks 文件中了:

root@devstack:/sys/fs/cgroup/net_cls/docker/ff8d9715b7e11a5a69446ff1e3fde3770078e32a7d8f7c1cb35d51c75768fe33# ps -ef | grep 10047
231072  10047 10013 1 07:08 ?    00:00:00 python app.py

設(shè)置 net_cls classid:

echo 0x100001 > net_cls.classid

再在容器啟動(dòng)一個(gè) ping 進(jìn)程,其 ID 也被加入到 tasks 文件中了。

(3)查看tc 情況: tc -s -d class show dev eth0

Every 2.0s: tc -s class ls dev eth0 Wed Sep 21 04:07:56 2016

class htb 10:1 root prio 0 rate 1500Kbit ceil 1500Kbit burst 10Kb cburst 1599b
 Sent 17836 bytes 182 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
 lended: 182 borrowed: 0 giants: 0
 tokens: 845161 ctokens: 125161

我們可以看到 tc 已經(jīng)在處理 ping 進(jìn)程產(chǎn)生的數(shù)據(jù)包了。再來(lái)看一下 net_cls 和 ts 合作的限速效果:

10488 bytes from 192.168.1.1: icmp_seq=35 ttl=63 time=12.7 ms
10488 bytes from 192.168.1.1: icmp_seq=36 ttl=63 time=15.2 ms
10488 bytes from 192.168.1.1: icmp_seq=37 ttl=63 time=4805 ms
10488 bytes from 192.168.1.1: icmp_seq=38 ttl=63 time=9543 ms

其中:

后兩條說(shuō)使用的 tc class 規(guī)則是 tc class add dev eth0 parent 10: classid 10:1 htb rate 1500kbit ceil 15kbit burst 10k

前兩條所使用的 tc class 規(guī)則是 tc class add dev eth0 parent 10: classid 10:1 htb rate 1500kbit ceil 10Mbit burst 10k

3. Docker run 命令中 cgroups 相關(guān)命令

block IO:
   --blkio-weight value     Block IO (relative weight), between 10 and 1000
   --blkio-weight-device value  Block IO weight (relative device weight) (default [])
   --cgroup-parent string    Optional parent cgroup for the container
CPU:
   --cpu-percent int       CPU percent (Windows only)
   --cpu-period int       Limit CPU CFS (Completely Fair Scheduler) period
   --cpu-quota int        Limit CPU CFS (Completely Fair Scheduler) quota
 -c, --cpu-shares int       CPU shares (relative weight)
   --cpuset-cpus string     CPUs in which to allow execution (0-3, 0,1)
   --cpuset-mems string     MEMs in which to allow execution (0-3, 0,1)
Device:  
   --device value        Add a host device to the container (default [])
   --device-read-bps value    Limit read rate (bytes per second) from a device (default [])
   --device-read-iops value   Limit read rate (IO per second) from a device (default [])
   --device-write-bps value   Limit write rate (bytes per second) to a device (default [])
   --device-write-iops value   Limit write rate (IO per second) to a device (default [])
Memory:   
   --kernel-memory string    Kernel memory limit
 -m, --memory string        Memory limit
   --memory-reservation string  Memory soft limit
   --memory-swap string     Swap limit equal to memory plus swap: '-1' to enable unlimited swap
   --memory-swappiness int    Tune container memory swappiness (0 to 100) (default -1)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 二進(jìn)制部署docker的超詳細(xì)教程

    二進(jìn)制部署docker的超詳細(xì)教程

    部署環(huán)境并不會(huì)一直順利,有些時(shí)候因?yàn)闀r(shí)內(nèi)網(wǎng)環(huán)境,無(wú)法使用yum等情況,對(duì)于一些中間件的部署缺少依賴(lài),我們可以使用二進(jìn)制包的形式部署docker,這篇文章主要給大家介紹了關(guān)于二進(jìn)制部署docker的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • Docker安裝MySQL8的方法步驟

    Docker安裝MySQL8的方法步驟

    本篇文章主要介紹了Docker安裝MySQL8的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • docker(alpine+golang)?中?hosts?不生效問(wèn)題解決方法

    docker(alpine+golang)?中?hosts?不生效問(wèn)題解決方法

    這篇文章主要介紹了docker(alpine+golang)?中?hosts?不生效問(wèn)題解決大全,本文給大家分享了三種解決方法,每種方法給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • 通過(guò)容器提交鏡像DockerCommit及推送鏡像DockerPush

    通過(guò)容器提交鏡像DockerCommit及推送鏡像DockerPush

    這篇文章主要介紹了通過(guò)容器提交鏡像DockerCommit及推送鏡像DockerPush,文中通過(guò)詳細(xì)的示例代碼進(jìn)行了詳細(xì)分解,有需要的朋友可以借鑒參考下
    2021-09-09
  • docker搭建devops(騰訊云輕量應(yīng)用服務(wù)器)教程

    docker搭建devops(騰訊云輕量應(yīng)用服務(wù)器)教程

    這篇文章主要為大家介紹了docker搭建devops(騰訊云輕量應(yīng)用服務(wù)器)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Docker部署HertzBeat實(shí)時(shí)監(jiān)控告警系統(tǒng)

    Docker部署HertzBeat實(shí)時(shí)監(jiān)控告警系統(tǒng)

    HertzBeat是一款開(kāi)源的實(shí)時(shí)監(jiān)控告警系統(tǒng),本文就來(lái)介紹一下Docker部署HertzBeat實(shí)時(shí)監(jiān)控告警系統(tǒng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • Docker中如何通過(guò)docker-compose部署ELK

    Docker中如何通過(guò)docker-compose部署ELK

    Docker?Compose適用于不同的操作系統(tǒng)和云平臺(tái),這篇文章主要介紹了Docker中如何通過(guò)docker-compose部署ELK,需要的朋友可以參考下
    2024-05-05
  • Docker的安裝方法及運(yùn)行Docker Swarm模式的使用

    Docker的安裝方法及運(yùn)行Docker Swarm模式的使用

    本文給大家簡(jiǎn)單介紹docker的安裝以及1.12版本的swarm模式的使用,包括docker的安裝和配置,對(duì)docker swarm簡(jiǎn)單使用感興趣的朋友一起看看吧
    2016-11-11
  • 使用?Docker安裝?Zabbix并配置自定義監(jiān)控項(xiàng)的過(guò)程詳解

    使用?Docker安裝?Zabbix并配置自定義監(jiān)控項(xiàng)的過(guò)程詳解

    Zabbix?可以用來(lái)監(jiān)控各種網(wǎng)絡(luò)參數(shù),來(lái)保證服務(wù)器和系統(tǒng)的安全運(yùn)行,是一個(gè)基于?Web?界面提供的分布式系統(tǒng)監(jiān)控以及網(wǎng)絡(luò)監(jiān)控功能的企業(yè)級(jí)開(kāi)源解決方案,對(duì)Docker?安裝?Zabbix配置自定義監(jiān)控項(xiàng)相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-04-04
  • docker?save與docker?export的區(qū)別

    docker?save與docker?export的區(qū)別

    docker?save和docker?export都能導(dǎo)出鏡像包,本文主要介紹了docker?save與docker?export的區(qū)別,試圖搞清楚docker?save和docker?export的功能是什么?適用于什么應(yīng)用場(chǎng)景?感興趣的可以了解一下
    2022-03-03

最新評(píng)論