linux cgroup、kubernetes limit

news2025/1/18 10:48:06

linux cgroup、kubernetes limit

1.cgroups 简介

  • cgroups,其名称源自控制组群(control groups)的缩写,是内核的一个特性,用于限制、记录和隔离一组进程的资源使用(CPU、内存、磁盘 I/O、网络等)
  • 资源限制:可以配置cgroup,从而限制进程可以对特定资源(例如内存或 CPU)的使用量
  • 优先级 :当资源发生冲突时,您可以控制一个进程相比另一个cgroup 中的进程可以使用的资源量(CPU、磁盘或网络)
  • 记录:在 cgroup 级别监控和报告资源限制
  • 控制:您可以使用单个命令更改cgroup 中所有进程的状态(冻结、停止或重新启动)

Cgroups功能的实现依赖于四个核心概念:子系统、控制组、层级树、任务

2.limit限制

k8s当设置了limit,真正设置限制的是cgroup,但是最终设置在哪一个组件上?下面一个图就可以清晰看出来。这也是k8s在24版本后放弃docker的原因,因为k8s可以直接调用到containerd,无序中间在多走一步docker
在这里插入图片描述

最终设置在了containerd-shim的执行中。同时cgroup也是设置在了这里。

3.cgroup文件

cgroup是树形结构的。当最下层的目录中没有限制(例如shares为空,则继承上级父目录的限制)
.csdnimg.cn/eaa939a254c544e8b2dc2be8fded9a5d.pn

cgroup文件在 /sys/fs/cgroup下面,可以看到能限制的所有资源。
在这里插入图片描述

如果想要看到某种资源的限制情况,例如cpu,可以进入到cpu查看。可以看到这里cpu的限制是1024,也就是当前task文件里的所有进程,都是cpu限制上限1024。
在这里插入图片描述
当k8s创建一个pod时,会根据QOS分级,创建对应的文件夹,其中Guaranteed的pod会单独创建。
在这里插入图片描述
进入到burstable等级的文件夹中,会发现pod信息都在这里,k8s设置的limit值,就是在该目录下对文件的修改。
在这里插入图片描述
我本地启动了一个Guaranteed类型的pod
![在这里插入图片描述](https://img-blog.csdnimg.cn/892d55a43580444c844020fc10a2e597.png
这个时候,cgroup下也出现了这个目录,进入这个目录查看cpu.shares和memory.limit_in_bytes。发现和describe pod中设置的limit信息是一致的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里有个小实验,就是把cpu.shares改小或者改大。这时候这个pod的限制回随着改动变化。但是describe pod的时候显示的依然是最初得值(存在了etcd),所以要在cgroup目录下直接修改值。

4.subsystem(子系统)
这里就是设置资源限制的使用量。直接贴文档了。
4.1、cpu子系统:于限制进程的 CPU 利用率

参数说明
cpu.shares-cpu比重分配。通过一个整数的数值来调节cgroup所占用的cpu时间。例如,有2个cgroup(假设为CPU1,CPU2),其中一个(CPU1)cpu.shares设定为100另外一个(CPU2)设为200,那么CPU2所使用的cpu时间将是CPU1所使用时间的2倍。cpu.shares 的值必须为2或者高于2-
cpu.cfs_period_us规定CPU的时间周期(单位是微秒)。最大值是1秒,最小值是1000微秒。如果在一个单CPU的系统内,要保证一个cgroup 内的任务在1秒的CPU周期内占用0.2秒的CPU时间,可以通过设置cpu.cfs_quota_us 为200000和cpu.cfs_period_us 为 1000000
cpu.cfs_quota_us在单位时间内(即cpu.cfs_period_us设定值)可用的CPU最大时间(单位是微秒)。cpu.cfs_quota_us值可以大于cpu.cfs_period_us值,例如在一个双CPU的系统内,想要一个cgroup内的进程充分的利用2个CPU,可以设定cpu.cfs_quota_us为 200000 及cpu.cfs_period_us为 100000

当设定cpu.cfs_quota_us为-1时,表明不受限制,同时这也是默认值

4.2 cpuacct子系统:统计各个 Cgroup 的 CPU 使用情况

参数说明
cpuacct.statcgroup中所有任务的用户和内核分别使用CPU的时长
cpuacct.usagecgroup中所有任务的CPU使用时长(纳秒)
cpuacct.usage_percpucgroup中所有任务使用的每个cpu的时间(纳秒)

4.3 cpuset子系统:为一组进程分配指定的CPU和内存节点

参数说明
cpuset.cpus允许cgroup中的进程使用的CPU列表。如0-2,16代表 0,1,2,16这4个CPU
cpuset.mems允许cgroup中的进程使用的内存节点列表。如0-2,16代表 0,1,2,16这4个可用节点
cpuset.memory_migrate当cpuset.mems变化时内存页上的数据是否迁移(默认值0,不迁移;1,迁移)
cpuset.cpu_exclusivecgroup是否独占cpuset.cpus 中分配的cpu 。(默认值0,共享;1,独占),如果设置为1,其他cgroup内的cpuset.cpus值不能包含有该cpuset.cpus内的值
cpuset.mem_exclusive是否独占memory,(默认值0,共享;1,独占)
cpuset.mem_hardwallcgroup中任务的内存是否隔离,(默认值0,不隔离;1,隔离,每个用户的任务将拥有独立的空间)
cpuset.sched_load_balancecgroup的cpu压力是否会被平均到cpuset中的多个cpu上。(默认值1,启用负载均衡;0,禁用。)

4.4 memory子系统:限制cgroup所能使用的内存上限

参数说明
memory.limit_in_bytes设定最大的内存使用量,可以加单位(k/K,m/M,g/G)不加单位默认为bytes
memory.soft_limit_in_bytes和 memory.limit_in_bytes 的差异是,这个限制并不会阻止进程使用超过限额的内存,只是在系统内存不足时,会优先回收超过限额的进程占用的内存,使之向限定值靠拢。该值应小于memory.limit_in_bytes设定值
memory.stat统计内存使用情况。各项单位为字节
memory.memsw.limit_in_bytes设定最大的内存+swap的使用量
memory.oom_control当进程出现Out of Memory时,是否进行kill操作。默认值0,kill;设置为1时,进程将进入睡眠状态,等待内存充足时被唤醒
memory.force_empty当设置为0时,清空该group的所有内存页;该选项只有在当前group没有tasks才可以使用

4.5 blkio子系统:限制cgroup对IO的使用

参数说明
blkio.weight设置权值,范围在[100, 1000],属于比重分配,不是绝对带宽。因此只有当不同 Cgroup 争用同一个 阻塞设备时才起作用
blkio.weight_device对具体设备设置权值。它会覆盖上面的选项值
blkio.throttle.read_bps_device对具体的设备,设置每秒读磁盘的带宽上限
blkio.throttle.write_bps_device对具体的设备,设置每秒写磁盘的带宽上限
blkio.throttle.read_iops_device对具体的设备,设置每秒读磁盘的IOPS带宽上限
blkio.throttle.write_iops_device对具体的设备,设置每秒写磁盘的IOPS带宽上限

4.6 devices子系统:限定cgroup内的进程可以访问的设备
devices.allow:允许访问的设备。文件包括4个字段:type(设备类型), major(主设备号), minor(次设备号), and access(访问方式)

type

  • a — 适用所有设备,包括字符设备和块设备
  • b — 块设备
  • c — 字符设备

major, minor

  • 9:*
    
  • *:*
    
  • 8:1
    

access

  • r — 读
  • w — 写
  • m — 创建不存在的设备
参数说明
devices.deny禁止访问的设备,格式同devices.allow
devices.list显示目前允许被访问的设备列表

4.7 freezer子系统:暂停或恢复任务
freezer.state:当前cgroup中进程的状态

FROZEN:挂起进程
FREEZING:进程正在挂起中
THAWED:激活进程

1.挂起进程时,会连同子进程一同挂起。
2.不能将进程移动到处于FROZEN状态的cgroup中。
3.只有FROZEN和THAWED可以被写进freezer.state中, FREEZING则不能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/155591.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JSP——分页查询

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:JAVA开发者…

Homekit智能家居DIY产品一智能面板开关

触摸开关,即通过触摸方式控制的墙壁开关,其感官场景如同我们的触屏手机,只需手指轻轻一点即可达到控制电器的目的,随着人们生活品质的提高,触摸开关将逐渐将换代传统机械按键开关。 触摸开关控制原理 触摸开关我们把…

【广度优先搜索遍历 BFS】单词接龙

一、题目描述 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s1 -> s2 -> ... -> sk&#xff1a; - 每一对相邻的单词只差一个字母。 - 对于 1 < i < k 时&#xff0c;每个 si 都在 wordList 中。注意…

全面详解Java垃圾回收器

一&#xff1a;什么是垃圾回收 Java 方法栈、本地方法栈随着方法结束或者线程结束&#xff0c;堆中的对象是用完&#xff0c;都会进行回收内存&#xff0c;所以这些区域的内存分配和回收都具备确定性&#xff0c;不需要额外考虑回收的问题。而堆和方法区存储的对象可能只有在运…

Ad5761r GD32 STM32 驱动设计

MCU采用GD32,GD32基本上和STM32一样,针对ad5761r的时序操作是完全相同的.软、硬件设计已经再产品设计中实际使用。本文章提供参考硬件设计&#xff0c;以及对应的源代码&#xff0c;具体可以作为实际项目的参考设计AD5761R是一款单通道、16位串行输入、电压输出DAC。该器件采用…

网工进阶之路-锐捷NAT网络地址转换实验 ----尚文网络奎哥

实验拓扑&#xff1a;实验需求&#xff1a; 1&#xff1a;方框内设备为内网设备&#xff0c;方框外是外网设备&#xff0c;内网网段为192.168.1.0/24&#xff0c;外网路由器互联网段为100.1.1.0/24&#xff0c;外网PC网段为200.1.1.0/24 2&#xff1a;希望使用各种NAT实现内网…

2023年海外优青项目申报指南及政策解读

海外优青项目申报&#xff0c;一直备受海外优秀青年学者&#xff08;包括博士后研究人员&#xff09;关注。知识人网小编现将国家自然科学基金委员会公布的2023年申报指南全文摘录&#xff0c;并和往年加以对比进行政策解读&#xff0c;以飨读者。自2021年起&#xff0c;国家自…

【面试题】说说你对发布订阅、观察者模式的理解?区别?

大厂面试题分享 面试题库前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库一、观察者模式观察者模式定义了对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都将得到…

Elasticsearch-高级搜索(拼音|首字母|简繁|二级搜索)

需求&#xff1a; 中文搜索、英文搜索、中英混搜全拼搜索、首字母搜索、中文全拼、中文首字母混搜简繁搜索二级搜索&#xff08;对第一次搜索结果&#xff0c;再进行搜索&#xff09;一、ES相关插件 IK分词&#xff1a; GitHub - medcl/elasticsearch-analysis-ik: The IK A…

JsonWebToken远程代码执行漏洞(CVE-2022-23529)

漏洞描述 JsonWebToken 是一个用于创建、签名和验证 JSON Web Token开源库。node-jsonwebtoken是node.js 下 JsonWebToken 的实现。 在JsonWebToken < 8.5.1版本中由于jwt.verify()方法未对用户输入的secretOrPublicKey参数进行有效的检查。如果攻击者能够控制secretOrPub…

【docker12】docker复杂安装

docker复杂安装 之前是单机版&#xff0c;自娱自乐还是不错滴&#xff0c;但是如果是生产开发环境中是需要复杂集群安装的 1.安装mysql主从复制 1.1主从复制原理&#xff08;记得补&#xff09; 1.2主从搭建步骤 新建主服务器容器实例3307 命令&#xff1a; docker run -d …

Unity 实现一个特定动画状态切换树

前言 今天在工作中接到一需求,要求人物摆在不同的9个格子上,在哪个格子上,就走哪个格子动画播放逻辑; 打个比方:第一个格子上有台电脑,我将角色放上去,角色就玩电脑,每播完一次动画,就根据概率判断是否需要去喝水,最终实现的效果,就是将角色放上去,并且随机时间进行喝水;第二个…

TiDB 底层存储结构 LSM 树原理介绍

随着数据量的增大&#xff0c;传统关系型数据库越来越不能满足对于海量数据存储的需求。对于分布式关系型数据库&#xff0c;我们了解其底层存储结构是非常重要的。本文将介绍下分布式关系型数据库 TiDB 所采用的底层存储结构 LSM 树的原理。 1 LSM 树介绍 LSM 树&#xff08…

测试开发基础 mvn test | 利用 Maven Surefire Plugin 做测试用例基础执行管理

一、需求在测试工作场景中&#xff0c;经常会遇到下面的问题&#xff1a;1、执行自动化测试用例的时候&#xff0c;只想指定某个测试类&#xff0c;或者某个方法&#xff0c;又或者某一类用例等&#xff0c;怎么办&#xff1f;2、想要和 Jenkins 一起进行持续集成&#xff0c;可…

C语言_文件操作(下)

目录 8. 文件的随机读写 8.1 fseek 8.2 ftell 8.3 rewind ​9. 文件结束判定 10. perror 8. 文件的随机读写 假设文件中存放的是abcdef&#xff0c;如下图&#xff0c;通常在读文件时&#xff0c;是先读取首元素地址&#xff0c;也就是文件指针指向a&#xff0c;每读一…

【Linux进程信号】

Linux进程信号技术应用角度的信号信号的发送与记录信号处理常见方式产生信号通过终端按键产生信号通过系统函数向进程发信号由软件条件产生信号由硬件异常产生信号阻塞信号信号其他相关常见概念在内核中的表示sigset_t信号集操作函数sigprocmasksigpending捕捉信号内核空间与用…

three.js 之 入门篇 5之几何体的认知( 顶点创建矩阵、炫酷三角形科技物体、基础网格材质 material )

目录three.js 之 入门篇 5之几何体的认知01BufferGeometry设置顶点创建矩阵02 生产炫酷三角形科技物体03 常见的网格几何体 geometry04 基础网格材质 material04-1 初识别材质与纹理04-2 初识别材质与纹理 &#xff08; 平移、旋转 &#xff09;04-3 纹理显示设置&#xff08; …

C语言——指针面试题详解

&#x1f412;个人主页&#xff1a;平凡的小苏&#x1f4da;学习格言&#xff1a;别人可以拷贝我的模式&#xff0c;但不能拷贝我不断往前的激情目录 1. 指针和数组笔试题解析 一维数组 字符数组 二维数组 2. 指针笔试题 笔试题1&#xff1a; 笔试题2&#xff1a; 笔试题…

ffmpeg 颜色空间转换分析

颜色空间转换有很多相关标准&#xff1a; https://docs.opencv.org/3.4.0/de/d25/imgproc_color_conversions.html https://www.itu.int/rec/R-REC-BT.601-4-199407-S/en ffmpeg命令行颜色空间转换是通过调用vf_scale中的swscale来进行转码。 我们通过gdb来调试ffmpeg. 首先编译…

《Getting Started with NLP》chap11:Named-entity recognition

《Getting Started with NLP》chap11&#xff1a;Named-entity recognition 最近需要做一些NER相关的任务&#xff0c;来学习一下这本书的第十一章 文章目录《Getting Started with NLP》chap11&#xff1a;Named-entity recognition11.1 Named entity recognition: Definition…