首页 > 其他分享 >容器核心技术Cgroups和Namespace

容器核心技术Cgroups和Namespace

时间:2023-03-29 11:36:39浏览次数:40  
标签:Cgroups 核心技术 Namespace us 子系统 Linux 进程 cpu

| 什么是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/cpumkdir containerls container #下面会自动生成诸多文件,这些文件就是资源限制文件cgroup.clone_children  cpuacct.usage         cpuacct.usage_percpu_sys   cpuacct.usage_user  cpu.rt_period_us   cpu.statcgroup.procs           cpuacct.usage_all     cpuacct.usage_percpu_user  cpu.cfs_period_us   cpu.rt_runtime_us  notify_on_releasecpuacct.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,也就是100ms100000
两个值组合在一起,就达到了一个限制的作用,修改上面两个值
echo 30000 > cpu.cfs_quota_us  ##改为30ms,意思是100ms内,将cpu的限额最多给到30ms,也就是30%
再将上面的死循环进程id,做一下限制
echo  39963 > tasks
再次用top查看cpu使用率,会发现最终会使用30%,这就是Cgoups的限制。

 

| 总结CgroupsLinux Cgroups的设计还是比较易用的,简单粗暴地理解呢,它就是一个子系统目录加上一组资源限制文件的组合。而对于Docker等Linux容器项目来说,它们只需要在每个子系统下面,为每个容器创建一个控制组(即创建一个新目录),然后在启动容器进程之后,把这个进程的PID填写到对应控制组的tasks文件中就可以了。而至于在这些控制组下面的资源文件里填上什么值,就靠用户启动容器时的参数指定了。| 什么是NamespaceNamespace(命名空间)是一种隔离机制,用于将全局系统资源划分为多个独立的逻辑部分,以便不同的进程或应用程序之间能够使用不同的资源名称或标识符,避免冲突和混淆。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技术,就不会有容器技术。

标签:Cgroups,核心技术,Namespace,us,子系统,Linux,进程,cpu
From: https://www.cnblogs.com/msjhw/p/17268252.html

相关文章

  • Creating VM fails with error: "No VASA Provider for schema namespace (VSAN) foun
    ​​https://kb.vmware.com/s/article/52286​​......
  • 学习容器你不能错过核心技术runC和Libcontainer
    文章目录​​一、什么是Libcontainer?​​​​二、Libcontainer的功能和原理​​​​三、什么是runC?​​​​四、使用runc进行容器管理​​​​4.1、下载runC最新版本​​​......
  • docker网络-Namespace
    Namespace-网络netns是在linux中提供网络虚拟化的一个项目,使用netns网络空间虚拟化可以在本地虚拟化出多个网络环境,目前netns在lxc容器中被用来为容器提供网络......
  • 玩转SpringBoot原理:掌握核心技术,成为高级开发者
    本文通过编写一个自定义starter来学习springboot的底层原理,帮助我们更好的使用springboot集成第三方插件步骤一:创建项目步骤二:添加依赖步骤三:创建自动配置类步骤四:创......
  • 《深入理解高并发编程:JDK核心技术》-冰河新书上市
    大家好,我是冰河~~废话说多了没用,并发编程技术一直是初级程序员进阶高级工程师的前提条件,也是成为大厂程序员的必备技能,更是突破自身技术瓶颈的必经之路。2022年6月我出版......
  • using namespace 和using声明
    使用std里的vector时遇到问题,报错vector为未声明标识符,问题在于需要声明他是std命名空间里的一个类,可以使用声明命名空间usingnamespacestd;这么做有个好处就是后面......
  • IT0009.Vue.js核心技术解析与uni-app跨平台实战开发
    IT0009.Vue.js核心技术解析与uni-app跨平台实战开发  自己一面看一面跟着打的代码,蛮大,其实很多都是npm的modules链接:https://caiyun.139.com/m/i?0V5Cg5LbWDJWD ......
  • linux的cgroups详解
    引子最近在研究k8s,学习到容器的一些知识。了解到docker的核心原理:利用linuxnamespace隔离资源;利用cgroups限制资源的使用;利用chroot改变进程的根目录到指定的目录;我来......
  • 学习笔记288—Docker 基础技术之 Linux namespace 详解
    Docker基础技术之Linuxnamespace详解Docker是“新瓶装旧酒”的产物,依赖于Linux内核技术chroot、namespace和cgroup。本篇先来看namespace技术。Docker和虚......
  • Gaussdb(for opengauss)分布式-核心技术
    一、产品简介GaussDB(foropenGauss)是华为公司自主研发的新一代企业级分布式关系型数据库,基于Shared-Nothing架构,同时支持x86和鲲鹏计算架构,提供高吞吐强一致性事务处理......