小白手套的 Docker 奇幻旅行之探秘 cgroups

小白手套的 Docker 奇幻旅行之探秘 cgroups

喜迎周四

让我们在一个舒缓的 BGM 中开始今日话题 docker cgroups

前情提要

上章,小白手套已经理解 Docker 核心之一 Namespace,新的问题又出现了,小白手套心想:如果 Linux 中运行容器,我怎么可以让这个容器只使用指定给自己的资源呢,比如 我的宿主机有 16G 内存,我只要当前这个容器使用 2G,应该怎么办?

主角介绍

  • 小李-某司技术一把手,年纪轻轻,财务自由,开小米 SU7
  • 小白手套-某司技术 家财万贯,只为体验生活,上级小李,开法拉利

cgroups

参考 wikipedia 对 cgroups 的介绍

  • cgroups 最初由 Paul Menage 和 Rohit Seth 编写,并于 2007 年合并到主线 Linux 内核中。后来称为 cgroups 版本 1。

  • cgroups (控制组的缩写)是一个Linux 内核功能,它限制、说明和隔离一组进程的资源使用(CPU、内存、磁盘 I/O 等) 。

  • Google的工程师于 2006 年开始以“进程容器”的名义开发此功能。2007年底,术语更改为“控制组”,以避免Linux内核上下文中术语“容器”的多重含义造成的混淆,并且控制组功能在内核版本 2.6 中被合并到Linux内核主线中 于 2008 年 1 月发布。

  • 此后,开发人员添加了许多新功能和控制器,例如2014 年对kernfs的支持、防火墙、和统一层次结构。cgroup v2 已合并到 Linux 内核 4.5 中,对界面和内部功能进行了重大更改。

用大白话来讲:cgroups 的作用就类似一个工头,就好比盖房子,如果你要建三个卧室,要建多大的平方,由工头来监督,保证不会因为某间卧室而占用其他卧室的面积。换句话讲,Cgroups 保证容器内的应用程序不耗尽系统的资源,保证容器之间有序、平衡的共享系统资源。

cgroups 特点

  • 资源限制

    • 组可以设置为不超过配置的内存限制,其中还包括文件系统缓存、I/O 带宽限制、CPU 配额限制、CPU 设置限制、最大打开文件数。
  • 优先顺序

    • 某些组可能会获得更大份额的 CPU 利用率或磁盘 I/O 吞吐量
  • 会计

    • 测量组的资源使用情况,例如可用于计费目的
  • 控制

    • 冻结进程组、它们的检查点和重新启动

cgroups 核心

子系统是 cgroups 实现资源限制的基础,一个子系统代表一类资源调度控制器。

可以使用 mount -t cgroup 查看当前 Linux 有哪些子系统

cgroups 实战

Cpu 限制

首先,在 cpu 子系统下创建 cgroup ,然后限制在这个 cgroups 下的进程只能使用 0.1 核CPU

将核数写入 cpu.cfs_quota_us 就可以 1 核是(100000)

然后创建一个新的进程,一个死循环,加入到 cgroup 中,验证是否最高只能到 0.1 核

image-20240111021209053

接下来查看 TOP ,可以看到死循环下 CPU 最高只能到 10%

image-20240111021323317

Memtester 工具介绍

CPU 我们可以通过 死循环,那么在实现内存限制,需要用到 Memtester 工具

memtester 是一个用于测试计算机系统中内存稳定性和可靠性的工具。它的主要作用是模拟内存负载,检查计算机在高内存使用情况下是否会出现问题,如内存泄漏或硬件故障。

官方文档:https://github.com/jnavila/memtester

Memory 限制

首先,在 memory 子系统下创建 cgroup,然后限制在这个 cgroups 下的进程只能使用 50M,单位是字节

image-20240111021719194

然后创建一个新的进程,加入到 cgroup 中,验证是否最高可以到 50M,可以看到申请 55M 内存,结果不通过

image-20240111022306212

如果申请 40M 呢?当然,可以看到是成功的。

image-20240111022413054

结语

Docker 实现隔离与限制就是依赖 Namespace 和 cgroups 实现的,是不是非常简单。SO,你可以用 Bash 实现一个 Docker 吗?试试吧,反正又不花钱。

祝你好运

参考文献:

  • 29
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不懂前端的运维不是好架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值