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

docker資源控制管理Cgroup的實(shí)現(xiàn)

 更新時(shí)間:2022年07月25日 15:20:23   作者:H unter  
本文主要介紹了docker資源控制管理Cgroup的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

1.docker 使用cgroup控制資源,K8S 里面也有l(wèi)imit(使用上限)

2.docker通過cgroup來控制容器使用的資源配額,包括CPU、內(nèi)存、磁盤三大方面,基本覆蓋了常見的資源配額和使用量控制。

3.Cgroup 是 Control group 的簡(jiǎn)寫,是 Linux 內(nèi)核提供的一種限制所使用物理資源的機(jī)制,包括 CPU、內(nèi)存 和 IO 這三大方面,基本覆蓋了常見的資源配額和使用量控制

4.cgroup是一種資源控制手段,也是容器隔離的6個(gè)名稱空間的一種實(shí)現(xiàn)手段

一、對(duì)CPU使用率的控制

1、 使用stress工具測(cè)試CPU和內(nèi)存使用情況

mkdir /opt/stress
vim /opt/stress/Dockerfile
 
——————————————————————————————————————————————————————————————————————————————
 
FROM centos:7
RUN yum -y install wget
RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo		#epel源,可以使用擴(kuò)展軟件包(stress)
RUN yum -y install stress		#可以指定產(chǎn)生線程,使用循環(huán)語句,測(cè)試用'
 
——————————————————————————————————————————————————————————————————————————————
cd /opt/stress/
systemctl restart docker.service		#建議重啟docker,不然下面的操作可能會(huì)失敗,卡在wget
docker build -t centos:stress .		#生成鏡像
...
...
Successfully built 7e69cc4d1b07
Successfully tagged centos:stress
 
 
docker images 
 
#以下可以使用該鏡像為基礎(chǔ)產(chǎn)生的容器進(jìn)行測(cè)試:'

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

Docker通過--cpu-shares指定CPU份額,默認(rèn)值為1024,值為1024的倍數(shù)。
資源分配結(jié)果取決于同時(shí)運(yùn)行的其他容器的CPU分配和容器中進(jìn)程運(yùn)行情況。
cgroups只在容器分配的資源緊缺時(shí),即在需要對(duì)容器使用的資源進(jìn)行限制時(shí),才會(huì)生效。因此,無法單純根據(jù)某個(gè)容器的CPU份額來確定有多少CPU資源分配給它。

示例:創(chuàng)建兩個(gè)容器為cpu512和cpu1024, 若只有這兩個(gè)容器,設(shè)置容器的權(quán)重,使得cpu512和cpu1024的CPU資源占比為1/3和2/3。

docker run -itd --name cpu512 --cpu-shares 512 centos:stress stress -c 10    #-c 10表示產(chǎn)生10個(gè)子線程,測(cè)試用
docker run -itd --name cpu1024 --cpu-shares 1024 centos:stress stress -c 10
 
#查看容器的資源使用狀態(tài)(動(dòng)態(tài)更新)
docker stats
 
資源是用cadvisor收集的

3、限制 CPU 使用周期速率

cat /sys/fs/cgroup/cpu/docker/[容器ID]/cpu.cfs_quota_us
#-1,表示不做控制
 
#例如:容器進(jìn)程需要每Ⅰ秒使用單個(gè)cPU的 0.2秒時(shí)間,可以將 --cpu-period 設(shè)置為1000000(即1秒),cpu-quota 設(shè)置為200000 0.2秒)。
#當(dāng)然,在多核情況下,如果允許容器進(jìn)程完全占用兩個(gè)CPU,則可以將cpu-period 設(shè)置為 100000(即 0.1秒),cpu-quota 設(shè)置為200000 (0.2秒)。
docker run -itd --name test01 --cpu-period 100000 --cpu-quota 200000 centos:stress 
 
#也可以直接去修改文件vim /sys/fs/cgroup/cpu/docker/[容器ID]/cpu.cfs_quota_us
 
#法一:進(jìn)入指定容器查看
docker exec -it test01 bash
cd /sys/fs/cgroup/cpu
cat cpu.cfs_period_us 
cat cpu.cfs_quota_us
 
#法二:docker inspect 容器ID
docker inspect 6ccc4ddcb6ad

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

  • 可以通過配置,使得某些程序獨(dú)享 CPU 內(nèi)核,以提高其處理速度
  • 對(duì)多核CPU的服務(wù)器,Docker還可以控制容器**運(yùn)行使用哪些CPU內(nèi)核**,即使用–cpuset-cpus參數(shù)。這對(duì)具有多CPU的服務(wù)器尤其有用,可以對(duì)需要高性能計(jì)算的容器進(jìn)行性能最優(yōu)的配置
docker run -itd --name cpu1 --cpuset-cpus 0-1 centos:stress
#執(zhí)行以上命令需要宿主機(jī)為雙核,表示創(chuàng)建的容器只能用0、1兩個(gè)內(nèi)核。最終生成的 cgroup的 CPU內(nèi)核配置如下
 
cat /sys/fs/cgroup/cpuset/docker/[容器ID]/cpuset.cpus
 
docker exec -it cpu1 /bin/bash -c "stress -c 10"

二、對(duì)內(nèi)存限額

docker run -itd -m 200M --memory-swap 300M --name test01 centos:stress
docker stats

三、對(duì)-Block IO的限制

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

在下面的例子中,容器A讀寫磁盤的帶寬是容器B的兩倍。

#容器A
docker run -it --name container_A --blkio-weight 600 centos:stress
cat /sys/fs/cgroup/blkio/blkio.weight
#容器B
docker run -it --name container_B --blkio-weight 300 centos:stress
cat /sys/fs/cgroup/blkio/blkio.weight

四、bps 和iops 的限制

bps 是byte per second,每秒讀寫的數(shù)據(jù)量。
iops是io per second,每秒IO的次數(shù)。
可通過以下參數(shù)控制容器的bps 和iops:
–device-read-bps,限制讀菜個(gè)設(shè)備的bps。
–device-write-bps,限制寫某個(gè)設(shè)備的bps。
–device-read-iops,限制讀某個(gè)設(shè)備的iops。
–device-write-iops,限制寫某個(gè)設(shè)備的iops

#下面的示例是限制容器寫/dev/sda 的速率為5MB/s
docker run -it --device-write-bps /dev/sda:5MB centos:stress 
dd if=/dev/zero of=test bs=1M count=100 oflag=direct
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 20.0018 s, 5.2 MB/s
 
#通過dd命令測(cè)試在容器中寫磁盤的速度。因?yàn)槿萜鞯奈募到y(tǒng)是在 host /dev/sda 上的。
#在容器中寫文件相當(dāng)子對(duì)host /dev/sda進(jìn)行寫操作。另外,oflag=direct指定用direct IO 方式寫文件,這樣--device-write-bps才能生效。
#結(jié)果表明限速 5MB/s左右。作為對(duì)比測(cè)試,如果不限速,結(jié)果如下。
docker run -it centos:stress 
dd if=/dev/zero of=test bs=1M count=100 oflag=direct
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0470107 s, 2.2 GB/s

五、總結(jié)

Cgroups如何工作的?

CPU —>VCPU–>以進(jìn)程的方式體現(xiàn)在workstation環(huán)境(docker環(huán)境中) —》docker表現(xiàn)形式是容器,–>Vcpu以進(jìn)程的方式控制容器–》容器中的應(yīng)用需要的是服務(wù)進(jìn)程支持–》宿主機(jī)內(nèi)核中cpu可以被cgroup管理(通過分配資源手段)–》linux內(nèi)核中的cgroup可以直接控制VCPU的資源分配,而VCPU在workstation中是以進(jìn)程的方式管理docker容器的,所以,也可以認(rèn)為Cgroups在直接/間接管理docker容器中的應(yīng)用。

cgroup對(duì)cpu限制小結(jié)

Cgroups 控制的是內(nèi)核資源—》間接控制vw中vcpu的資源—》控制著vwM中進(jìn)程資源—》docker容器的資源—》docker容器內(nèi)應(yīng)用的資源

控制的主體包括:CPU、內(nèi)存、I/O

主要介紹的是CPU資源的控制而CPU資源控制的方式主要有:

①cpu-shares權(quán)重指的是多個(gè)容器使用同一個(gè)CPU的情況下,被分配到CPU資源的機(jī)會(huì)占比

②cpu-period周期指的是,CPU在給于當(dāng)前管理、控制的容器分配資源時(shí),CPU的分配周期,默認(rèn)是1s,此項(xiàng)配置,可以在運(yùn)行時(shí)直接指定

③cpuset-cpus指定容器,僅能使用指定的CPU,按照CPU的下標(biāo)來表示

cgroup對(duì)內(nèi)存的限制小結(jié)

Cgroups 對(duì)于內(nèi)存的限制,主要體現(xiàn)在以下兩個(gè)部分:

①內(nèi)存使用上限(硬限制)

②內(nèi)存+swap使用上限(硬限制)

類比于K8s中的資源限制手段,也是使用的cgroups的技術(shù),體現(xiàn)為limit

respones:
  request:    #分配的初始資源
    cpu:100m
    memory:100m
  limits:
    cpu:300m
    memory:200m

 資源限制的主要類型

  • CPU權(quán)重shares、 quota、 cpuset
  • 磁盤BPS、 TPS限制, 指定使用哪個(gè)磁盤、磁盤分區(qū)
  • 內(nèi)存 -m - swap 內(nèi)存、交換分區(qū)

大部分做的是上限的限制

資源限制的幾種方式

build構(gòu)建鏡像時(shí),可以指定該鏡像的資源限制
run將鏡像跑為容器的時(shí)候,可以指定容器的資源限制
容器啟動(dòng)之后可以在宿主機(jī)對(duì)應(yīng)容器的目錄下,修改資源限制,然后重載
/sys/ fs/cgroup/* (cpu、b1k、 mem) /docker/容 器ID/ ——>修改對(duì)應(yīng)的資源限制文件參數(shù)就可以

資源限制的狀態(tài)查詢

docker inspect 鏡像ID/容器ID
直接查看宿主機(jī)對(duì)應(yīng)容器ID資源限制的文件
cgroup資源docker 原理之一, namespaces 6個(gè)名稱空間

像時(shí),可以指定該鏡像的資源限制

run將鏡像跑為容器的時(shí)候,可以指定容器的資源限制
容器啟動(dòng)之后可以在宿主機(jī)對(duì)應(yīng)容器的目錄下,修改資源限制,然后重載
/sys/ fs/cgroup/* (cpu、b1k、 mem) /docker/容 器ID/ ——>修改對(duì)應(yīng)的資源限制文件參數(shù)就可以

到此這篇關(guān)于docker資源控制管理Cgroup的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)docker Cgroup內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 教你如何獲取Harbor的帶tag的鏡像清單

    教你如何獲取Harbor的帶tag的鏡像清單

    這篇文章主要介紹了如何利用Java語言實(shí)現(xiàn)獲取harbor中全部鏡像的帶tag的清單,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-04-04
  • Docker容器資源控制CGroup的使用

    Docker容器資源控制CGroup的使用

    本文主要介紹了Docker容器資源控制CGroup的使用,用于限制CPU、內(nèi)存、磁盤I/O等資源,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • Docker時(shí)間不一致,時(shí)區(qū)設(shè)置方式

    Docker時(shí)間不一致,時(shí)區(qū)設(shè)置方式

    這篇文章主要介紹了Docker時(shí)間不一致,時(shí)區(qū)設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Docker自動(dòng)化構(gòu)建Automated Build實(shí)現(xiàn)過程圖解

    Docker自動(dòng)化構(gòu)建Automated Build實(shí)現(xiàn)過程圖解

    這篇文章主要介紹了Docker自動(dòng)化構(gòu)建Automated Build實(shí)現(xiàn)過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • kali下對(duì)Docker的詳細(xì)安裝教程

    kali下對(duì)Docker的詳細(xì)安裝教程

    這篇文章主要介紹了kali下對(duì)Docker的詳細(xì)安裝,Docker是滲透測(cè)試中必學(xué)不可的一個(gè)容器工具,在其中,我們能夠快速創(chuàng)建、運(yùn)行、測(cè)試以及部署應(yīng)用程序,對(duì)kali安裝docker相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-05-05
  • docker簡(jiǎn)單安裝部署mysql并配置遠(yuǎn)程連接

    docker簡(jiǎn)單安裝部署mysql并配置遠(yuǎn)程連接

    使用docker部署mysql,可以省去mysql的安裝配置過程,下面這篇文章主要給大家介紹了關(guān)于docker簡(jiǎn)單安裝部署mysql并配置遠(yuǎn)程連接的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • 教你使用如何docker部署淘寶rap2服務(wù)

    教你使用如何docker部署淘寶rap2服務(wù)

    這篇文章主要介紹了教你使用如何docker部署淘寶rap2服務(wù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • 通過Dockerfile構(gòu)建Docker鏡像的方法步驟

    通過Dockerfile構(gòu)建Docker鏡像的方法步驟

    這篇文章主要介紹了通過Dockerfile構(gòu)建Docker鏡像的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Docker安裝部署neo4j的實(shí)戰(zhàn)過程

    Docker安裝部署neo4j的實(shí)戰(zhàn)過程

    Docker是一種容器化技術(shù),可以在Linux系統(tǒng)上部署應(yīng)用程序,下面這篇文章主要給大家介紹了關(guān)于Docker安裝部署neo4j的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • docker安裝RocketMQ的實(shí)現(xiàn)步驟

    docker安裝RocketMQ的實(shí)現(xiàn)步驟

    本文主要介紹了docker安裝RocketMQ的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評(píng)論