国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【云原生】Docker Cgroups資源控制管理

這篇具有很好參考價值的文章主要介紹了【云原生】Docker Cgroups資源控制管理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一、cgroups簡介

cgroups有四大功能:

二、cpu時間片的概念

三、對CPU使用的限制

3.1 設(shè)置CPU使用率上限

(1)查看容器的默認(rèn)CPU使用限制

(2)進(jìn)行壓力測試

(3)創(chuàng)建容器時設(shè)置CPU使用時間限制

(4)對已存在的容器進(jìn)行CPU限制

3.2 設(shè)置CPU資源占用比(設(shè)置多個容器時才有效)

(1)創(chuàng)建兩個容器,設(shè)置CPU資源占用比

(2)分別進(jìn)入兩個容器,進(jìn)行壓力測試

(3)查看容器運行狀態(tài),觀察CPU使用占比

3.3 設(shè)置容器綁定指定的CPU(綁核)

四、對內(nèi)存使用的限制

4.1 限制容器可以使用的最大內(nèi)存

4.2 限制容器可用的swap 大小

五、對磁盤IO的配置控制(blkio)的限制

5.1 創(chuàng)建容器,不限制寫速度

5.2 創(chuàng)建容器,并限制寫速度

六、清除docker占用的磁盤空間

總結(jié)

1.對cpu的限制參數(shù)

2.對內(nèi)存的限制

3.對磁盤IO的限制


一、cgroups簡介

cgroups,是一個非常強(qiáng)大的linux內(nèi)核工具,他不僅可以限制被namespace 隔離起來的資源,還可以 為資源設(shè)置權(quán)重、計算使用量、操控進(jìn)程啟停等等。所以cgroups (Control groups) 實現(xiàn)了對資源的配額和度量。

cgroups有四大功能:

  • 資源限制:可以對任務(wù)使用的資源總額進(jìn)行限制。
  • 優(yōu)先級分配:通過分配的cpu時間片數(shù)量以及磁盤IO帶寬大小,實際上相當(dāng)于控制了任務(wù)運行優(yōu)先級。
  • 資源統(tǒng)計:可以統(tǒng)計系統(tǒng)的資源使用量,如cpu時長,內(nèi)存用量等。
  • 任務(wù)控制: cgroup可以對任務(wù) 執(zhí)行掛起、恢復(fù)等操作。

二、cpu時間片的概念

時間片即CPU分配給各個程序的時間,每個線程被分配一個時間段,稱作它的時間片,即該進(jìn)程允許運行的時間,使各個程序從表面上看是同時進(jìn)行的。如果在時間片結(jié)束時進(jìn)程還在運行,則CPU將被剝奪并分配給另一個進(jìn)程。如果進(jìn)程在時間片結(jié)束前阻塞或結(jié)束,則CPU當(dāng)即進(jìn)行切換。而不會造成CPU資源浪費。

在宏觀上:我們可以同時打開多個應(yīng)用程序,每個程序并行不悖,同時運行。但在微觀上:由于只有一個CPU,一次只能處理程序要求的一部分,如何處理公平,一種方法就是引入時間片,每個程序輪流執(zhí)行。

三、對CPU使用的限制

3.1 設(shè)置CPU使用率上限

Linux通過CFS (Completely Fair Scheduler, 完全公平調(diào)度器)來調(diào)度各個進(jìn)程對CPU的使用。CFS默認(rèn)的調(diào)度周期是100ms。

我們可以設(shè)置每個容器進(jìn)程的調(diào)度周期,以及在這個周期內(nèi)各個容器最多能使用多少CPU時間。

使用 --cpu-period 即可設(shè)置調(diào)度周期,使用 --cpu-quota 即可設(shè)置在每個周期內(nèi)容器能使用的CPU時間。兩者可以配合使用。

CFS周期的有效范圍是1ms ~ 1s, 對應(yīng)的 --cpu-period 的數(shù)值范圍是 1000 ~1000000 (單位微秒)。

而容器的CPU配額必須不小于1ms,即 --cpu-quota 的值必須 >= 1000。

(1)查看容器的默認(rèn)CPU使用限制

#創(chuàng)建并啟動容器
?[root@yuji ~]# docker run -itd --name test1 centos:7 /bin/bash
?WARNING: IPv4 forwarding is disabled. Networking will not work.
?059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08
??#查看容器狀態(tài)
?[root@yuji ~]# docker ps -a
?CONTAINER ID ??IMAGE ???? COMMAND ??????CREATED ???????? STATUS ???????? PORTS ????NAMES
?059823a1abbe ??centos:7 ??"/bin/bash" ??12 seconds ago ??Up 10 seconds ????????????test1
??
?#切換到cgroup下針對容器的相關(guān)配置目錄
?[root@yuji ~]# cd /sys/fs/cgroup/cpu/docker/
?[root@yuji docker]# ls
?059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08 ?cpu.cfs_quota_us
?cgroup.clone_children ????????????????????????????????????????????cpu.rt_period_us
?cgroup.event_control ???????????????????????????????????????????? cpu.rt_runtime_us
?cgroup.procs ???????????????????????????????????????????????????? cpu.shares
?cpuacct.stat ???????????????????????????????????????????????????? cpu.stat
?cpuacct.usage ????????????????????????????????????????????????????notify_on_release
?cpuacct.usage_percpu ???????????????????????????????????????????? tasks
?cpu.cfs_period_us
?##切換到test1容器的目錄
?[root@yuji docker]# cd 059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08
?[root@yuji 059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08]# ls
?cgroup.clone_children ?cgroup.procs ?cpuacct.usage ????????cpu.cfs_period_us ?cpu.rt_period_us ??cpu.shares ?notify_on_release
?cgroup.event_control ??cpuacct.stat ?cpuacct.usage_percpu ?cpu.cfs_quota_us ??cpu.rt_runtime_us ?cpu.stat ?? tasks
?##查看test1容器的CPU使用限額。即每個調(diào)度周期內(nèi)可占用的CPU時間(單位:微秒)
?[root@yuji 059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08]# cat cpu.cfs_quota_us
?-1 ???????????????????????? ? #默認(rèn)為-1,表示不限制
?##查看CPU調(diào)度周期(單位:微秒)
?[root@yuji 059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08]# cat cpu.cfs_period_us
?100000 ???????????????????????#單位微秒,即100毫秒,0.1秒
??

?#cpu.cfs_period_us:分配的周期(微秒,所以文件名中用u),默認(rèn)為100000。
?#cpu.cfs_quota_us:表示該cgroups限制占用的時間(微秒),默認(rèn)為-1,表示不限制。
?#cpu.cfs_quota_us 如果設(shè)為50000,表示占用 50000/100000=50%的CPU。

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

(2)進(jìn)行壓力測試

[root@yuji ~]# docker exec -it test1 bash ????#進(jìn)入容器
?[root@059823a1abbe /]# vi /cpu.sh ????????#寫個死循環(huán)腳本
?#!/bin/bash
?i=0
?while true
?do
????let i++
?done
?[root@059823a1abbe /]# chmod +x cpu.sh ?? #給腳本權(quán)限
?[root@059823a1abbe /]# ./cpu.sh ??????????#運行腳本
??
?#再開一個終端,查看cpu.sh進(jìn)程的cpu使用率
?[root@localhost ~]# top ?????????????? ? #可以看到使用率接近100%
????PID USER ???? PR ?NI ?? VIRT ?? RES ?? SHR S ?%CPU %MEM ????TIME+ COMMAND
???3328 root ?????20 ??0 ??11688 ??1100 ???916 R ?99.7 ?0.1 ??7:04.44 cpu.sh
????
?#之后在容器中使用ctrl+c,停止腳本的執(zhí)行,再top觀察CPU使用率

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

(3)創(chuàng)建容器時設(shè)置CPU使用時間限制

#創(chuàng)建容器test2,并限制CPU使用時間為50000微秒,表示最多占用50%的CPU。
?[root@yuji ~]# docker run -itd --name test2 --cpu-quota 50000 centos:7
?WARNING: IPv4 forwarding is disabled. Networking will not work.
?8e7ba758a231b29dad1f668ba83092e8f637d2a9785999c6d23b27c60935b12b
?#查看CPU限額文件
?[root@yuji ~]# cd /sys/fs/cgroup/cpu/docker/
?[root@yuji docker]# ls
?059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08 ?cpuacct.usage ????????cpu.shares
?8e7ba758a231b29dad1f668ba83092e8f637d2a9785999c6d23b27c60935b12b ?cpuacct.usage_percpu ?cpu.stat
?cgroup.clone_children ????????????????????????????????????????????cpu.cfs_period_us ????notify_on_release
?cgroup.event_control ???????????????????????????????????????????? cpu.cfs_quota_us ???? tasks
?cgroup.procs ???????????????????????????????????????????????????? cpu.rt_period_us
?cpuacct.stat ???????????????????????????????????????????????????? cpu.rt_runtime_us
?[root@yuji docker]# cd 8e7ba758a231b29dad1f668ba83092e8f637d2a9785999c6d23b27c60935b12b
?[root@yuji 8e7ba758a231b29dad1f668ba83092e8f637d2a9785999c6d23b27c60935b12b]# cat cpu.cfs_quota_us
?50000
??
?#登錄容器test2,寫個死循環(huán)腳本并運行
?[root@yuji ~]# docker exec -it test2 bash
?[root@8e7ba758a231 /]# ?vi /cpu.sh
?#!/bin/bash
?i=0
?while true
?do
??let i++
?done
?[root@8e7ba758a231 /]# chmod +x cpu.sh
?[root@8e7ba758a231 /]# ./cpu.sh?
??
?#再開一個終端,查看cpu使用率
?[root@yuji ~]# top ???????????????? #CPU使用率在50%左右
??PID USER ???? PR ?NI ?? VIRT ?? RES ?? SHR S ?%CPU %MEM ????TIME+ COMMAND
?3746 root ?????20 ??0 ??11688 ??1096 ???916 R ?50.0 ?0.1 ??1:55.26 cpu.sh
??
??
?#容器的CPU使用時間限制設(shè)為50000,而調(diào)度周期為100000,表示容器占用50000/100000=50%的CPU。

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

(4)對已存在的容器進(jìn)行CPU限制

直接修改 /sys/fs/cgroup/cpu/docker/容器id/cpu.cfs_quota_us 文件即可

#進(jìn)入test1容器目錄,修改CPU使用時間限制
?[root@yuji ~]# cd /sys/fs/cgroup/cpu/docker/
?[root@yuji docker]# ls
?059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08 ?cpuacct.usage ????????cpu.shares
?8e7ba758a231b29dad1f668ba83092e8f637d2a9785999c6d23b27c60935b12b ?cpuacct.usage_percpu ?cpu.stat
?cgroup.clone_children ????????????????????????????????????????????cpu.cfs_period_us ????notify_on_release
?cgroup.event_control ???????????????????????????????????????????? cpu.cfs_quota_us ???? tasks
?cgroup.procs ???????????????????????????????????????????????????? cpu.rt_period_us
?cpuacct.stat ???????????????????????????????????????????????????? cpu.rt_runtime_us
?[root@yuji docker]# cd 059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08
?#修改CPU使用時間限制
?[root@yuji 059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08]# echo "33000" >cpu.cfs_quota_us
?[root@yuji 059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08]# cat cpu.cfs_quota_us
?33000
??
?#此時再進(jìn)入test1容器執(zhí)行之前創(chuàng)建好的腳本,進(jìn)行壓力測試
?[root@yuji ~]# docker exec -it test1 bash
?[root@059823a1abbe /]# ./cpu.sh
??
?#再開一個終端,查看cpu使用率
?[root@localhost ~]# top
??PID USER ???? PR ?NI ?? VIRT ?? RES ?? SHR S ?%CPU %MEM ????TIME+ COMMAND
?4635 root ?????20 ??0 ??11688 ??1096 ???916 R ?33.3 ?0.1 ??1:27.62 cpu.sh
??
??
?#容器的CPU使用時間限制設(shè)為33000,而調(diào)度周期為100000,表示容器占用33000/100000=33%的CPU。

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

3.2 設(shè)置CPU資源占用比(設(shè)置多個容器時才有效)

Docker 通過 --cpu-shares 指定CPU份額,默認(rèn)值為1024,值為1024的倍數(shù)。

(1)創(chuàng)建兩個容器,設(shè)置CPU資源占用比

#先刪除所有容器
?[root@yuji ~]# docker rm -f $(docker ps -aq)
?9c48e09ea156
?7c7e024b557e
??
?#創(chuàng)建兩個容器為c1和c2
?#只有這2個容器的情況下,cpu資源分?jǐn)偨o這兩個容器,512:1024等于1:2,一個占1/3,一個占2/3。
?[root@yuji ~]# docker run -itd --name c1 --cpu-shares 512 centos:7
?WARNING: IPv4 forwarding is disabled. Networking will not work.
?300b50f13ebef4921029e352f5850b1c81f8f8e28827a8d11f20e55eec94642b
?[root@yuji ~]# docker run -itd --name c2 --cpu-shares 1024 centos:7
?WARNING: IPv4 forwarding is disabled. Networking will not work.
?7a999b00c9eef7fdb916c2914087809e7eba55b1c52aaaabeeda16a4006f57a9
?[root@yuji ~]# docker ps -a
?CONTAINER ID ??IMAGE ???? COMMAND ??????CREATED ????????STATUS ????????PORTS ????NAMES
?7a999b00c9ee ??centos:7 ??"/bin/bash" ??4 seconds ago ??Up 3 seconds ????????????c2
?300b50f13ebe ??centos:7 ??"/bin/bash" ??6 seconds ago ??Up 5 seconds ????????????c1

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

(2)分別進(jìn)入兩個容器,進(jìn)行壓力測試

#宿主機(jī)開啟路由轉(zhuǎn)發(fā)功能,使容器能夠連通外網(wǎng)
?[root@yuji ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
?[root@yuji ~]# sysctl -p
?net.ipv4.ip_forward = 1
??
?#進(jìn)入c1容器,進(jìn)行壓力測試
?docker exec -it c1 bash
?yum install -y epel-release ???#下載epel源
?yum install -y stress ?????????#安裝stress工具
?stress -c 4 ??#產(chǎn)生四個進(jìn)程,每個進(jìn)程都反復(fù)不停地計算隨機(jī)數(shù)的平方根
??
?#進(jìn)入c2容器,進(jìn)行壓力測試
?docker exec -it c2 bash
?yum install -y epel-release ???#下載epel源
?yum install -y stress ?????????#安裝stress工具
?stress -c 4 ??#產(chǎn)生四個進(jìn)程,每個進(jìn)程都反復(fù)不停的計算隨機(jī)數(shù)的平方根

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

進(jìn)入c1容器,進(jìn)行壓力測試:

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

進(jìn)入c2容器,進(jìn)行壓力測試:

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

(3)查看容器運行狀態(tài),觀察CPU使用占比

#再打開一個終端,查看容器運行狀態(tài)(動態(tài)更新)
?[root@yuji ~]# docker stats ????#可以看到CPU使用占比大約是1:2
?CONTAINER ID ??NAME ???? CPU % ????MEM USAGE / LIMIT ????MEM % ????NET I/O ???????? BLOCK I/O ?????? PIDS
?7a999b00c9ee ??c2 ???????266.52% ??188.9MiB / 1.938GiB ??9.52% ????32.8MB / 152kB ??1.91MB / 50MB ???7
?300b50f13ebe ??c1 ???????133.03% ??203.1MiB / 1.938GiB ??10.24% ???33.7MB / 603kB ??108MB / 51.4MB ??7
??
?#因為宿主機(jī)有4核,所以CPU總百分比是400%。
?#c1:c2 = 133.03%:266.52% ≈ 1:2

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

3.3 設(shè)置容器綁定指定的CPU(綁核)

注意:CPU編號從0開始。 編號1、3代表第二個核和第四個核 。

#先為虛擬機(jī)分配4個CPU核數(shù)
??
?#創(chuàng)建容器c3時,綁定1號和3號這兩個CPU
?[root@yuji ~]# docker run -itd --name c3 --cpuset-cpus 1,3 centos:7 /bin/bash
??
?#進(jìn)入容器,進(jìn)行壓力測試
?docker exec -it c3 bash
?yum install -y epel-release ???#下載epel源
?yum install -y stress ?????????#安裝stress工具
?stress -c 4 ??#產(chǎn)生四個進(jìn)程,每個進(jìn)程都反復(fù)不停地計算隨機(jī)數(shù)的平方根
??
?#退出容器,執(zhí)行top命令再按1查看CPU使用情況
?[root@yuji ~]# top ?? #可以看到CPU1和CPU3占滿,其他CPU使用率為0
?top - 01:12:49 up ?4:01, ?3 users, ?load average: 3.47, 2.96, 2.49
?Tasks: 183 total, ??6 running, 177 sleeping, ??0 stopped, ??0 zombie
?%Cpu0 ?: ?0.0 us, ?0.0 sy, ?0.0 ni,100.0 id, ?0.0 wa, ?0.0 hi, ?0.0 si, ?0.0 st
?%Cpu1 ?:100.0 us, ?0.0 sy, ?0.0 ni, ?0.0 id, ?0.0 wa, ?0.0 hi, ?0.0 si, ?0.0 st
?%Cpu2 ?: ?0.0 us, ?0.0 sy, ?0.0 ni,100.0 id, ?0.0 wa, ?0.0 hi, ?0.0 si, ?0.0 st
?%Cpu3 ?:100.0 us, ?0.0 sy, ?0.0 ni, ?0.0 id, ?0.0 wa, ?0.0 hi, ?0.0 si, ?0.0 st
?KiB Mem : ?2031912 total, ??150852 free, ??635800 used, ?1245260 buff/cache
?KiB Swap: ?4194300 total, ?4194236 free, ??????64 used. ?1138692 avail Mem

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

四、對內(nèi)存使用的限制

4.1 限制容器可以使用的最大內(nèi)存

-m (或--memory=)選項用于限制容器可以使用的最大內(nèi)存

#-m(--memory=)選項用于限制容器可以使用的最大內(nèi)存。
??
?#創(chuàng)建容器c4,并限制容器可以使用的最大內(nèi)存為512m
?[root@yuji ~]# docker run -itd --name c4 -m 512m centos:7 /bin/bash
??
?#查看容器狀態(tài),可以看到c4可以使用的最大內(nèi)存是512M
?[root@yuji ~]# docker stats
?CONTAINER ID ??NAME ???? CPU % ????MEM USAGE / LIMIT ????MEM % ????NET I/O ???????? BLOCK I/O ????????PIDS
?437180fc6266 ??c4 ???????0.00% ????396KiB / 512MiB ??????0.08% ????648B / 0B ?????? 0B / 0B ??????????1
?ebcc06da3a03 ??c3 ???????0.00% ????174.2MiB / 1.938GiB ??8.78% ????32.8MB / 196kB ??47.7MB / 50.6MB ??1
?7a999b00c9ee ??c2 ???????0.00% ????101.7MiB / 1.938GiB ??5.13% ????32.9MB / 152kB ??1.91MB / 50MB ????2
?300b50f13ebe ??c1 ???????0.00% ????113MiB / 1.938GiB ????5.69% ????33.7MB / 603kB ??108MB / 51.4MB ???1

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

4.2 限制容器可用的swap 大小

#限制可用的swap 大小,--memory-swap
?●強(qiáng)調(diào)一下, --memory-swap是必須要與 --memory(或-m)一起使用的。
?●正常情況下, --memory-swap 的值包含容器可用內(nèi)存和可用swap 。
?●所以 -m 300m --memory-swap=1g 的含義為:容器可以使用300M 的物理內(nèi)存,并且可以使用700M (1G - 300M)的swap。
??
?設(shè)置為0或者不設(shè)置,則容器可以使用的 swap 大小為 -m 值的兩倍。
?如果 --memory-swap 的值和 -m 值相同,則容器不能使用swap。
?如果 --memory-swap 值為 -1,它表示容器程序使用的內(nèi)存受限,而可以使用的swap空間使用不受限制(宿主機(jī)有多少swap 容器就可以使用多少)。

示例:

#--memory-swap 的值包含容器可用內(nèi)存和可用swap,減去-m的值才是可用swap的值。
?#表示容器可以使用512M的物理內(nèi)存,并且可以使用512M的swap。因為1g減去512m的物理內(nèi)存,剩余值才是可用swap。
?docker run -itd --name yy01 -m 512m --memory-swap=1g centos:7 bash
??
??
?#--memoryswap值和 -m 的值相同,表示容器無法使用swap
?docker run -itd --name yy02 -m 512m --memory-swap=512m centos:7 bash
??
??
?# --memory-swap 的值設(shè)置為0或者不設(shè)置,則容器可以使用的 swap 大小為 -m 值的兩倍。
?docker run -itd --name yy03 -m 512m centos:7 bash
??
??
?# --memory-swap 值為 -1,它表示容器程序使用的內(nèi)存受限,但可以使用的swap空間使用不受限制(宿主機(jī)有多少swap 容器就可以使用多少)。
?docker run -itd --name yy04 -m 512m --memory-swap=-1 centos:7 bash

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

五、對磁盤IO的配置控制(blkio)的限制

--device-read-bps:限制某個設(shè)備上的讀速度bps ( 數(shù)據(jù)量),單位可以是kb、mb (M)或者gb。

--device-write-bps : 限制某個設(shè)備上的寫速度bps ( 數(shù)據(jù)量),單位可以是kb、mb (M)或者gb。

--device-read-iops :限制讀某個設(shè)備的iops (次數(shù))

--device-write-iops :限制寫入某個設(shè)備的iops ( 次數(shù))

 

--device-read-bps:限制某個設(shè)備上的讀速度bps ( 數(shù)據(jù)量),單位可以是kb、mb (M)或者gb。
?例: docker run -itd --name test9 --device-read-bps /dev/sda:1M centos:7 /bin/bash
?#表示該容器每秒只能讀取1M的數(shù)據(jù)量
??
?--device-write-bps : 限制某個設(shè)備上的寫速度bps ( 數(shù)據(jù)量),單位可以是kb、mb (M)或者gb。
?例: docker run -itd --name test10 --device-write-bps /dev/sda:1mb centos:7 /bin/bash
?#表示該容器每秒只能寫入1M的數(shù)據(jù)量
??
?--device-read-iops :限制讀某個設(shè)備的iops (次數(shù))
?--device-write-iops :限制寫入某個設(shè)備的iops ( 次數(shù))

5.1 創(chuàng)建容器,不限制寫速度

 

#創(chuàng)建容器tt01,不限制寫入速度
?docker run -it --name tt01 centos:7 /bin/bash
??
?#通過dd來驗證寫速度,拷貝50M的數(shù)據(jù)
?dd if=/dev/zero of=/opt/test.out bs=10M count=5 oflag=direct ??#添加oflag參數(shù)以規(guī)避掉文件系統(tǒng)cache
??
?#創(chuàng)建容器tt01,不限制寫入速度
?[root@yuji ~]# docker run -it --name tt01 centos:7 /bin/bash
?#通過dd來驗證寫速度,拷貝50M的數(shù)據(jù)到容器中
?[root@a62f5b811e58 /]# dd if=/dev/zero of=/opt/test.out bs=10M count=5 oflag=direct ??#添加oflag參數(shù)以規(guī)避掉文件系統(tǒng)cache
?5+0 records in
?5+0 records out
?52428800 bytes (52 MB) copied, 0.0948474 s, 553 MB/s
??
?#沒有限制寫速度的情況下,寫入很快,0.09秒的時間內(nèi)已寫入50M的數(shù)據(jù),寫入速度為553M/s。

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

5.2 創(chuàng)建容器,并限制寫速度

 

#創(chuàng)建容器,并限制寫入速度為1MB/s,即每秒只能寫入1MB的數(shù)據(jù)量。
?[root@yuji ~]# docker run -it --name tt02 --device-write-bps /dev/sda:1mb centos:7 bash
?#通過dd來驗證寫速度,拷貝50M的數(shù)據(jù)到容器中
?[root@655f6cca0175 /]# dd if=/dev/zero of=/opt/test.out bs=10M count=5 oflag=direct ?#添加oflag參數(shù)以規(guī)避掉文件系統(tǒng)cache
?5+0 records in
?5+0 records out
?52428800 bytes (52 MB) copied, 50.0048 s, 1.0 MB/s
??
?#寫入50M的數(shù)據(jù),需要50s左右,因為限制了容器的寫速度是 1.0 MB/s。

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

六、清除docker占用的磁盤空間

docker system prune -a 可用于清理磁盤,刪除關(guān)閉的容器、無用的數(shù)據(jù)卷和網(wǎng)絡(luò)。

示例:

 

#查看容器
?[root@yuji ~]# docker ps -a
?CONTAINER ID ??IMAGE ???? COMMAND ??????CREATED ???????? STATUS ???????????????????? PORTS ????NAMES
?655f6cca0175 ??centos:7 ??"bash" ???????10 minutes ago ??Exited (0) 4 minutes ago ???????????? tt02
?a62f5b811e58 ??centos:7 ??"/bin/bash" ??19 minutes ago ??Exited (0) 11 minutes ago ????????????tt01
?437180fc6266 ??centos:7 ??"/bin/bash" ??36 minutes ago ??Up 36 minutes ????????????????????????c4
?ebcc06da3a03 ??centos:7 ??"/bin/bash" ??50 minutes ago ??Up 50 minutes ????????????????????????c3
?#清理磁盤,刪除關(guān)閉的容器、無用的數(shù)據(jù)卷和網(wǎng)絡(luò)。
?[root@yuji ~]# docker system prune -a
?WARNING! This will remove: ??????????????????????????????????#提示
???- all stopped containers ??????????????????????????????????#刪除清理所有停止的容器
???- all networks not used by at least one container ?????????#刪除未被使用的網(wǎng)絡(luò)
???- all images without at least one container associated to them ?#未被使用的鏡像
???- all build cache ????????????????????????????????????????#刪除已建立的緩存
??
?Are you sure you want to continue? [y/N] y ???????????????#是否確定刪除
?Deleted Containers:
?655f6cca01754d27a080e01b64aa26c4f96642ab5b5931b186ad04082a98430f
?a62f5b811e584cc6e8d344830d5df9ddcbdd72761966989245b0c52f6abb9a4a
?......
?Total reclaimed space: 451MB

??
?#再次查看容器,只剩下啟動中的容器
?[root@localhost ~]# docker ps -a
?CONTAINER ID ??IMAGE ???? COMMAND ??????CREATED ???????? STATUS ???????? PORTS ????NAMES
?525d77ff7423 ??centos:7 ??"/bin/bash" ??3 minutes ago ?? Up 3 minutes ???????????? c6
?fb2ee21e0468 ??centos:7 ??"/bin/bash" ??12 minutes ago ??Up 12 minutes ????????????c4
?81e3ea8f526e ??centos:7 ??"/bin/bash" ??18 minutes ago ??Up 18 minutes ????????????c3

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

【云原生】Docker Cgroups資源控制管理,云原生,docker,容器,云計算,運維

總結(jié)

1.對cpu的限制參數(shù)

 

docker run -cpu-period ????#設(shè)置調(diào)度周期時間1000~1000000
????????????-cpu-quota ?????#設(shè)置容器進(jìn)程的CPU占用時間,要與調(diào)度周期時間成比例
????????????--cpu-shares ???#設(shè)置多個容器之間的CPU資源占用比
????????????--cpuset-cpus ??#綁核(第一個CPU編號從0開始)

2.對內(nèi)存的限制

 

-m 物理內(nèi)存 [--memory-swap=總值]

3.對磁盤IO的限制

 

--device-read-bps 設(shè)備文件:1mb/1M ????#限制讀速度
?--device-write-bps 設(shè)備文件:1mb/1M ???#限制寫速度
?--device-read-iops ??????????????????#限制讀次數(shù)
?--device-write-iops ?????????????????#限制寫次數(shù)
??
?docker system prune -a ???#清理磁盤,刪除關(guān)閉的容器、無用的數(shù)據(jù)卷和網(wǎng)絡(luò)。文章來源地址http://www.zghlxwxcb.cn/news/detail-663937.html

到了這里,關(guān)于【云原生】Docker Cgroups資源控制管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【云原生】Docker容器資源限制(CPU/內(nèi)存/磁盤)

    【云原生】Docker容器資源限制(CPU/內(nèi)存/磁盤)

    目錄 ?編輯 1.限制容器對內(nèi)存的使用 2.限制容器對CPU的使用 3.block IO權(quán)重 4.實現(xiàn)容器的底層技術(shù) 1.cgroup 1.查看容器的ID 2.在文件中查找 2.namespace 1.Mount 2.UTS 3.IPC 4.PID 5.Network 6.User 1.限制容器對內(nèi)存的使用 ?個 docker host 上會運?若?容器,每個容器都需要 CPU、內(nèi)存和 IO 資源。對

    2024年02月14日
    瀏覽(26)
  • 【云原生】Docker網(wǎng)絡(luò)及Cgroup資源控制

    【云原生】Docker網(wǎng)絡(luò)及Cgroup資源控制

    Docker使用Linux橋接,在宿主機(jī)虛擬一個Docker容器網(wǎng)橋(docker0),Docker啟動一個容器時會根據(jù)Docker網(wǎng)橋的網(wǎng)段分配給容器一個IP地址,稱為Container-IP,同時Docker網(wǎng)橋是每個容器的默認(rèn)網(wǎng)關(guān)。因為在同一宿主機(jī)內(nèi)的容器都接入同一個網(wǎng)橋,這樣容器之間就能夠通過容器的 Container-IP 直

    2024年02月16日
    瀏覽(28)
  • 500行代碼手寫docker-實現(xiàn)硬件資源限制cgroups

    本系列教程主要是為了弄清楚容器化的原理,紙上得來終覺淺,絕知此事要躬行,理論始終不及動手實踐來的深刻,所以這個系列會用go語言實現(xiàn)一個類似docker的容器化功能,最終能夠容器化的運行一個進(jìn)程。 本章的源碼已經(jīng)上傳到github,地址如下: 之前我們對容器的網(wǎng)絡(luò)命

    2024年02月06日
    瀏覽(21)
  • 云原生Docker容器管理

    目錄 docker容器的管理 容器創(chuàng)建 ?查看容器的運行狀態(tài) 啟動容器 創(chuàng)建并啟動容器? 終止容器運行 ?刪除容器 ?容器的進(jìn)入 ?查看容器詳細(xì)信息 復(fù)制到容器中 從容器復(fù)制文件到主機(jī) 容器的導(dǎo)出與導(dǎo)入 導(dǎo)出 ?導(dǎo)入 相當(dāng)于一個進(jìn)程,性能接近于原生,幾乎沒有損耗; docker容器在

    2024年02月07日
    瀏覽(22)
  • linux 內(nèi)核資源配置--cgroups詳解以及在docker中的應(yīng)用

    linux 內(nèi)核資源配置--cgroups詳解以及在docker中的應(yīng)用

    1.1、cgroups 是什么 Linux cgroup (Control Groups)是 Linux 內(nèi)核提供的一種機(jī)制, 用于限制進(jìn)程組使用的資源(如 CPU、內(nèi)存、磁盤 I/O 等) 。通過將進(jìn)程組劃分為層次結(jié)構(gòu),并將資源限制應(yīng)用于不同層次的組,可以實現(xiàn)對系統(tǒng)資源的統(tǒng)一管理和限制。 cgroup 提供了一套 API,用于創(chuàng)建

    2024年02月16日
    瀏覽(25)
  • 【云原生】Docker中容器管理常用所有命令

    【云原生】Docker中容器管理常用所有命令

    1.docker 容器創(chuàng)建流程 ? 2.容器運行本質(zhì) Docker 容器存在的意義就是為了運行容器中的應(yīng)用,對外提供服務(wù),所以啟動容器的目的就是啟動運行該容器中的應(yīng)用。容器中的應(yīng)用運行完畢后,容器就會自動終止。所以如果不想讓容器啟動后立即終止運行,則就需要使容器應(yīng)用不能

    2024年02月14日
    瀏覽(20)
  • 云原生系列之docker的容器管理實戰(zhàn)

    之前我們已經(jīng)探討過了docker的鏡像,看了下時間,距離上次介紹容器的鏡像已經(jīng)過去兩個月了, 如果你已經(jīng)忘記了,可以直奔專欄:容器管理 從今天開始,我們要探討docker 的容器了,docker的容器都是從鏡像開始創(chuàng)建的,涉及到的操作有: 創(chuàng)建容器,停止容器,進(jìn)入容器,刪

    2024年02月10日
    瀏覽(21)
  • 【云計算?云原生】3.一小時熟練掌握docker容器

    【云計算?云原生】3.一小時熟練掌握docker容器

    docker是一個開源的應(yīng)用容器引擎 ,可以讓開發(fā)人員把編寫好的代碼和運行代碼所需要的環(huán)境打包進(jìn)一個容器里,通過移植容器可以避免多次搭建環(huán)境以及代碼在一臺機(jī)器上可以運行而到了另一臺機(jī)器上因環(huán)境問題報錯。 區(qū)分鏡像和容器 用戶基于鏡像來運行容器,可以把鏡像

    2024年02月06日
    瀏覽(21)
  • 【云原生】Docker的數(shù)據(jù)管理(數(shù)據(jù)卷、容器互聯(lián))

    【云原生】Docker的數(shù)據(jù)管理(數(shù)據(jù)卷、容器互聯(lián))

    目錄 一、數(shù)據(jù)卷(容器與宿主機(jī)之間數(shù)據(jù)共享) 二、數(shù)據(jù)卷容器(容器與容器之間數(shù)據(jù)共享) 三、 容器互聯(lián)(使用centos鏡像) 總結(jié) 用戶在使用Docker的過程中,往往需要能查看容器內(nèi)應(yīng)用產(chǎn)生的數(shù)據(jù),或者需要把容器內(nèi)的數(shù)據(jù)進(jìn)行備份,甚至多個容器之間進(jìn)行數(shù)據(jù)的共享,

    2024年02月11日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包