Docker Cgroup 容器资源限制

docker通过cgroup来控制容器使用的资源配额,包括CPU、内存、磁盘三大方面。
1.限制内存

查询系统中已经mount的cgroup的文件系统,这里的t表示type

[[email protected] ~]# mount -t cgroup

搜索cgroup软件包

[[email protected] ~]# yum search cgroup

安装libcgroup

[[email protected] ~]# yum install -y libcgroup-tools.x86_64
[[email protected] ~]# cd /sys/fs/cgroup/memory/
[[email protected] memory]# ls

创建目录

[[email protected] memory]# mkdir x1
[[email protected] memory]# cd x1
[[email protected] x1]# ls

[[email protected] x1]# cat memory.limit_in_bytes
9223372036854771712
[[email protected] x1]# cat memory.memsw.limit_in_bytes
9223372036854771712

限制内存;200M = 1024 * 200 = 209715200

[[email protected] x1]# echo 209715200 > memory.limit_in_bytes
[[email protected] x1]# echo 209715200 > memory.memsw.limit_in_bytes
[[email protected] x1]# cat memory.limit_in_bytes
209715200
[[email protected] x1]# cat memory.memsw.limit_in_bytes
209715200
[[email protected] x1]# cd /dev/shm
[[email protected] shm]# ls
[[email protected] shm]# free -m

[[email protected] shm]# cgexec -g memory:x1 dd if=/dev/zero of=bigfile

[[email protected] shm]# free -m

[[email protected] shm]# cgexec -g memory:x1 dd if=/dev/zero of=bigfile bs=1M count=300

还原

[[email protected] shm]# ls
bigfile
[[email protected] shm]# rm -rf bigfile
[[email protected] shm]# free -m

2.限制cpu

[[email protected] ~]# systemctl start docker
[[email protected] ~]# mount -t cgroup

[[email protected] ~]# cd /sys/fs/cgroup/
[[email protected] cgroup]# ls
blkio cpu,cpuacct freezer net_cls perf_event
cpu cpuset hugetlb net_cls,net_prio pids
cpuacct devices memory net_prio systemd
[[email protected] cgroup]# cd cpu
[[email protected] cpu]# ls
cgroup.clone_children cpu.cfs_period_us machine.slice
cgroup.event_control cpu.cfs_quota_us notify_on_release
cgroup.procs cpu.rt_period_us release_agent
cgroup.sane_behavior cpu.rt_runtime_us system.slice
cpuacct.stat cpu.shares tasks
cpuacct.usage cpu.stat user.slice
cpuacct.usage_percpu docker

建立目录

[[email protected] cpu]# mkdir x1
[[email protected] cpu]# cd x1/
[[email protected] x1]# ls

-1表示无限制

[[email protected] x1]# cat cpu.cfs_quota_us
-1
[[email protected] x1]# cat cpu.cfs_period_us
100000

非交互式限制control group占用时间为20000微秒

[[email protected] x1]# echo 20000 > cpu.cfs_quota_us
[[email protected] x1]# cat cpu.cfs_quota_us
20000
[[email protected] x1]# cat cpu.cfs_period_us
100000
[[email protected] x1]# dd if=/dev/zero of=/dev/null &
[1] 8110

查看cpu为100%

[[email protected] ~]# top

[[email protected] ~]# cd /sys/fs/cgroup/cpu/x1
[[email protected] x1]# ls
cgroup.clone_children cpuacct.usage_percpu cpu.shares
cgroup.event_control cpu.cfs_period_us cpu.stat
cgroup.procs cpu.cfs_quota_us notify_on_release
cpuacct.stat cpu.rt_period_us tasks
cpuacct.usage cpu.rt_runtime_us
[[email protected] x1]# cat tasks

查看id

[[email protected] ~]# top

[[email protected] x1]# pwd
/sys/fs/cgroup/cpu/x1
[[email protected] x1]# echo 8110 > tasks

查看cpu

[[email protected] ~]# top

将dd进程调回并停止

[[email protected] x1]# fg

[[email protected] ~]# docker ps -a

[[email protected] ~]# docker images

--cpu-quota表示限制cpu

[[email protected] ~]# docker run -it --name vm6 --cpu-quota=20000 ubuntu
[email protected]:/# dd if=/dev/zero of=/dev/null

查看cpu;为20%

[[email protected] ~]# top

^C11016001+0 records in
11016000+0 records out
5640192000 bytes (5.6 GB) copied, 79.2576 s, 71.2 MB/s

[email protected]:/# exit
exit
[[email protected] ~]# docker rm vm6
vm6
[[email protected] ~]# docker run -it --name vm6 ubuntu
[email protected]:/# dd if=/dev/zero of=/dev/null

查看cpu;为100%

[[email protected] ~]# top

^C20341261+0 records in
20341260+0 records out
10414725120 bytes (10 GB) copied, 28.9112 s, 360 MB/s

[email protected]:/# exit
exit
[[email protected] ~]# docker rm vm6
vm6
[[email protected] ~]# docker run -it --name vm6 --cpu-quota=20000 ubuntu
[email protected]:/#
[[email protected] docker]# cd /sys/fs/cgroup/cpu/docker
[[email protected] docker]# ls
cgroup.clone_children
cgroup.event_control
cgroup.procs
cpuacct.stat
cpuacct.usage
cpuacct.usage_percpu
cpu.cfs_period_us
cpu.cfs_quota_us
cpu.rt_period_us
cpu.rt_runtime_us
cpu.shares
cpu.stat
d23d8a6edfd2ce61c1d98fc84317d53ab0dcc1eb0a34ab40848ddda61a5cf203
notify_on_release
tasks
[[email protected] docker]# cd d23d8a6edfd2ce61c1d98fc84317d53ab0dcc1eb0a34ab40848ddda61a5cf203
[[email protected] d23d8a6edfd2ce61c1d98fc84317d53ab0dcc1eb0a34ab40848ddda61a5cf203]# cat cpu.cfs_quota_us
20000
3.限制磁盘
默认进入容器后,只享有普通用户权限

此方式权限过大

[[email protected] ~]# docker run -it --rm --privileged=true ubuntu
[email protected]:/# fdisk -l

[email protected]:/# exit
exit

添加权限

[[email protected] ~]# docker run -it --rm --cap-add=NET_ADMIN ubuntu
[email protected]:/# fdisk -l
[email protected]:/# ip addr

[email protected]:/# ip addr add 172.18.0.4/24 dev eth0
[email protected]:/# ip addr

[email protected]:/# exit
exit
限制写入速度:
[[email protected] ~]# cat /proc/partitions

--device-write-bps表示限制写入速度

[[email protected] ~]# docker run -it --rm --device-write-bps /dev/sda:30MB ubuntu

发现写入速度限制为了每秒30

[email protected]:/# dd if=/dev/zero of=file bs=1M count=300

3.限制内存

(1).安装lxcfs

[[email protected] ~]# cd lxcfs/
[[email protected] lxcfs]# ls
lxcfs-2.0.5-3.el7.centos.x86_64.rpm lxcfs-3.0.3.tar.gz
[[email protected] lxcfs]# yum install -y lxcfs-2.0.5-3.el7.centos.x86_64.rpm
[[email protected] lxcfs]# cd /var/lib/lxcfs/
[[email protected]server1 lxcfs]# ls
(2).执行lxcfs

[[email protected] ~]# lxcfs /var/lib/lxcfs &
[1] 11749

[[email protected] ~]# cd /var/lib/lxcfs/

生成了proc目录

[[email protected] lxcfs]# ls
cgroup proc
[[email protected] lxcfs]# cd proc/
[[email protected] proc]# ls
cpuinfo diskstats meminfo stat swaps uptime #cpu 磁盘 内存 状态 swaps uptime
(3).下载并导入镜像

[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[[email protected] ~]# ls
docker lxcfs ubuntu.tar
[[email protected] ~]# docker load -i ubuntu.tar

[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 07c86167cdc4 3 years ago 188MB
4).创建容器

[[email protected] proc]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[[email protected] proc]# docker run -it --name vm1 -m 200m -v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo
> -v /var/lib/lxcfs/proc/diskstats:/proc/diskstats
> -v /var/lib/lxcfs/proc/meminfo:/proc/meminfo
> -v /var/lib/lxcfs/proc/stat:/proc/stat
> -v /var/lib/lxcfs/proc/swaps:/proc/swaps
> -v /var/lib/lxcfs/proc/uptime:/proc/uptime
> ubuntu
测试:

[email protected]:/# free -m

原文地址:https://www.cnblogs.com/ztxd/p/12276018.html

时间: 2024-11-05 20:40:31

Docker Cgroup 容器资源限制的相关文章

Docker监控容器资源的占用情况

启动一个容器并限制资源 启动一个centos容器,限制其内存为1G ,可用cpu数为2 [[email protected] ~]# docker run --name os1 -it -m 1g --cpus=2 centos:latest bash 启动容器后,可以使用docker 的监控指令查看容器的运行状态 docker top 容器名: 查看容器的进程,不加容器名即查看所有 docker stats 容器名:查看容器的CPU,内存,IO 等使用信息 [[email protected]

Docker 限制容器资源

默认情况下,容器没有资源的限制,它可以使用整个主机的所有资源.Dcoker提供了控制资源的方法, 多少内存,CPU,IO,都可以在docker run使用标志符来设置. 内存 Docker可以强制执行硬内存限制,允许容器使用不超过给定数量的用户或系统内存, 或软限制,允许容器使用所需的内存,除非满足某些条件,例如 内核检测到主机上的低内存或争用. 当单独使用或设置多个选项时,这些选项中的一些具有不同的效果. 选项 说明 -m or --memory= 容器能使用的最大的内存. 如果你设置了这个选

Docker02:Docker核心技术探索(9)使用cgroup限制资源的使用

可以限定容器中的虚拟系统对于各种资源的使用,包括cpu,内存,磁盘和网络资源,这需要使用cgroup相关技术来实现. 为了使用cgroup相关的功能,我们首先需要将cgroup提供的特殊文件系统cgroup安装到我们的容器中. 在容器的/etc/fstab中加入以下内容,可以通过在宿主系统上通过mount |grep cgroup命令查看需要mount的文件系统. 1 tmpfs /sys/fs/cgroup tmpfs defaults 0 0 2 3 cgroup /sys/fs/cgrou

docker容器资源配额控制之内存-io-数据映射

docker容器资源配额控制之内存-io-数据映射 当容器中服务或命令运行结束后,自动删除容器 作用:当容器命令运行结束后,自动删除容器.应用场景:在某些环境下,可能需要大量的新建docker虚拟机,然后仅仅运行几秒钟,然后就彻底删除.如运行单元测试等,测试弹性云计算,需要创建1万虚拟机,运行1小时,模拟双11的压力,1小时后自动删除. [[email protected] ~]# docker run -it --rm --name apeng centos sleep 5 [[email p

docker --Docker微容器Alpine Linux

Alpine Linux的官网: http://www.alpinelinux.org/    #官方 https://pkgs.alpinelinux.org/packages  #官方提供的安装包查询 使用Docker创建容器时,基础镜像通常选择Ubuntu或Centos,不管哪个镜像的大小都在100MB以上. Alpine Linux是一个面向安全的轻型的Linux发行版. Alpine Linux采用了 musl libc 和 busybox以减小系统的体积和运行时资源消耗. 在保持瘦身

docker之容器管理常用命令篇

常用命令如下表: 选项 描述 ls 列出容器 inspect 查看一个或多个容器详细信息 exec 在运行容器中执行命令 commit 创建一个新镜像来自一个容器 cp 拷贝文件/文件夹到一个容器 logs 获取一个容器日志 port 列出或指定容器端口映射 top 显示一个容器运行的进程 stats 显示容器资源使用统计 stop/start 停止/启动一个或多个容器 rm 删除一个或多个容器 1.ls - 列出容器 只列出正在运行的容器:[[email protected] ~]# dock

Docker Kubernetes 容器扩容与缩容

Docker Kubernetes 容器扩容与缩容 环境: 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 管理节点:192.168.1.79 工作节点:192.168.1.78 工作节点:192.168.1.77 创建环境: 1.Deployment名称:nginx-deployment 2.pods副本数为:3  3.image镜像:nginx1.9 管理节点:扩容或缩容deploymnet的pod副本数. kubectl scale

Docker: 限制容器可用的内存

原文:Docker: 限制容器可用的内存 默认情况下容器使用的资源是不受限制的.也就是可以使用主机内核调度器所允许的最大资源.但是在容器的使用过程中,经常需要对容器可以使用的主机资源进行限制,本文介绍如何限制容器可以使用的主机内存. 为什么要限制容器对内存的使用? 限制容器不能过多的使用主机的内存是非常重要的.对于 linux 主机来说,一旦内核检测到没有足够的内存可以分配,就会扔出 OOME(Out Of Memmory Exception),并开始杀死一些进程用于释放内存空间.糟糕的是任何进

Docker: 限制容器可用的 CPU

原文:Docker: 限制容器可用的 CPU 默认情况下容器可以使用的主机 CPU 资源是不受限制的.和内存资源的使用一样,如果不对容器可以使用的 CPU 资源进行限制,一旦发生容器内程序异常使用 CPU 的情况,很可能把整个主机的 CPU 资源耗尽,从而导致更大的灾难.本文将介绍如何限制容器可以使用的 CPU 资源.本文的 demo 中会继续使用<Docker: 限制容器可用的内存>一文中创建的 docker 镜像 u-stress 进行压力测试,文中就不再过多的解释了. 限制可用的 CPU