Docker资源控制管理

目录

一.CPU 资源控制

1.定义

2.cgroups四大功能

(1)资源限制:可以对任务使用的资源总额进行限制

(2)优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级

(3)资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等

(4)任务控制:cgroup可以对任务执行挂起、恢复等操作

二.对CPU使用率限制

1.使用stress工具测试CPU 和内存使用情况

2.设置CPU资源占用比(设置多个容器时生效)

3.限制CPU使用周期速率

4.限制CPU内核使用

二.对内存限额

三.对磁盘IO配额控制(blkio)的限制

四.扩展

1.清除日志

2.当日志占满之后如何处理


一.CPU 资源控制

1.定义

cgroups,是一个非常强大的linux内核工具,他不仅可以限制被 namespace 隔离起来的资源, 还可以为资源设置权重、计算使用量、操控进程启停等等。 所以 cgroups(Control groups)实现了对资源的配额和度量。

2.cgroups四大功能

(1)资源限制:可以对任务使用的资源总额进行限制
(2)优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级
(3)资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等
(4)任务控制:cgroup可以对任务执行挂起、恢复等操作

二.对CPU使用率限制

1.使用stress工具测试CPU 和内存使用情况

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源,可以使用扩展软件包(stress)
RUN yum -y install stress		#可以指定产生线程,使用循环语句,测试用'
——————————————————————————————————————————————————————————————————————————————
cd /opt/stress/
systemctl restart docker.service		#建议重启docker,不然下面的操作可能会失败,卡在wget
docker build -t centos:stress .		#生成镜像
...
...
Successfully built 7e69cc4d1b07
Successfully tagged crntos:stress
docker images 
#以下可以使用该镜像为基础产生的容器进行测试:'

2.设置CPU资源占用比(设置多个容器时生效)

docker run -itd --name cpu512 --cpu-shares 512 centos:stress stress -c 10   
#-c 10表示产生10个子线程,测试用
docker run -itd --name cpu1024 --cpu-shares 1024 centos:stress stress -c 10
 
#查看容器的资源使用状态(动态更新)
docker stats
 
资源是用cadvisor收集的

3.限制CPU使用周期速率

cat /sys/fs/cgroup/cpu/docker/[容器ID]/cpu.cfs_quota_us
#-1,表示不做控制
 
#例如:容器进程需要每Ⅰ秒使用单个cPU的 0.2秒时间,可以将 --cpu-period 设置为1000000(即1秒),cpu-quota 设置为200000 0.2秒)。
#当然,在多核情况下,如果允许容器进程完全占用两个CPU,则可以将cpu-period 设置为 100000(即 0.1秒),cpu-quota 设置为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
 
#法一:进入指定容器查看
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内核使用

docker run -itd --name cpu1 --cpuset-cpus 0-1 centos:stress
#执行以上命令需要宿主机为双核,表示创建的容器只能用0、1两个内核。最终生成的 cgroup的 CPU内核配置如下
 
cat /sys/fs/cgroup/cpuset/docker/[容器ID]/cpuset.cpus
 
docker exec -it cpu1 /bin/bash -c "stress -c 10"

二.对内存限额

  • 与操作系统类似,容器可使用的内存包括两部分:物理内存和 Swap

  • -m 或 --memory:设置内存的使用限额

  • –memory-swap:设置内存+swap 的使用限额

docker run -itd -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M
#--vm 1:启动1个内存工作线程
#--vm-bytes 280M:每个线程分配280M内存
 
#默认情况下,容器可以使用主机上的所有空闲内存。
#与 CPU 的cgroups 配置类似,Docker会自动为容器在目录/sys/fs/cgroup/memory/docker/<容器完整的 ID>/memory.limit_in_bytes
 
docker run -itd -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M
#如果让工作线程分配的内存超过300M,分配的内存超过了限额,stress线程会报错,容器退出
 
'注意!一旦容器Cgroup使用的内存超过了限制的容量,Linux内核就会尝试收回这些内存'
'如果仍旧无法控制内存使用在这个设置的范围之内,就会杀死该进程!

三.对磁盘IO配额控制(blkio)的限制

--device-read-bps:限制某个设备上的读速度bps(数据量),单位可以是kb、mb(M)或者gb。
例:docker run -itd --name test9 --device-read-bps /dev/sda:1M  centos:7 /bin/bash

--device-write-bps : 限制某个设备上的写速度bps(数据量),单位可以是kb、mb(M)或者gb。
例:docker run -itd --name test10 --device-write-bps /dev/sda:1mb centos:7 /bin/bash

--device-read-iops :限制读某个设备的iops(次数)
 
--device-write-iops :限制写入某个设备的iops(次数)

#创建容器,并限制写速度
docker run -it --name test10 --device-write-bps /dev/sda:1MB centos:7 /bin/bash

#通过dd来验证写速度
dd if=/dev/zero of=test.out bs=1M count=10 oflag=direct				#添加oflag参数以规避掉文件系统cache
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 10.0025 s, 1.0 MB/s


#清理docker占用的磁盘空间
docker system prune -a			#可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络

四.扩展

故障:由于docker容器故障导致大量日志集满,会造成磁盘空间满

解决方案

1.清除日志

#!/bin/bash
logs=$ (find /var/lib/docker/containers/ -name *-json.log*)
for log in $logs
do
cat /dev/null > $log
done

2.当日志占满之后如何处理

###设置docker日志文件数量及每个日志大小
 vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://f613ce8f.m.daocloud.io"],
"log-driver": "json-file",   #我的一日志格式
"log-opts": { "max-size" : "500m", "max-file" : "3"}   日志的参数最大500M   我最大容器中有三个日志文件 每个日志文件大小是500M
}

systemctl daemon-reload
  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值