namespace 和 cgroups

namespace 和 cgroups
namespace 资源隔离
查看/proc/[pid]/ns文件
进行namespaceAPi操作的4种方式
通过clone()在创建新进程的同时创建namespace
通过setns()加入一个已经存在的namespace
docker exec
通过unshare()在原先进程上进行namespace隔离
fork()系统调用
UTS(UNIXTime-sharingSystem)namespace
提供了主机名和域名的隔离
IPC namespace
进程间通信(Inter-ProcessCommunication,IPC)涉及的IPC资源包括常见的信号量、消息队列和共享内存
PID namespace
对进程PID重新标号
init进程
信号和init进程
挂载proc文件系统
mount namespace
/proc/[pid]/mounts  查看到所有挂载在当前namespace中的文件系统
分支主题
/proc/[pid]/mountstats 看到mount namespace中文件设备的统计信息包括挂载文件的名字、文件系统类型、挂载位置等
分支主题
挂载状态
共享挂载(share)
传播事件的挂载对象称为共享挂载
从属挂载(slave)
接收传播事件的挂载对象称为从属挂载
共享/从属挂载(shared and slave)
同时兼有前述两特征的挂载对象称为共享/从属挂载
私有挂载(private)
既不传播也不接收传播事件的挂载对象称为私有挂载
不可绑定挂载(unbindable)
它们与私有挂载相似,但是不允许执行绑定挂载
挂载对象关系
共享关系(share relationship)
如果两个挂载对象具有共享关系,那么一个挂载对象中的挂载事件会传播到另一个挂载对象,反之亦然
从属关系(slave relationship)
如果两个挂载对象形成从属关系,那么一个挂载对象中的挂载事件会传播到另一个挂载对象,但是反之不行;在这种关系中,从属对象是事件的接收者
默认情况下,所有挂载状态都是私有的。设置为共享挂载的命令如下。\nmount --make-shared
network namespace
主要提供了关于网络资源的隔离,包括网络设备、IPv4和IPv6协议栈、IP路由表、防火墙、/proc/net目录、/sys/class/net目录、套接字(socket)等
user namespace
主要隔离了安全相关的标识符(identifier)和属性(ttribute),包括用户ID、用户组ID、root目录、key(指密钥)以及特殊权限
用户绑定操作,通过在/proc/[pid]/uid_map和/proc[pid]/gid_map两个文件中写入对应的绑定信息 
格式如下:   ID-inside-ns ID-outside-ns length
cgroups 资源限制
cgroups是Linux内核提供的一种机制,这种机制可根据需求把一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源管理提供一个统一的框架。
特点
cgroups的API以一个伪文件系统的方式实现,用户态的程序可以通过文件操作实现cgroups的组织管理
cgroups的组织管理操作单元可以细粒度到线程级别,另外用户可以创建和销毁cgroup,从而实现资源再分配和管理
所有资源管理的功能都以子系统的方式实现,接口统一
子任务创建之初与其父任务处于同一个cgroups的控制组
本质上来说,cgroups是内核附加在程序上的一系列钩子(hook),通过程序运行时对资源的调度触发相应的钩子以达到资源追踪和限制的目的
作用
资源限制
cgroups可以对任务使用的资源总额进行限制。如设定应用运行时使用内存的上限,一旦超过这个配额就发出OoM(OutofMemory࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lanlingxueyu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值