Docker中利用namespace来做权限控制,用cgroups来做资源控制,这两个都是非常重要的,下面是整理了一些关于cgroups相关的。

cgroups全称control groups ,是Linux内核提供的一种机制,用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等)。

cgroups最初的目标是为资源管理提供的一个统一的框架,即整合现有的cpuset等子系统,也为未来开发新的子系统提供接口。现在的cgroups适用于多种应用场景,从单个进程的资源控制,到实现操作系统层次的虚拟化,cgroups提供了以下功能:

  1. 限制进程组可以使用的资源数量(Resource limiting)。
  2. 进程组的优先级控制(Prioritization)。
  3. 记录进程组使用的资源数量(Accounting)。
  4. 进程组隔离(lsolation)。
  5. 进程控制组(control)。

cgroup的API以一个伪文件系统的方式实现,即用户可以通过文件操作实现cgroup的组织管理。

cgroup 的组织管理操作单元可以细粒度到线程级别,用户态代码也可以针对系统分配的资源创建和销毁cgroup,从而实现资源再分配和管理。

所有资源管理的功能都以subsystem(子系统)的方式实现。

子进程创建之初与其父进程处于同一个cgroups的控制组。

术语:

task(任务)

系统中的进程。

cgroup(控制组)

cgroups中的资源控制都以cgroup为单位实现。cgroup表示按某种资源控制标准划分而成的任务组,包含一个或多个子系统。一个任务可以加入某个cgroup,也可以从某个cgroup迁移到另外一个cgroup。

subsystem(子系统)

cgroups中的subsystem就是一个资源调度控制器(Resource Controller)。比如CPU子系统可以控制CPU时间分配,内存子系统可以限制cgroup内存使用量。

hierarchy(层级树)

hierarchy由一系列cgroup以一个树状结构排列而成,每个hierarchy通过绑定对应的subsystem进行资源调度。hierarchy中的cgroup节点可以包含0或者多个子节点,子节点继承父节点属性。整个系统可以有多个hierarchy。

cgroup是分层管理的,类似进程,且子cgroup会继承上级cgroup的一些属性。

下面简单做一个对指定进程cpu使用率限制的例子感受下。

先用mount命令查看挂载目录

mount -t cgroup

cd 过去创建一个测试的节点(文件夹)

cd /sys/fs/cgroup/cpu

sudo mkdir cpu_limit_demo

创建好cpu_limit_demo目录后cd过去会发现系统会自动创建很多文件。

跟上一层路径下面的文件很像,可以理解成是树的更深一个层的节点。

cfs_period 和 cfs_quota两个文件,这两个参数需要组合使用,可以用来限制进程在长度为cfs_period 的一段时间内,只能被分配到总量为cfs_quota 的 CPU 时间。

看下默认值:

-1表示不启用,假如现在想控制某个进程cpu上限是50%,就在quota里面直接插入一个50000(period的一半)。

先跑一个whlie1 把 cpu 打满

while : ; do : ; done &

然后执行 echo 50000 > cpu.cfs_quota_us 限制50% 使用率,然后再把需要限制的pid卸载tasks里面 echo 30880 > tasks

还有很多其他限制例子,可以看下这个

https://www.cnblogs.com/wdliu/p/10509045.html

Docker Cgroups相关推荐

  1. 【云原生Docker篇】Docker Cgroups资源控制管理

    一.cgroups简介 cgroups,是一个非常强大的linux内核工具,他不仅可以限制被namespace 隔离起来的资源,还可以 为资源设置权重.计算使用量.操控进程启停等等.所以cgroups ...

  2. Docker cgroups作用(十)

    实现 cgroups的主要目的是为不同用户层面的资源管理,提供一个统一化的接口.从单个任务的资源控制到操作系统层面的虚拟化, groups提供了以下四大功能. 资源限制:groups可以对任务使用的资 ...

  3. .NET和Docker ,比翼双飞

    DockerCon 2019本周将在旧金山举行 ,DockerCon 是从业者.贡献者.维护者.开发者和容器生态系统学习.网络和创新的一站式活动. .NET 团队博客发布了<一起使用.NET和D ...

  4. Java 8 终于支持 Docker !

    Java 8 过去一直与 Docker 无法很好地兼容,现在可让开发者们奔走相告的是,这个问题已经解决了. 作者 | Grzegorz Kocur 译者 | 苏本如,责编 | 屠敏 出品 | CSDN ...

  5. Docker原理及常见命令

    文章目录 一.docker简介 1.Docker namespace 2.Docker CGroups 3.Docker UnionFS 4.AUFS 5.Docker 镜像分层机制 一.Docker ...

  6. 【云原生Kubernetes系列第五篇】kubeadm v1.20 部署K8S 集群架构(人生这道选择题,总会有遗憾)

    系列文章目录 ??即日起,更新云原生相关知识,喜欢的小伙伴可以给我点个三连喔 ??收录至专栏 云原生 ??[云原生Docker系列第一篇]Docker镜像管理 ??[云原生Docker系列第二篇]Do ...

  7. 5分钟了解Docker原理(2),最简单的cgroups介绍!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 很多接触Docker的同学,都接触过cgroup这个名词. ...

  8. Docker安全性支持(使用Cgroups机制实现容器资源控制)

    前言 Docker作为最重视安全的容器技术之一,在很多方面都提供了强安全性的默认配置,其中包括:容器root用户的Capability能力限制.Seccomp系统调用过滤.Apparmor的 MAC ...

  9. Docker核心原理之cgroups

    cgroups资源限制 上一篇文章中,我们了解了Docker的资源隔离技术namespace,通过系统调用构建了一个相对隔离的shell环境.也可以称之为一个简单的容器.接下来将讲解另一个强大的内核工 ...

最新文章

  1. 回顾与展望:大热的AutoML究竟是什么? | 技术头条
  2. sentinel使用(结合OpenFeign)
  3. 【 FPGA 】Xilinx FPGA器件命名意义?
  4. 为什么在mysql执行删除表中外键的语句,外键却仍然存在? [问题点数:40分]
  5. C++自定义非极大值抑制(Canny边缘检测,亚像素方法)
  6. Part 3: Services
  7. 什么是HOOK功能?
  8. php服务器怎么保活,think-queue消息队列
  9. CCF NOI1080 统计字符
  10. L1-02-yum源的配置(本地源)
  11. 特征值,特征向量,特征多项式
  12. java英文姓名随机生成_java随机生成中国人姓名
  13. 中国天气预报网接口及城市代码
  14. 蒙特卡洛模拟 matlab实例,蒙特卡洛模拟的简单例子
  15. NBU MSDP 配置容量为 64TB (Redhat7)
  16. 异地多活与CAP原理
  17. 用python画动态皮卡丘_如何利用python绘制可爱皮卡丘?
  18. 2021腾讯社招java技术岗面试题
  19. STC89C52RC定时器的最基本实例
  20. webstorm 2017 激活pojie,

热门文章

  1. 类中静态成员变量 无法解析的外部符号
  2. 咱们一起聊聊Zookeeper
  3. Jenkins 初步入门---邮件设置
  4. oracle-25031安装错误分析解决
  5. 黑马lavarel教程---5、模型操作(AR模式)
  6. MySQL数据库性能优化的八种方式
  7. 两个月后才更新一篇。。。。LIB和DLL的差别
  8. hdu 3117 Fibonacci Numbers
  9. hdu-5794 A Simple Chess(容斥+lucas+dp)
  10. 存储过程使用事物的几种方式 转载自--http://www.cnblogs.com/chengxiaoming/archive/2010/06/11/1756163.html...