什么是Linux Kernel(内核)的namespace(命名空间)

462 阅读1分钟

概念

namespace(命名空间)是linux kernel实现资源隔离的一种技术,命名空间将全局系统资源进行隔离,使命名空间内的进程看起来拥有自己的全局资源。在命名空间内对全局资源的更改对属于相同命名空间成员的其他进程有影响,但对非命名空间内进程是没有影响的。命名空间的其中一种使用场景就是实现容器,可以在创建新的进程时设置新进程应该在哪些资源上与宿主机器进行隔离。

image.png

实现

Linux通过namespace实现资源的隔离,并提供clone()、setns()、unshare()方法实现对namespace的操作,我们可以在/proc/[pid]/ns和/proc/user目录下查看具体的进程namespace信息,namespace有自己的生命周期,namespace的释放与是否依然被依赖有关。

类型

命名空间名全称系统API调用参数隔离内容内核版本
MountMountCLONE_NEWNSMount points挂载点(文件系统)2.4.19
UTSUNIX Time-sharing SystemCLONE_NEWUTS系统主机名和NIS(Network Information Service) 主机名(有时称为域名)2.6.19
IPCInterProcess CommunicationCLONE_NEWIPCSystem V IPC, POSIX message queues信号量,消息队列2.6.19
PIDProcess IDentificationCLONE_NEWPIDProcess IDs进程号2.6.24
NetworkNetworkCLONE_NEWNETNetwork devices, stacks, ports, etc.网络设备,协议栈,端口等等2.6.24
UserUserCLONE_NEWUSER用户和用户组3.8
CgroupsControl groupsCLONE_NEWCGROUPCgroup root directory cgroup 根目录4.6
TimeTimeCLONE_NEWTIME系统时钟5.6

API

Linux提供了多种系统调用API来操作namespaces,包括:clone()、setns() 和 unshare() 方法,使用这些方法时通过传入上表中的CLONE_NEW* flag来指定要操作的命名空间。