Docker--cgroup
cgroup
Cgroups 是 control groups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如:cpu,memory,IO等等)的机制。
cpu限制
1.打开docker并检测cgroup是否开启
[root@server1 ~]# systemctl start docker
[root@server1 ~]# mount -t cgroup
2.cgroup子系统的层级路径
[root@server1 ~]# cd /sys/fs/cgroup/
[root@server1 cgroup]# ll
total 0
drwxr-xr-x 4 root root 0 Jun 4 10:18 blkio
lrwxrwxrwx 1 root root 11 Jun 4 10:18 cpu -> cpu,cpuacct
lrwxrwxrwx 1 root root 11 Jun 4 10:18 cpuacct -> cpu,cpuacct
drwxr-xr-x 4 root root 0 Jun 4 10:18 cpu,cpuacct
drwxr-xr-x 2 root root 0 Jun 4 10:18 cpuset
drwxr-xr-x 4 root root 0 Jun 4 10:18 devices
drwxr-xr-x 2 root root 0 Jun 4 10:18 freezer
drwxr-xr-x 2 root root 0 Jun 4 10:18 hugetlb
drwxr-xr-x 4 root root 0 Jun 4 10:18 memory
lrwxrwxrwx 1 root root 16 Jun 4 10:18 net_cls -> net_cls,net_prio
drwxr-xr-x 2 root root 0 Jun 4 10:18 net_cls,net_prio
lrwxrwxrwx 1 root root 16 Jun 4 10:18 net_prio -> net_cls,net_prio
drwxr-xr-x 2 root root 0 Jun 4 10:18 perf_event
drwxr-xr-x 2 root root 0 Jun 4 10:18 pids
drwxr-xr-x 4 root root 0 Jun 4 10:18 systemd
3.CPU控制族群
[root@server1 cgroup]# cd cpu
[root@server1 cpu]# ls
cgroup.clone_children cpuacct.usage cpu.rt_runtime_us system.slice
cgroup.event_control cpuacct.usage_percpu cpu.shares tasks
cgroup.procs cpu.cfs_period_us cpu.stat user.slice
cgroup.sane_behavior cpu.cfs_quota_us notify_on_release
cpuacct.stat cpu.rt_period_us release_agent
[root@server1 cpu]# mkdir x1
[root@server1 cpu]# cd x1/
[root@server1 x1]# ls ##继承上一级目录的所有文件
cgroup.clone_children cpuacct.usage cpu.rt_period_us notify_on_release
cgroup.event_control cpuacct.usage_percpu cpu.rt_runtime_us tasks
cgroup.procs cpu.cfs_period_us cpu.shares
cpuacct.stat cpu.cfs_quota_us cpu.stat
[root@server1 x1]# cat cpu.cfs_period_us
100000
[root@server1 x1]# cat cpu.cfs_quota_us
-1 ##-1代表无限制
[root@server1 x1]# echo 20000 > cpu.cfs_quota_us
[root@server1 x1]# cat cpu.cfs_quota_us
20000 ##20000占100000的五分之一,所以是百分之二十
[root@server1 x1]# dd if=/dev/zero of=/dev/null &
[1] 2463
top
没有限制成功,因为没有添加到tasks中
[root@server1 x1]# echo 2463 > tasks
top ##cpu被限制到了百分之二十
4.容器测试
[root@server1 ~]# docker run -it --name vm1 --cpu-quota=20000 ubuntu
root@21a931db8acc:/# dd if=/dev/zero of=/dev/null &[root@server1 ~]# docker run -it --name vm2 ubuntu
root@5bb40832dd8a:/# dd if=/dev/zero of=/dev/null &
top查看vm1占百分之二十,剩下的cpu被vm2使用
[root@server1 cpu]# cd docker/
[root@server1 docker]# ls
a780df0fc198afa1d65ddf68e42287cf792efd279b344104ee73c891aa5ac50f
[root@server1 docker]# cd a780df0fc198afa1d65ddf68e42287cf792efd279b344104ee73c891aa5ac50f/
[root@server1 a780df0fc198afa1d65ddf68e42287cf792efd279b344104ee73c891aa5ac50f]# cat cpu.cfs_quota_us
20000
内存限制
内存限制
/sys/fs/cgroup/memory/x2
[root@server1 x2]# cat memory.limit_in_bytes
9223372036854771712
[root@server1 x2]# echo 314572800 > memory.limit_in_bytes
[root@server1 x2]# cd /dev/shm/
[root@server1 shm]# ls
[root@server1 shm]# dd if=/dev/zero of=bigfile bs=1M count=400
400+0 records in
400+0 records out
419430400 bytes (419 MB) copied, 0.244224 s, 1.7 GB/s ##无法限制[root@server1 shm]# yum search cgroup
[root@server1 shm]# yum install libcgroup-tools.x86_64 -y
[root@server1 shm]# free -mtotal used free shared buff/cache available
Mem: 992 125 525 7 341 710
Swap: 1023 5 1018
[root@server1 shm]# cgexec -g memory:x2 dd if=/dev/zero of=bigfile bs=1M count=400
400+0 records in
400+0 records out
419430400 bytes (419 MB) copied, 0.245783 s, 1.7 GB/s
[root@server1 shm]# free -mtotal used free shared buff/cache available
Mem: 992 129 226 301 636 410
Swap: 1023 111 912 ##限制成功,其实之占用了300M[root@server1 shm]# cd /sys/fs/cgroup/memory/x2/
[root@server1 x2]# cat memory.memsw.limit_in_bytes
9223372036854771712[root@server1 shm]# rm -f bigfile
[root@server1 x2]# echo 314572800 > memory.memsw.limit_in_bytes[root@server1 shm]# cgexec -g memory:x2 dd if=/dev/zero of=bigfile bs=1M count=400
Killed
容器资源限制
1.限制容器内存
[root@server1 ~]# docker run -it --name vm1 --memory=300M --memory-swap=300M ubuntu
root@b232ef01b673:/#
root@b232ef01b673:/# free -mtotal used free shared buffers cached
Mem: 992 402 590 12 0 248
-/+ buffers/cache: 153 839
Swap: 1227 0 1227
root@b232ef01b673:/# dd if=/dev/zero of=bigfile bs=1M count=400
400+0 records in
400+0 records out
419430400 bytes (419 MB) copied, 2.77425 s, 151 MB/s
root@b232ef01b673:/# free -mtotal used free shared buffers cached
Mem: 992 699 293 12 0 533 ##限制成功,只可以使用300M,但是隔离性不行,显示的总用有992M而不是300M
-/+ buffers/cache: 164 827
Swap: 1227 0 1227
2.增加隔离性
[root@server1 ~]# yum install lxcfs-2.0.5-3.el7.centos.x86_64.rpm -y
[root@server1 ~]# cd /var/lib/lxcfs/
[root@server1 lxcfs]# ls
[root@server1 lxcfs]# cd
[root@server1 ~]# lxcfs /var/lib/lxcfs/ &
[1] 2541
[root@server1 ~]# hierarchies:0: fd: 5: net_prio,net_cls1: fd: 6: devices2: fd: 7: blkio3: fd: 8: freezer4: fd: 9: pids5: fd: 10: perf_event6: fd: 11: memory7: fd: 12: cpuset8: fd: 13: cpuacct,cpu9: fd: 14: hugetlb10: fd: 15: name=systemd
[root@server1 ~]# cd /var/lib/lxcfs/
[root@server1 lxcfs]# ls
cgroup proc
[root@server1 lxcfs]# cd proc/
[root@server1 proc]# ls
cpuinfo diskstats meminfo stat swaps uptime
[root@server1 proc]# docker run -it -m 300m \
> -v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw \
> -v /var/lib/lxcfs/proc/diskstats:/proc/diskstats:rw \
> -v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw \
> -v /var/lib/lxcfs/proc/stat:/proc/stat:rw \
> -v /var/lib/lxcfs/proc/swaps:/proc/swaps:rw \
> -v /var/lib/lxcfs/proc/uptime:/proc/uptime:rw \
> ubuntu
root@e1c1c580defa:/# free -mtotal used free shared buffers cached
Mem: 300 2 297 12 0 0
-/+ buffers/cache: 2 297
Swap: 300 0 300
Docker--cgroup相关推荐
- kubelet cgroup driver与docker cgroup drive不一致解决方案
某个早上,本人刚打开电脑测试就开始找上了我.啊!!!测试环境的k8s启动不了了!!!作为一个成天摸鱼哦不!!努力工作的小姑娘.本着助人为乐的原则,我决定要发挥一下我的作用~今天就要去测试环境给他搞好! ...
- kubeadm初始化集群报错:kubelet driver: “cgroupfs“ is different from docker cgroup driver: “systemd“
kubeadm初始化集群报错: 报错信息如下: [kubelet-check] It seems like the kubelet isn't running or healthy. [kubel ...
- 修改 docker cgroup 版本的方法 (changing cgroup version)
Kubernetes 从 1.19 起支持 cgroup v2 版本,如需运行 1.19 之前的老版本,需要宿主机 Docker 使用 cgroup v1. 默认新版 docker 都默认使用 cgr ...
- Docker Cgroup资源配置(CPU、内存、磁盘)
一.Cgroup 资源配置方法 Docker 通过 Cgroup 来控制容器使用的资源配额,包括 CPU.内存.磁盘三大方面,基本覆盖了常见的资源配额和使用量控制. Cgroup 是 Control ...
- Docker系列---docker cgroup资源管理 | TLS通讯加密 | 详细讲解
Cgroup 前言 - Cgroup 一.对 CPU 的控制 1.使用 stress 工具测试 2.限制 CPU 使用周期速率 3.多任务比例分享 CPU 4.限制 CPU 内核使用 二.对内存使用的 ...
- [WARNING IsDockerSystemdCheck]: detected “cgroupfs“ as the Docker cgroup driver. The recommended dri
vim /etc/docker/daemon.json{"exec-opts":["native.cgroupdriver=systemd"] }systemc ...
- k8s集群节点无法创建pod解决:错误提示(Docker error : “/sys/fs/cgroup/memory/xxxx“ “no space left on device“)
前言 最近部门的k8s 集群为了扩展,增加了两个节点,结果用了一段时间后莫名出现了以下问题,新增的这两个节点上无法创建pod 从rancher发现事件报错信息如下: 问题排查步骤 第一步: 报错信息说 ...
- Windows7 下Ubuntu VM 中Docker连接不上的问题及解决方案
最近在学习Java微服务,不可避免的会涉及到将微服务容器化. 由于使用Windows7作为开发环境,最初几天用了VirtualBox 和 boot2docker,但是经常会出现如下两个问题: 1,在电 ...
- 故障error: failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: “
环境: docker:18.09.9 kubernetes:1.17 错误信息: error: failed to run Kubelet: failed to create kubelet: mis ...
- 如何在CentOS 7上安装Kubernetes Docker群集
如何在CentOS 7上安装Kubernetes Docker群集 Kubernetes是一个开源平台,用于管理由Google开发的容器化应用程序.它允许您在集群环境中管理,扩展和自动部署容器化应用程 ...
最新文章
- 虚拟化如何做实?详解戴尔2.0版解决方案
- 图片日志:深拷贝和浅拷贝的区别/序列化及反序列化
- 简单三分钟,本地搭建k8s
- SQLAPI报错:API client not set
- Pokémon Go呼应设计:让全世界玩家疯狂沉迷
- cxf超时设置不起效_jmeter集合点设置(十三)
- 不瞒你说,我最近跟Java源码杠上了
- 企业微信二维码转成名片
- SameTime8.5.1安装失败故障诊断
- Qt之Windows下禁用中文输入法
- python的out模式_Python设计模式之状态模式
- 色彩模式-RGB、HSV、CMYK、灰度模式、位图模式......
- 华为鸿蒙os设置界面,华为鸿蒙OS系统界面疑似曝光 运行性能提升超60%
- 假如腾讯跟360之战是一场阴谋联想到的
- 软件测试的国家标准及链接,软件测试相关国家标准.doc
- 中文Analytics Intelligence 问答系统 (一)
- 纯css实现蓝色圆角效果水平导航菜单代码
- android 工作空间不足,如何解决Android Studio的磁盘空间不足?
- 2:Alibaba微服务组件Nacos注册中心
- U5 CentOS系统的U盘启动与安装-孙宇彤-专题视频课程