文档组资源配置1、 Cgroup相关概念(一)测试centos和stress工具镜像(二)常用容器Cgroup命令1 )限制cpu1)确认容器资源状态2 ) cpu资源权重限制3.cpu周期限制) CPU控制器仪表混合使用限制3 ) bps和iops限制cgroup总结:1.cpu限制2 .内存限制3.blkio限制磁盘权重4 .磁盘读写,io限制
一. Cgroup相关概念
docker通过cgroup控制容器使用的资源配额,包括CPU、内存和磁盘(使用哪个磁盘以及指定磁盘i/o )三个方面,基本上涵盖了一般的资源配额和使用控制
cgroup是Control Groups的缩写,是一种限制、记录和隔离进程组使用的物理资源的机制,如Linux内核提供的CPU、内存和磁盘i/o,以及Lxc、docker等许多项目Cgroup本身是提供对进程进行分组管理的功能和接口的基础结构,I/O和内存的分配控制等具体的资源管理通过该功能来实现。 这些具体的资源管理功能被称为Cgroup子系统,以下几个大子系统实现了:
blkio:设置限制每个块设备的输入和输出控制。 例如:盘、CD、usb等。 cPU:使用调度程序为cgroup任务提供CPU访问。 cpuacct:生成cgroup任务的CPU资源报告。 对于cpuset:多核CPU,此子系统为cgroup任务分配单独的CPU和内存。 devices:允许或拒绝通过cgroup任务访问设备。 freezer:暂停并重新开始cgroup任务。 内存:设置每个cgroup的内存限制并生成内存资源报告。 net_cls:标记每个网络数据包以方便cgroup使用。 ns:―命名空间子系统。 perf_event:添加了对每个组的监视和跟踪功能,以便可以监视属于特定组的所有线程以及在特定CPU上运行的线程。 (一)使用centos和stress工具访问mkdirstresscdstressvimdockerfilefromcentos 33607 runyuminstall-ywgetrunwget-o/etc/镜像yum.repos的测试epel.repo http://mirrors.a liyun.com/repo/epel-7.reporunyum-yinstallstressdockerbuild-t cerbuild-t
cd /sys/fs/cgroup/cpu/dockerls
(二)常用容器cgroup命令1 ) cpu限制1 .查看容器资源状态的文档状态
模拟cpu工件的四项任务docker exec -it 5c86a05589cf /飘逸美女/bash -c 'stress -c 4 '
从容器创建镜像
docker commit -m 'new' -a 'daoke '容器id镜像名称**ps:**默认情况下,每个docker容器的cpu份额为1024。 单个容器的份额是没有意义的,只有同时运行多个容器时,容器的cpu加权效果才会显现出来。 例如,如果两个容器a、b的cpu份额分别为1000和500,则在cpu进行时间分配的期间,容器a有两倍于容器b的机会获得cpu的时间片,但分配的结果取决于它和其他容器的工作状态,实际上例如,如果容器a上的进程一直空闲,则容器b可以获得比容器a更多的cpu时间片。 在极端情况下,例如,主机可以独占整个主机的cpu资源,即使主机只运行一个容器且其cpu份额只有50也是如此
2.cpu资源权重限制格式docker run -itd --name容器名称----CPU-sharesCPU的权重镜像名称docker run-itd-- name CPU 512-- CPU-shares 512 --CPU-shares 1024 centos : stress stress-c 10 docker run-itd-- name CPU 256-- CPU-shares 256 CPU
3.cpu循环限制(基于cpu时间片概念) docker提供两个参数控制容器--cpu周期、- CPU周期、- CPU周期可以被分配到的CPU时钟循环
CPU-period用于指定重新分配容器对CPU使用的时间长度
CPU-quota用于指定在此周期内跑完此容器需要多长时间
cpu-period和cpu-quota单位为微秒,cpu-period的最小值为1000微秒,最大值为1秒,默认值为0.1秒
(100000)cpu-quota默认值为 -1,表示不做控制,cpu-period和cpu-quota参数一般联合使用
例如:容器进程需要每1秒使用单个CPU的0.2秒时间,可以将cpu-period 设置为100000(即1秒),cpu-quota设置为 20000 (0.2 秒)。
docker run -itd --cpu-period 100000 --cpu-quota 20000 centos:stress#也可以停止容器后修改下面两个文件参数做容器cpu周期做控制cat /sys/fs/cgroup/cpu/docker/容器id/cpu.cfs_quota_uscat /sys/fs/cgroup/cpu/docker/容器id/cpu.cfs_period_us 4.cpu core 控制对于多核cpu的服务,docker还可以控制容器运行使用哪些cpu内核,及使用–cpuset-cpus参数。这对具有多核cpu的服务尤为有用,可以对需要高性能计算机的容器进行性能最优的配置
docker run -itd --name cpu1 --cpuset-cpus 0-2 centos:stress#表示容器使用cpu0-cpu2(可以使用0,1,2)或者指定使用哪个cpu --cpuset-cpus 1,3 及只用第2个和第4cpu 5.cpu配额控制参数混合使用对于–cpu-shares来说必须要两个容器使用同一个cpu核心才能体现cpu权重的作用
docker run -itd --name cpu3 --cpuset-cpus 1 --cpu-shares 512 centos:stress stress -c 1docker run -itd --name cpu4 --cpuset-cpus 1 --cpu-shares 1024 centos:stress stress -c 1 2)内存限制与操作系统类似,容器可使用的内存包括两部分:物理内存和 Swap。
Docker 通过下面两组参数来控制容器内存的使用量。
-m 或–memory:设置内存的使用限额(上限),例如100M、1024M。–memory-swap:设置内存+swap 的使用限额。
默认情况下,所有的容器能平等的读写磁盘,可以通过设置–blkio-weight参数来设置容器的Block IO的优先级。–blkio-weight与 --cpu-shares类似设置的相对权重值,默认值为500
例如设置容器A读写磁盘的带宽是容器B的两倍docker run -itd --name testA --blkio-weight 600 centos:stress /飘逸的美女/bashdocker run -itd --name testB --blkio-weight 300 centos:stress /飘逸的美女/bashcat /sys/fs/cgroup/blkio/docker/容器id/blkio:weight 3)bps和iops的限制bps是byte per second,每秒读写的数据量。
iops 是io per second,每秒IO的次数。
可通过以下参数控制容器的bps 和iops:
–device-read-bps,限制读某个设备的bps
–device-write-bps,限制写某个设备的bps
–device-read-iops,限制读某个设备的iops
–device-write-iops,限制写某个设备的iops