Docker 管理之 --- 资源限制

目录

前言

一、CPU 资源控制

1、cgroup 介绍

2、cgroup 的功能

3、Cgroup子系统

4、CPU使用率控制

5、限制cpu时间周期

5.1  方式1

5.2  方式2

6、设置容器的权重

7、限制容器使用的cpu(指定使用第2第4个)

8、CPU配额控制参数的混合使用

二、内存资源限制

三、磁盘 IO 配额控制

1、创建容器并限制写速度

2、创建容器并限制写次数

3、清理 docker 占用的磁盘空间

四、构建镜像(docker build)时指定资源限制

总结


前言

在使用 docker 运行容器时,默认的情况下,docker没有对容器进行硬件资源的限制,当一台主机上运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的 CPU、内存和磁盘资源。如果不对容器使用的资源进行限制,那么容器之间会互相影响,小的来说会导致容器资源使用不公平;大的来说,可能会导致主机和集群资源耗尽,服务完全不可用。

一、CPU 资源控制

1、cgroup 介绍

 Cgroup 是 Control group 的简称,是 Linux 内核提供的一个特性,用于限制和隔离一组进程对系统资源的使用。对不同资源的具体管理是由各个子系统分工完成的。

2、cgroup 的功能

限制资源使用,比如内存使用上限以及文件系统的缓存限制。

优先级控制,CPU利用和磁盘IO吞吐。

资源统计,主要目的是为了计费。

任务控制,挂起进程,恢复执行进程。

3、Cgroup子系统

blkio 设置限制每个块设备的输入输出控制,例如:磁盘、光盘、usb等等
CPU 使用调度程序为cgroup任务提供CPU的访问
cpuacct 产生cgroup任务的CPU资源报告
cpuset 如果是多核心的CPU,这个子系统会为cgroup任务分配单独的CPU和内存
devices 允许或拒绝cgroup任务对设备的访问
freezer 暂停和恢复cgroup任务
memory 设置每个cgroup的内存限制以及产生内存资源报告
net_cls 标记每个网络包以供cgroup方便使用
ns 命名空间子系统
perf_event 增加了对每个group的检测跟踪能力,可以检测属于某个特定的group的所有线程以及运行在特定CPU上的线程

4、CPU使用率控制

[root@localhost docker]# cat /sys/fs/cgroup/cpu/docker/容器ID/cpu.cfs_quota_us
-1
#-1:代表此容器可以使用得资源不受限制
  • 查看
[root@localhost ~]# docker stats
CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT     MEM %     NET I/O          BLOCK I/O     PIDS
01e51947aa64   t10       0.00%     82.71MiB / 3.683GiB   2.19%     13.5MB / 272kB   0B / 49.1MB   1

5、限制cpu时间周期

5.1  方式1

假如需要给此容器分配cpu使用率的20%,则参数需要设置为20000,相当于每个周期分配给这个容器0.2s

[root@localhost ~]# docker run -itd --name=t1 --cpu-quota 20000 centos:7 /bin/bash
8167c75eef1a67baaef63e0b8575b9aac91be5ab79edbb51abe7028388f923f2

压力测试

[root@localhost ~]# docker exec -it 8167c75eef1a /bin/bash
[root@8167c75eef1a /]# yum -y install bc
#计算圆周率
[root@8167c75eef1a /]# echo "scale=5000;4*a(1)"| bc -l -q
[root@localhost ~]# docker stats
CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT     MEM %     NET I/O          BLOCK I/O     PIDS
8167c75eef1a   t1        20.00%    74.42MiB / 3.683GiB   1.97%     13.1MB / 223kB   0B / 47.6MB   3
01e51947aa64   t10       0.00%     82.71MiB / 3.683GiB   2.19%     13.5MB / 272kB   0B / 49.1MB   1

5.2  方式2

[root@localhost ~]# cd /sys/fs/cgroup/cpu/docker/
[root@localhost docker]# echo "20000" > 01e51947aa6402395f05a2573efa48191e3d8b85a67caf1ed58746a44e68d347/cpu.cfs_quota_us

6、设置容器的权重

按比例分配设置容器的权重,此处权重是所有值相加然后看占用百分比

[root@localhost docker]# docker run -itd --name=c1 --cpu-shares 512 centos:7 /bin/bash
4421cdb3f44c091ac88a6538725141a627cf0645b5a8917fab1e2425786fc777
[root@localhost docker]# docker run -itd --name
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值