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

Docker的資源配額

這篇具有很好參考價(jià)值的文章主要介紹了Docker的資源配額。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Docker的資源配額(cgroup)

什么是cgroup?

cgroup全稱是control groups

cgroup是linux內(nèi)核中的機(jī)制,這個(gè)機(jī)制可以根據(jù)特定的行為把一系列的任務(wù),子任務(wù)整合或者分離,按照資源劃分的等級的不同,從而實(shí)現(xiàn)資源統(tǒng)一控制的框架,cgoup可以控制、限制、隔離進(jìn)程所需的物理資源,包括cpu、內(nèi)存、IO,為容器虛擬化提供了支持,是構(gòu)建docker一系列虛擬化的管理工具。

control groups:控制組,被整合在了linux內(nèi)核當(dāng)中,把進(jìn)程(tasks)放到組里面,對組設(shè)置權(quán)限,對進(jìn)程進(jìn)行控制??梢岳斫鉃橛脩艉徒M的概念,用戶會繼承它所在組的權(quán)限。

cgroup作用?

cgroup和namespace類似,也是講進(jìn)程分組,但是目的與namespace不一樣,namespace是為了隔離進(jìn)程組之前的資源,而cgroup是為了對一組進(jìn)程進(jìn)行統(tǒng)一的資源控制。

  1. 限制進(jìn)程組可以使用的資源數(shù)量(Resource limiting )。比如:memory子系統(tǒng)可以為進(jìn)程組設(shè)定一個(gè)memory使用上限,一旦進(jìn)程組使用的內(nèi)存達(dá)到限額再申請內(nèi)存,就會觸發(fā)OOM(out of memory)。
  2. 進(jìn)程組的優(yōu)先級控制(Prioritization )。比如:可以使用cpu子系統(tǒng)為某個(gè)進(jìn)程組分配特定cpu share。
  3. 記錄進(jìn)程組使用的資源數(shù)量(Accounting )。比如:可以使用cpuacct子系統(tǒng)記錄某個(gè)進(jìn)程組使用的cpu時(shí)間。
  4. 進(jìn)程組隔離(Isolation)。比如:使用ns子系統(tǒng)可以使不同的進(jìn)程組使用不同的namespace,以達(dá)到隔離的目的,不同的進(jìn)程組有各自的進(jìn)程、網(wǎng)絡(luò)、文件系統(tǒng)掛載空間。
  5. 進(jìn)程組控制(Control)。比如:使用freezer子系統(tǒng)可以將進(jìn)程組掛起和恢復(fù)。

cgroup子系統(tǒng)

這些具體的資源管理功能稱為Cgroup子系統(tǒng),有以下幾大子系統(tǒng)實(shí)現(xiàn):

Cgroup子系統(tǒng) 作用
blkio 設(shè)置限制每個(gè)塊設(shè)備的輸入輸出控制,例如:磁盤、光盤、usb等等
CPU 使用調(diào)度程序?yàn)閏group任務(wù)提供CPU的訪問
cpuacct 產(chǎn)生cgroup任務(wù)的CPU資源報(bào)告
cpuset 如果是多核心的CPU,這個(gè)子系統(tǒng)會為cgroup任務(wù)分配單獨(dú)的CPU和內(nèi)存
devices 允許或拒絕cgroup任務(wù)對設(shè)備的訪問
freezer 暫停和恢復(fù)cgroup任務(wù)
memory 設(shè)置每個(gè)cgroup的內(nèi)存限制以及產(chǎn)生內(nèi)存資源報(bào)告
net_cls 標(biāo)記每個(gè)網(wǎng)絡(luò)包以供cgroup方便使用
ns 命名空間子系統(tǒng)
perf_event 增加了對每個(gè)group的檢測跟蹤能力,可以檢測屬于某個(gè)特定的group的所有線程以及運(yùn)行在特定CPU上的線程

前言

默認(rèn)情況下,容器時(shí)沒有資源限制的,會盡可能的使用宿主機(jī)的資源,但是宿主機(jī)并不是所有資源都可以給,所以就需要對docker的容器進(jìn)行一定的限制,這就用到了linux自帶的cgroup來支持。

一、CPU的資源配額

1、CPU周期限制

默認(rèn)情況下,每個(gè)容器對主機(jī)CPU周期的訪問時(shí)無線的。您可以設(shè)置各種約束來限制給定容器對主機(jī)CPU周期的訪問。大多數(shù)用戶將使用和配置默認(rèn)CFS調(diào)度程序。

2、配置默認(rèn)的cfs調(diào)度程序

CFS是用于正常Linux進(jìn)程的Linux內(nèi)核CPU調(diào)度程序。幾個(gè)運(yùn)行時(shí)標(biāo)志允許您配置容器對CPU資源的訪問量。使用這些設(shè)置時(shí),Docker將修改主機(jī)上容器的cgroup設(shè)置。

選項(xiàng) 描述
–cpus= 指定容器可以使用多少可用CPU資源。例如,如果主機(jī)有兩個(gè)CPU,并且您設(shè)置了–cpus =“1.5”,那么該容器將保證最多可以訪問一個(gè)半的CPU。這相當(dāng)于設(shè)置–cpu-period =“100000”和–cpu-quota =“150000”。在Docker 1.13和更高版本中可用。
–cpu-period= 指定CPU CFS調(diào)度程序周期,該周期與–cpu-quota一起使用。默認(rèn)為100000微妙,以微秒表示。大多數(shù)用戶不會從默認(rèn)值更改此設(shè)置。如果您使用Docker 1.13或更高版本,請改用–cpus。
–cpu-quota= 在容器上添加CPU CFS配額。每個(gè)–cpu-period允許CPU訪問的容器數(shù)微秒數(shù)。換句話說,cpu-quota / cpu-period。如果您使用Docker 1.13或更高版本,請改用–cpus。
–cpuset-cpus 限制容器可以使用的特定CPU或核心。如果您有多個(gè)CPU,則容器可以使用的逗號分隔列表或連字符分隔的CPU范圍。第一個(gè)CPU編號為0.有效值可能為0-3(使用第一,第二,第三和第四個(gè)CPU)或1,3(使用第二個(gè)和第四個(gè)CPU)。
–cpu-shares 將此標(biāo)志設(shè)置為大于或小于默認(rèn)值1024的值,以增加或減少容器的重量,并使其能夠訪問主機(jī)CPU周期的更大或更小比例。這僅在CPU周期受到限制時(shí)才會執(zhí)行。當(dāng)大量CPU周期可用時(shí),所有容器都使用盡可能多的CPU。這樣,這是一個(gè)軟限制。–cpu-shares不會阻止容器在群集模式下進(jìn)行調(diào)度。它優(yōu)先考慮容器CPU資源的可用CPU周期。它不保證或保留任何特定的CPU訪問權(quán)限。
1.查看CPU的資源限制
命令格式:
cat /sys/fs/cgroup/cpu/docker/[容器ID]/cpu.cfs_quota_us

例:
[root@docker ~]# docker run -itd --name test2 centos:7 /bin/bash
2964d084535d0670cdf79233a0d2e2a99620d1f0c93854ac8ca73944d4affd5e
[root@docker ~]# cat /sys/fs/cgroup/cpu/docker/2964d084535d0670cdf79233a0d2e2a99620d1f0c93854ac8ca73944d4affd5e/cpu.cfs_quota_us 
-1
'//-1代表不進(jìn)行任何限制'

--
2.手動修改文件以實(shí)現(xiàn)修改CPU限制
[root@docker ~]# echo 20000 > /sys/fs/cgroup/cpu/docker/2964d084535d0670cdf79233a0d2e2a99620d1f0c93854ac8ca73944d4affd5e/cpu.cfs_quota_us 
[root@docker ~]# cat /sys/fs/cgroup/cpu/docker/2964d084535d0670cdf79233a0d2e2a99620d1f0c93854ac8ca73944d4affd5e/cpu.cfs_quota_us 
20000

--
3.在運(yùn)行容器的同時(shí)指定CPU限制條件
'以下這兩個(gè)參數(shù)一般聯(lián)合使用,控制容器可以分配到的CPU時(shí)鐘周期'
'--cpu-period是用來指定容器對CPU的使用要在多長時(shí)間內(nèi)做一次重新分配'
'--cpu-quota是用來指定在這個(gè)周期內(nèi),最多可以有多少時(shí)間來跑這個(gè)容器'

Docker的資源配額

Docker的資源配額

//創(chuàng)建容器是定義cpu配額
docker run -itd --name test1 --cpu-period=200000 --cpu-quota=100000 centos:7 /bin/bash
docker exec -it test1 /bin/bash
yum -y install epel-release && yum -y install stress

Docker的資源配額

Docker的資源配額

Docker的資源配額

Docker的資源配額

3、多任務(wù)比例分享CPU

當(dāng)有多個(gè)容器任務(wù)同時(shí)運(yùn)行時(shí),很難計(jì)算 CPU 的使用率,我們可以設(shè)置 CPU 按照比例共享 CPU 資源,以實(shí)現(xiàn)使用率的動態(tài)調(diào)整

docker run -itd --name cpu1 --cpu-shares 1024 centos:7 /bin/bash
yum -y install epel-release 
yum -y install  stress
stress -c 10 &
docker exec -it *** bash
top		'//查看CPU使用率'

--新開一個(gè)終端--
步驟和第一個(gè)類似到那時(shí)
docker run -itd --name test3 --cpu-shares 2048 centos:7 /bin/bash
'//對比CPU使用率,是1:2'

使用【–cpu-shares】,分配兩個(gè)容器使用CPU資源占用權(quán)重為1:2

  1. 默認(rèn)情況下,每個(gè)Docker容器的CPU份額都是1024,單獨(dú)一個(gè)容器的份額是沒有意義的,只有在同時(shí)運(yùn)行多個(gè)容器時(shí),容器CPU的加權(quán)效果才能體現(xiàn)出來
  2. 比如以上的兩個(gè)容器是1:2,在CPU進(jìn)行時(shí)間片分配時(shí),后者比前者多一倍的機(jī)會獲得CPU的時(shí)間片,但是分配的結(jié)果取決于當(dāng)時(shí)主機(jī)和其他容器的運(yùn)行狀態(tài)
  3. 實(shí)際上也無法保證該容器一定獲得相應(yīng)的CPU時(shí)間片,因?yàn)槿羰窃摰倪M(jìn)程一直是空閑的,那么cpu1就可以獲取比cpu2更多的CPU時(shí)間片
  4. 在極端情況下,例如主機(jī)上只運(yùn)行了一個(gè)容器,即使它的CPU份額較小,也是可以獨(dú)占整個(gè)主機(jī)的CPU資源的
  5. Cgroups只在容器分配的資源緊缺時(shí),即在需要對容器使用的資源進(jìn)行限制時(shí),才會生效,因此,無法根據(jù)某個(gè)容器的CPU份額來確定有多少CPU資源分給給它
  6. 即資源分配的結(jié)果取決于同時(shí)運(yùn)行的其他容器CPU分配和容器中進(jìn)程的運(yùn)行情況

Docker的資源配額

Docker的資源配額

4、限制CPU內(nèi)核使用

可以通過配置,使得某些程序獨(dú)享 CPU 內(nèi)核,以提高其處理速度

cat /sys/fs/cgroup/cpuset/docker/1da3b339530f1e256ff0206abb977659da494242b54c1fbeefc4b16ec0c49823/cpuset.cpus
docker run -itd --name test1 --cpuset-cpus 1 centos:7
docker exec -it test1 /bin/bash
yum -y install epel-release && yum -y install  stress
stress -c 2 &
//在宿主機(jī)中
top//查看各個(gè)核心的使用情況

Docker的資源配額

Docker的資源配額

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

'與操作系統(tǒng)類似,容器可使用的內(nèi)存包括兩部分:物理內(nèi)存和 Swap'
'-m 或 --memory:設(shè)置內(nèi)存的使用限額'
'--memory-swap:設(shè)置內(nèi)存+swap 的使用限額'

--
docker run -itd -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M
'//--vm 1:啟動1個(gè)內(nèi)存工作線程'
'//--vm-bytes 280M:每個(gè)線程分配280M內(nèi)存'

--
'相應(yīng)的Cgroup配置文件:/sys/fs/cgroup/memory/memory.limit_in_bytes'

docker run -itd -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M
'//如果讓工作線程分配的內(nèi)存超過300M,分配的內(nèi)存超過了限額,stress線程會報(bào)錯(cuò),容器退出'

--
'注意!一旦容器Cgroup使用的內(nèi)存超過了限制的容量,Linux內(nèi)核就會嘗試收回這些內(nèi)存'
'如果仍舊無法控制內(nèi)存使用在這個(gè)設(shè)置的范圍之內(nèi),就會殺死該進(jìn)程!'
docker run -itd --name test1 -m 200m centos:7 /bin/bash
docker stats

Docker的資源配額

Docker的資源配額

虛擬機(jī)沒配置swap分區(qū)所以無法對swap實(shí)現(xiàn)限制。

三、磁盤使用的限制

對讀寫進(jìn)行限制

bps:byte per second(每秒讀寫的字節(jié)數(shù))
iops:io per second(每秒IO的次數(shù))

--
1.限制某個(gè)程序?qū)懭氲腷ps數(shù)據(jù)量
docker run -d --device-write-bps /dev/sda:30M centos:7


2.限制讀取某個(gè)程序的bps數(shù)據(jù)量
docker run -d --device-read-bps /dev/sda:30M centos:7


3.限制讀取某個(gè)程序的iops次數(shù)
--device-read-iops


4.限制寫入某個(gè)程序的iops次數(shù)
--device-write-iops

對讀寫進(jìn)行權(quán)重進(jìn)行限制

  1. 默認(rèn)情況下,所有容器能平等地讀寫磁盤,可以通過設(shè)置–blkio-weight參數(shù)來改變?nèi)萜?block IO的優(yōu)先級。
  2. –blkio-weight 與–cpu-shares類似,設(shè)置的是相對權(quán)重值,默認(rèn)為500。

docker run -it --name test1 --blkio-weight 600 centos:1
cat /sys/fs/cgroup/blkio/blkio.weight

docker run -it --name test2 --blkio-weight 300 centos:1
cat /sys/fs/cgroup/blkio/blkio.weight

Docker的資源配額

Docker的資源配額

test1容器:
docker exec -it test1 /bin/bash
yum -y install epel-release && yum -y install stress
stress --hdd 2 --hdd-bytes 10G --backoff 2000000
//對磁盤開啟兩個(gè)io進(jìn)程,讀寫大小為10G ,新fork 出來的進(jìn)程 sleep 2000000 微秒再開始運(yùn)行。

test2容器:
docker exec -it test1 /bin/bash
yum -y install epel-release && yum -y install stress
stress --hdd 2 --hdd-bytes 10G --backoff 2000000
//對磁盤開啟兩個(gè)io進(jìn)程,讀寫大小為10G ,新fork 出來的進(jìn)程 sleep 2000000 微秒再開始運(yùn)行。

宿主機(jī):
docker stats    

秒再開始運(yùn)行。

test2容器:
docker exec -it test1 /bin/bash
yum -y install epel-release && yum -y install stress
stress --hdd 2 --hdd-bytes 10G --backoff 2000000
//對磁盤開啟兩個(gè)io進(jìn)程,讀寫大小為10G ,新fork 出來的進(jìn)程 sleep 2000000 微秒再開始運(yùn)行。

宿主機(jī):
docker stats文章來源地址http://www.zghlxwxcb.cn/news/detail-470772.html


![image-20220907193006629](https://img-blog.csdnimg.cn/img_convert/75e2ccafa89d4576e4c5f22de97f1be6.png)

到了這里,關(guān)于Docker的資源配額的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

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

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

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

    2024年02月16日
    瀏覽(29)
  • docker網(wǎng)路原理及cgroup硬件資源占用控制

    docker網(wǎng)絡(luò)模式有bridge、host、none、containe和自定義 1.host模式 相當(dāng)于Vmware中的橋接模式,與宿主機(jī)在同一個(gè)網(wǎng)絡(luò)中,但沒有獨(dú)立IP地址。 Docker使用了Linux的Namespaces技術(shù)來進(jìn)行資源隔離,如PID Namespace隔離進(jìn)程,Mount Namespace隔離文件系統(tǒng),Network Namespace隔離網(wǎng)絡(luò)等。 一個(gè)Network N

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

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

    2024年02月06日
    瀏覽(21)
  • Linux Cgroups進(jìn)程資源限制管理 之 資源子系統(tǒng)限制/控制、Docker資源隔離與限制原理解讀

    Linux cgroups(控制組)最初由Google工程師Paul Menage在2006年提出,并在Linux內(nèi)核的2.6.24版本中首次引入。自那時(shí)以來,cgroups一直是Linux內(nèi)核的一部分,并在容器化技術(shù)等領(lǐng)域中發(fā)揮著至關(guān)重要的作用。隨著時(shí)間的推移,cgroups功能不斷得到改進(jìn)和擴(kuò)展,以滿足對資源管理和隔離性能

    2024年02月21日
    瀏覽(20)
  • 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)用于不同層次的組,可以實(shí)現(xiàn)對系統(tǒng)資源的統(tǒng)一管理和限制。 cgroup 提供了一套 API,用于創(chuàng)建

    2024年02月16日
    瀏覽(25)
  • pod的requests、limits解讀、LimitRange資源配額、Qos服務(wù)質(zhì)量等級、資源配額管理 Resource Quotas

    環(huán)境: k8s-v1.22.17 docker-20.10.9 centos-7.9 CPU、GPU、Memory等都是計(jì)算資源,所謂計(jì)算資源,就是可計(jì)量的、能被申請的、能被分配使用的資源。 CPU在容器技術(shù)中屬于可壓縮資源,因此,pod對CPU的使用超過其cpu.limit限制一般不會導(dǎo)致容器被系統(tǒng)\\\"殺死\\\",而Memory屬于不可壓縮資源,當(dāng)容

    2023年04月27日
    瀏覽(16)
  • k8s進(jìn)階3——資源配額、資源限制

    k8s進(jìn)階3——資源配額、資源限制

    為什么會有資源配額管理? 可以提高集群穩(wěn)定性,確保指定的資源對象在任何時(shí)候都不會超量占用系統(tǒng)物理資源,避免業(yè)務(wù)進(jìn)程在設(shè)計(jì)或?qū)崿F(xiàn)上的缺陷導(dǎo)致整個(gè)系統(tǒng)運(yùn)行紊亂甚至意外宕機(jī)。 資源配額管理維度: 容器級別,定義每個(gè)Pod上資源配額相關(guān)的參數(shù),比如CPU/Memory、

    2024年02月10日
    瀏覽(27)
  • k8s資源配額限制

    為什么會有資源配額管理? 資源配額管理維度解釋? 資源配額參數(shù)有什么? 計(jì)算CPU CPU的Requests和Limits是通過CPU數(shù)(cpus)來度量的。 CPU的資源值是絕對值,而不是相對值,比如0.1CPU在單核或多核機(jī)器上是一樣的,都嚴(yán)格等于0.1 CPU core。 計(jì)算Memory 內(nèi)存的Requests和Limits計(jì)量單位

    2024年02月13日
    瀏覽(25)
  • K8S(五)—命名空間與資源配額

    K8S(五)—命名空間與資源配額

    Kubernetes(K8s)的命名空間(Namespace)是用于在集群中對資源進(jìn)行邏輯隔離和分類的一種機(jī)制。它可以將集群內(nèi)的資源劃分為不同的組,并且每個(gè)命名空間內(nèi)的資源都有一個(gè)唯一的名稱。命名空間可以幫助團(tuán)隊(duì)將不同的項(xiàng)目、環(huán)境或應(yīng)用程序從彼此中隔離開來,以及更好地管理

    2024年02月04日
    瀏覽(67)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包