0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

容器核心技术Cgroups和Namespace

阿铭linux 来源:阿铭linux 2023-03-28 09:47 次阅读

| 什么是Cgroups

简单一句话描述Cgroups:Cgroups是Linux内核提供的一种可以限制单个进程或者多个进程所使用资源的机制,可以对 cpu,内存等资源实现精细化的控制。
Cgroups全称是Control Groups,Cgroup为每种可以控制的资源都定义了一个子系统。它的子系统有:

cpu子系统:限制进程的cpu使用率;

cpuacct子系统:统计Cgroups中进程cpu使用报告;

cpuset子系统:为Cgroups中的进程分配单独的cpu节点或者内存节点;

memory子系统:限制进程的memory使用量;

blkio子系统:限制进程的块设备io;

devices子系统:控制进程能够访问某些设备;

net_cls子系统:标记cgroups中进程的网络数据包,然后可以使用tc模块(traffic control)对数据包进行控制;

freezer子系统:挂起或者恢复cgroups中的进程;



其它的具体可以通过这个命令查看:

ls /sys/fs/cgroup/


| 理解Cgroups如何限制资源
在cpu子系统下创建目录
cd /sys/fs/cgroup/cpu


mkdir container


ls container #下面会自动生成诸多文件,这些文件就是资源限制文件


cgroup.clone_children  

cpuacct.usage         

cpuacct.usage_percpu_sys   

cpuacct.usage_user  

cpu.rt_period_us   

cpu.stat


cgroup.procs           

cpuacct.usage_all     

cpuacct.usage_percpu_user  

cpu.cfs_period_us   

cpu.rt_runtime_us  

notify_on_release


cpuacct.stat           

cpuacct.usage_percpu  

cpuacct.usage_sys          

cpu.cfs_quota_us    

cpu.shares         

tasks
执行一个耗费cpu资源的进程
while : ; do : ; done &  #这样会做一个死循环进程,会导致cpu达到100%




[1] 39963


查看quota_us和period_us
[root@localhost container]# cat cpu.cfs_quota_us  ##-1表示未做任何限制


-1 


[root@localhost container]# cat cpu.cfs_period_us  ##这里的100000为us,也就是100ms


100000


两个值组合在一起,就达到了一个限制的作用,修改上面两个值
echo 30000 > cpu.cfs_quota_us  ##改为30ms,意思是100ms内,将cpu的限额最多给到30ms,也就是30%


再将上面的死循环进程id,做一下限制
echo  39963 > tasks


再次用top查看cpu使用率,会发现最终会使用30%,这就是Cgoups的限制。

| 总结Cgroups

Linux Cgroups的设计还是比较易用的,简单粗暴地理解呢,它就是一个子系统目录加上一组资源限制文件的组合。

而对于Docker等Linux容器项目来说,它们只需要在每个子系统下面,为每个容器创建一个控制组(即创建一个新目录),然后在启动容器进程之后,把这个进程的PID填写到对应控制组的tasks文件中就可以了。

而至于在这些控制组下面的资源文件里填上什么值,就靠用户启动容器时的参数指定了。

| 什么是Namespace

Namespace(命名空间)是一种隔离机制,用于将全局系统资源划分为多个独立的逻辑部分,以便不同的进程或应用程序之间能够使用不同的资源名称或标识符,避免冲突和混淆。

Linux的Namespace是一种由内核直接提供的全局资源封装,它是内核针对进程设计的访问隔离机制。

进程在一个独立的 Linux Namespace中会认为它拥有这台 Linux 主机上的一切资源,不仅文件系统是独立的,还有着独立的 PID 编号(比如拥有自己的 0 号进程,即系统初始化的进程)、UID/GID 编号(比如拥有自己独立的 root 用户)、网络(比如完全独立的 IP 地址、网络栈、防火墙等设置),等等。

| Namespace分类

事实上,Linux的Namespace设计最早只针对文件系统,但到了后来,要求系统隔离其他访问操作的呼声就愈发强烈,从 2006 年起,内核陆续添加了UTS、IPC等命名空间隔离,后续Linux命名空间支持了以下八种资源的隔离(内核的官网Kernel.org上仍然只列出了前六种,从 Linux 的 Man 命令能查到全部八种):


命名空间 说明 内核版本
Mount 文件系统隔离 2.4.19
UTS 主机的Hostname、Domain names 2.6.19
IPC 隔离进程间通信的渠道 2.6.19
PID 隔离进程编号,无法看到其它命名空间的PID 2.6.24
Network 隔离网络资源,如网卡、网络栈、IP地址、端口 2.6.29
User 隔离用户和用户组 3.8
Cgroup 隔离Cgroup信息,进程有自己的Cgroup的根目录视图 4.6
Time 隔离系统时间 5.6




容器技术的产生就是因为Linux的Namespace的存在,在Linux系统里要想运行多个容器,那么容器与宿主机之间、容器与容器之间必须要做到相互隔离,它们会认为自己拥有了整个硬件以及软件资源。可以说如果没有Namespace技术,就不会有容器技术。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10992

    浏览量

    206745
  • 容器
    +关注

    关注

    0

    文章

    481

    浏览量

    21884

原文标题:容器核心技术Cgroups和Namespace

文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    一文带你搞懂Docker容器核心基石Cgroups

    可以限制、记录任务组所使用的物理组员(比如 CPU、Memory、IO等),为容器实现虚拟化提供了基本保证,是构建 Docker 等一些列虚拟化管理工具的基石。今天我们就来详细介绍一下 cgroups 相关的内容。
    发表于 11-24 09:54 458次阅读

    最新视频编码标准H.264及其核心技术

    最新视频编码标准H.264及其核心技术H.264是ITU-T和ISO联合研究制定的编码效率高、网络适应性强的最新数字视频编码国际标准.H.264是面向视频电话、视频会议等实际应用的标准,它能以低
    发表于 06-25 11:42

    佳灵变频器故障与维修核心技术

    佳灵变频器故障与维修核心技术
    发表于 08-05 20:55

    蓝牙核心技术概述

    蓝牙核心技术概述(一):蓝牙概述蓝牙核心技术概述(二):蓝牙使用场景蓝牙核心技术概述(三): 蓝牙协议规范(射频、基带链路控制、链路管理)蓝牙核心技术概述(四):蓝牙协议规范(HCI、
    发表于 11-24 16:06

    【原创】Android视频直播核心技术

    【原创】Android视频直播核心技术回复即可获取下载链接[hide=d15]链接:http://pan.baidu.com/s/1cC6wbW 密码:smj8 学习群:150923287 [/hide]
    发表于 07-26 17:43

    31岁无核心技术,迷茫

    再有3个月31整,再有9月就到2019了。回首发现,无核心技术,身价也越来越编制,职位上升无望,改怎么办?同龄的你,有什么高见!!!期待您的回复。
    发表于 03-27 11:39

    云计算的五大核心技术

    云计算的核心技术有哪些?大数据云计算学习路线
    发表于 06-28 09:41

    五大核心技术如何实现物联网

    以下是实现物联网的五大核心技术核心技术之感知层:传感器技术、射频识别技术、二维码技术、微机电系统1.传感器
    发表于 07-25 06:38

    Small Cell是什么?Small Cell的核心技术包括哪些?

    Small Cell是什么?Small Cell的核心技术包括哪些?
    发表于 05-24 06:11

    无线远程监控系统主要包括哪些核心技术

    无线远程监控系统主要包括哪些核心技术
    发表于 05-25 06:45

    H.264与AVS视频标准核心技术有什么不同?

    H.264与AVS视频标准核心技术有什么不同?
    发表于 06-03 06:57

    视频标准核心技术对比分析哪个好

    视频标准核心技术对比分析哪个好
    发表于 06-07 06:12

    单片机应用的核心技术是什么?

    单片机应用的核心技术是什么?单片机神奇的工作原理是什么?汇编语言很难学怎么办?
    发表于 11-02 06:17

    Arm Cortex-A65核心技术参考手册

    Arm Cortex-A65核心技术参考手册
    发表于 08-02 07:38

    Linux namespacecgroups简介

    先放结论,namespace 是用来做资源隔离, cgroup 是用来做资源限制。
    的头像 发表于 03-16 09:03 1494次阅读