docker的资源控制

docker使用linux自带的功能cgroup

control grouos是linux内核系统提供的一种可以限制,纪录,隔离进程组所使用的物理资源的机制

docker借助这个机制,来实现资源的控制

cgroup本身是提供讲进程进行分组化管理的功能和接口的基础结构,分配控制的机制来实现资源控制

host 容器和宿主机共用一个网络命名空间

container 容器和容器之间共用一个网络命令空间,其他的资源依然是隔离的

如何对CPU资源进行限制

1、设置CPU使用率上限

linux通过CFS(Completely Fair SCheduler 完全公平调度器),来调度各个进程对CPU的使用,CFS的调度100ms ,我们也可以自定义容器的调度周期,已经在这个周期时间之内各个容器能够使用CPU的调度时间

复制代码
进入容器CPU的配置
cd /sys/fs/cgroup/cpu/docker/686f75b621104e6e2b433aaef2cc106eddf3e2abfa99ae055720c98d1ac2615f

设置容器调度cpu的周期
--cpu-period

设置在每个周期内,容器可以使用CPU的时间
--cpu-quota

CFS调度周期的长度,微秒,在每个周期内,容器可以使用指定比例的cpu时间,默认情况都是100毫秒,CFS调度器,100毫秒就是自定义了 一个周期,在这个周期内,调度任务(容器)的基本时间单位

cat cpu.cfs_period_us
100毫秒
如果配置是-1,那么容器在使用宿主机CPU的时间不做限制
cat cpu.cfs_quota_us
-1

cpu.cfs_quota_us 调度器请求之后,根据配额,内核分配给容器使用CPU的时间
复制代码
进行CPU压力测试
docker exec -it test1 bash
yum -y install vim
cd /opt
创建一个脚本

vim cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done

赋权
chmod +x cpu.sh
./cpu.sh
top查看
设置50%的比例分配CPU使用时间上限
复制代码
方式一:

可以创建一个容器,分配CPU使用资源
docker run -itd --name test2 --cpu-quota 50000 centos:7 /bin/bash

方式二:
在原有的容器中,进行修改容器cpu配置分配资源
cd /sys/fs/cgroup/cpu/docker/3ed82355f81151c4568aaa6e7bc60ba6984201c119125360924bf7dfd6eaa42b/
echo 50000 > cpu.cfs_quota_us


进入容器中
写一个脚本并执行
vim /cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done

chmod +x cpu.sh
./cpu.sh

top
2、设置CPU资源占用比(设置多个容器时才有效)
复制代码
需要多个容器才能生效

--cpu-shares 指定容器占用cpu的份额,模式权重。设置的值只能是1024的倍数

--cpu-shares 是给每个容器使用CPU设置了相对的权重,权重高的,可以使用CPU的资源更多,但是,如果只有一个运行,即便设置了权重,但是没有其他更高的权重的容器来占用资源

docker  run -itd --name test3  --cpu-shares 512 centos:7 /bin/bash

docker exec -it  test3 bash

yum -y install epel-rele
yum -y insatll stress
创建4个终端
stress -c 4
查看容器运行状态(动态更新)
docker stats

docker  run -itd --name test4  --cpu-shares 1024 centos:7 /bin/bash

docker exec -it test4 bash
yum -y install epel-rele
yum -y insatll stress
docker stats

stress -c 4
查看容器运行状态(动态更新)
docker stats
3、设置容器绑定指定的CPU

容器只能使用指定的cpu内核

复制代码
docker run -itd --name test5 --cpuset-cpus 1 centos:7 /bin/bash

docker exec -it test5 bash

yum -y install epel-release

yum -y install stress 

stress -c 4
退出容器,执行 top 命令再按 1 查看CPU使用情况。
如何限制容器对内存的限制
复制代码
docker run -itd --name test6 -m 512m centos:7 /bin/bash
docker stats
限制使用swap

想要限制容器使用swap ,必须和限制内存一起使用

复制代码
docker run -itd --name test7 -m 512m --memory-swap=1g centos:7 /bin/bash
正常情况下,--memory-swap 的值包含容器可用内存和可用 swap。
所以 -m 512m --memory-swap=1g 的含义为:容器可以使用 512M 的物理内存,
并且可以使用 700M(1G - 300)的 swap。

如果 --memory-swap 设置为 0 或者 不设置,则容器可以使用的 swap 大小为 -m 值的两倍。
如果 --memory-swap 的值和 -m 值相同,则容器不能使用 swap。
如果 --memory-swap 值为 -1,它表示容器程序使用的内存受限,
而可以使用的 swap 空间使用不受限制(宿主机有多少 swap 容器就可以使用多少)。
对磁盘IO配额控制(blkio)的限制
复制代码
读
docker run -itd --name test7 --device-read-bps /dev/sda:1M centos:7 /bin/bash
写
docker run -itd --name test8 --device-write-bps /dev/sda:1mb centos:7 /bin/bash

查看写线程 
docker exec -it test8 bash
cd /opt
dd if=/dev/zero of=123.txt bs=1M count=10

ofag=direct
在使用dd获取空字符集是从问价系统的缓存当中输入,速度是比较快的,禁用文件系统缓存,直接把数据写入磁盘,可以更新,真实的测试设备的性能,模拟直接写入物理设备的情况
dd if=/dev/zero of=123.txt bs=1M count=10 ofag=direct

限制容器读取的次数
docker run -itd --name test10 --device-read-iops /dev/sda:100 centos:7 /bin/bash
限制读取操作,每秒是100次

限制容器写入的次数
docker run -itd --name test11 --device-write-iops /dev/sda:50 centos:7 /bin/bash
限制写入的操作,每秒是50次
清除容器占用磁盘的空间
复制代码
docker system prune -a
删除已经停止的容器
删除所有未被使用的网桥设备
删除未被使用的镜像
删除创建容器时的缓存,以及无用的数据卷
相关推荐
li3714908901 小时前
nginx报400bad request 请求头过大异常处理
java·运维·nginx
久曲健的测试窝1 小时前
Jenkins Share Library教程 —— 开发入门
运维·servlet·jenkins
三坛海会大神5551 小时前
k8s(六)Pod的资源控制器
云原生·容器·kubernetes
缘的猿2 小时前
Docker 与 K8s 网络模型全解析
docker·容器·kubernetes
游戏开发爱好者82 小时前
FTP 抓包分析实战,命令、被动主动模式要点、FTPS 与 SFTP 区别及真机取证流程
运维·服务器·网络·ios·小程序·uni-app·iphone
默 语2 小时前
AI驱动软件测试全流程自动化:从理论到实践的深度探索
运维·人工智能·驱动开发·ai·自动化·ai技术·测试全流程
运维栈记3 小时前
使用Grafana监控K8S中的异常Pod
docker·kubernetes·grafana
荣光波比3 小时前
K8S(十二)—— Kubernetes安全机制深度解析与实践:从认证到RBAC授权
安全·容器·kubernetes
liming4953 小时前
k8s 安装 kuboardV3 报错
云原生·容器·kubernetes
望获linux3 小时前
【实时Linux实战系列】实时 Linux 的自动化基准测试框架
java·大数据·linux·运维·网络·elasticsearch·搜索引擎