dayi的大键盘
dayi的大键盘

云与虚拟化_虚拟化和容器——6 Docker资源控制

云与虚拟化_虚拟化和容器——6 Docker资源控制

基于cgroups

https://cmd.dayi.ink/uploads/upload_d0030d96fd9375464c515ad7df6930ba.png
https://tech.meituan.com/2015/03/31/cgroups.html

1. 对CPU的控制

步骤1:限制CPU命令速率。

(1)利用centos:7镜像分别生成容器名为centos1和centos2的容器,其中centos1容器不限制cpu的使用率,centos2容器将cpu的使用率限制为20%。

docker pull centos:7
docker run -dit --name centos1 centos:7 /bin/bash
# 限制CPU百分之20000
docker run -dit --name centos2 --cpu-quota 20000 centos:7 /bin/bash

100000微秒 020000只能使用百分之20

--cpu-quota 20000: –cpu-quota定义了容器每–cpu-period(默认为100000微秒,即100ms)可以获得的最大CPU时间,单位为微秒。–cpu-quota 20000意味着在默认的100ms周期中,容器最多只能使用20ms的CPU时间。

https://cmd.dayi.ink/uploads/upload_5b0dc94d170f5d3a0ebb33410706c0e5.png

(2)通过查看对应的cgroup配置文件 /sys/fs/cgroup/cpu/docker/容器编号/cpu.cfs_quota_us来查看各容器cpu的使用率。

#这里是你的容器名
cat /sys/fs/cgroup/cpu/docker/86ff33795a71f86236011598c9cbaea55c4a319bd142e6ffb845e055d4db4fd9/cpu.cfs_quota_us
https://cmd.dayi.ink/uploads/upload_c19ad4c0b64d9209d8e9141be8bd2637.png

没限制的(-1

https://cmd.dayi.ink/uploads/upload_8636ecbdfd14dfd12fa53ab45c10ccfe.png

(3)如需修改对应容器的cpu使用率,可以直接修改cgroup配置文件 /sys/fs/cgroup/cpu/docker/容器编号/cpu.cfs_quota_us的值来实现。

修改占用为百分之40

echo 40000 >> /sys/fs/cgroup/cpu/docker/9b19d5677dd03ad0f0f4bd3eee7659b7845fb34e78e42e819f21b6338fdc6342/cpu.cfs_quota_us

cat /sys/fs/cgroup/cpu/docker/9b19d5677dd03ad0f0f4bd3eee7659b7845fb34e78e42e819f21b6338fdc6342/cpu.cfs_quota_us

这里虽然是追加写,但是并不会追加,linux都是文件,估计是直接内核交互了。?

https://cmd.dayi.ink/uploads/upload_de708e34a990a2e53c9db460f8b12e57.png
https://cmd.dayi.ink/uploads/upload_b08d5e8da7c9cbccd6fb452ba4941142.png

删掉这俩实验容器

docker rm -f centos1 centos2
https://cmd.dayi.ink/uploads/upload_33271a685e93ca128ca388c1472f6e2f.png

步骤2:多任务按比例分享CPU

(1)利用centos:7镜像创建centos3和centos4容器。设置容器权重,使用centos3和centos4的cpu占比为33.3%和66.7% 。

docker run -dit --name=centos3 --cpu-shares 512 centos:7 /bin/bash
docker run -dit --name=centos4 --cpu-shares 1024 centos:7 /bin/bash
https://cmd.dayi.ink/uploads/upload_fd45d357c1c7eee1e8d67cdafc4b9acf.png
docker ps -a
https://cmd.dayi.ink/uploads/upload_d12be671529f540363ab80346290c58c.png

(2)打开另一个终端,使用docker stats命令查看状态。

docker stats
https://cmd.dayi.ink/uploads/upload_286eba89ad279dd3671801c8d792d32f.png

(3)分别打开两个终端,利用两个终端分别进行centos1和centos2容器,安装压力测试包stress。(4)分别在两个容器内启用4个线程。

容器3

#进入容器
docker exec -it centos3 /bin/bash
yum -y install epel-release
yum -y install stress
stress -c 4

容器4

docker exec -it centos4 /bin/bash
yum -y install epel-release
yum -y install stress
stress -c 4
https://cmd.dayi.ink/uploads/upload_c21e0d8d64e4543dced80d9c21a6ef22.png
https://cmd.dayi.ink/uploads/upload_e2c8a1ff2889e0e979037b5a832fdd7a.png

(5)再次利用docker stats命令查看。

https://cmd.dayi.ink/uploads/upload_33970d8a9bc3f3608b436d95b9f88e75.png
https://cmd.dayi.ink/uploads/upload_dc3db8ee87197e63d7ea8aa17677208b.png

还是挺准的 132/(66+132)=0.666666666667

步骤3: 查看cpu内核使用

通过查看Cgroup配置文件为/sys/fs/cgroup/cpuset/docker/容器编号/cpuset.cpus。

1.CPU限制

https://cmd.dayi.ink/uploads/upload_a9681e49d0806462886d0adf6741a52e.png

这个没有文件诶。

应该是默认没有启用

docker run -dit --cpuset-cpus="0,1" --name my_container nginx

这样就有啦

https://cmd.dayi.ink/uploads/upload_0c7d796d76ab3318d423db1839c44c68.png
[root@node-a cpuset]# cd docker/8aae2d1e6621d076570cb4e9fc10d099a46475f25add3440848ec1bd243a1f16/
[root@node-a 8aae2d1e6621d076570cb4e9fc10d099a46475f25add3440848ec1bd243a1f16]# cat cpuset.cpus
0-1
https://cmd.dayi.ink/uploads/upload_b8258f3e873b42d2bdd3b29f1375d406.png

删除容器

docker rm -f my_container

2. 对内存使用的限制

docker run -dit --name=centos5 -m 512m centos:7 /bin/bash
docker run -dit --name=centos6 centos:7 /bin/bash
https://cmd.dayi.ink/uploads/upload_2d0390190e6920089c913b26595289e9.png

步骤2:打开一个终端,使用docker stats命令查看状态

docker stats

CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT   MEM %     NET I/O     BLOCK I/O     PIDS
8df1885fca97   centos6   0.00%     400KiB / 1.777GiB   0.02%     656B / 0B   0B / 0B       1
501410e22049   centos5   0.00%     1.965MiB / 512MiB   0.38%     656B / 0B   9.61MB / 0B   1
https://cmd.dayi.ink/uploads/upload_a65d2ec2fd3134081d18d6a7b4e15e45.png

步骤3:查看容器对应的Cgroup配置文件可查看容器内存限制。

cat /sys/fs/cgroup/memory/docker/501410e22049929b244235423c19239b50cc61a082834dba85cb18c59e2f7470/memory.limit_in_bytes
https://cmd.dayi.ink/uploads/upload_bf883a94c35e80ef67fba012eba054a5.png

536870912 // 536870912=512×1024×1024  

没有标签
首页      未分类      云与虚拟化_虚拟化和容器——6 Docker资源控制

发表回复

textsms
account_circle
email

dayi的大键盘

云与虚拟化_虚拟化和容器——6 Docker资源控制
# 云与虚拟化_虚拟化和容器——6 Docker资源控制 基于cgroups ![](https://cmd.dayi.ink/uploads/upload_d0030d96fd9375464c515ad7df6930ba.png) ## 1. 对CPU的控制 ### 步骤1:…
扫描二维码继续阅读
2023-11-23