NameSpaces
如果把linux操作系统比作一个大房子,那命名空间指的就是这个房子中的一个个房间,住在每个房间里的人都自以为独享了整个房子的资源,但其实大家仅仅只是在共享的基础之上互相隔离,共享指的是共享全局的资源,而隔离指的是局部上彼此保持隔离,因而命名空间的本质就是指:一种在空间上隔离的概念,当下盛行的许多容器虚拟化技术(典型代表如LXC、Docker)就是基于linux命名空间的概念而来的。
命名空间在抽象中封装全局系统资源,使其在命名空间内的进程中具有它们自己的全局资源的孤立实例。对全局资源的更改对于命名空间成员的其他进程是可见的,但i与其他进程无关。命名空间的一个使用是实现容器。
Linux Namespace的6大类型
类型 |
功能说明 |
Isolates隔离 |
Constant |
Core version |
MNT Namespace |
提供磁盘挂载点和文件系统的隔离能力 |
Mount points |
CLONE_NEWNS |
2.4.19 |
IPC Namespace |
提供进程间通信的隔离能力 |
System V IPC, POSIX message queues |
CLONE_NEWIPC |
2.6.19 |
Net Namespace |
提供网络隔离能力 |
Network devices, stacks, ports, etc. |
CLONE_NEWNET |
2.6.29 |
UTS Namespace |
提供主机名隔离能力 |
Hostname and NIS domain name |
CLONE_NEWUTS |
2.6.19 |
PID Namespace |
提供进程隔离能力 |
Process IDs |
CLONE_NEWPID |
2.6.24 |
User Namespace |
提供用户隔离能力 |
User and group IDs |
CLONE_NEWUSER |
3.8 |
CGroups(Control Groups)
通过namespace进行隔离后。如何进行资源的分配,以保证不让某一个被隔离的namespace占用资源过多,通过进行group的分配,
管理如下资源:
- blkio #块设备IO
- cpu #CPU
- cpuacct #CPU资源使用报告
- cpuset #多处理器平台上的CPU集合
- devices #设备访问
- freezer #挂载器或恢复任务
- memory #内存用量及报告
- perf_event #对cgroup中的任务进行统一性能测试
- net_ds #cgroup中的任务创建的数据报文的类别标识符