namespace和cgroup被称为当下轻量虚拟化技术的核心。
namespace实现资源隔离。
cgroup实现资源限制,主要是针对cpu和mem。
那linux系统下namespace是如何实现资源隔离的呢?
具体都隔离了哪些方面?
资源类型
提到资源隔离,所包含的资源类型包括:cpu 内存 网络 存储空间 进程和上下文环境。
隔离其实就是隔离这些因素。
linux的namespace给我们提供了这些资源的隔离能力:
分别是:
- system V IPC 信号量、消息队列、共享内存
- 网络栈、设备、端口号
- 文件挂载点
- 进程编号
- 用户和组
- 主机名
查看资源的namespace
通过 $ ll /proc/<进程PID>/ns
可以看到当前进程的namespace信息。
root@ubuntu-server:~# ll /proc/2499/ns
total 0
dr-x--x--x 2 root root 0 Jun 11 06:02 ./
dr-xr-xr-x 9 root root 0 Jun 11 06:01 ../
lrwxrwxrwx 1 root root 0 Jun 11 06:02 cgroup -> 'cgroup:[4026531835]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 ipc -> 'ipc:[4026531839]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 mnt -> 'mnt:[4026531841]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 net -> 'net:[4026531840]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 pid -> 'pid:[4026531836]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 pid_for_children -> 'pid:[4026531836]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 time -> 'time:[4026531834]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 time_for_children -> 'time:[4026531834]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 user -> 'user:[4026531837]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 uts -> 'uts:[4026531838]'
系统调用函数
- unshare 实现在原进程上切换namespace。
- clone 在创建进程的同时,创建namespace
- setns 将当前进程加入到已有的namespace中。
这三个函数实现了在进程创建时、后实现对namespace的切换。
https://www.cnblogs.com/sparkdev/p/9365405.html
标签:11,02,06,Jun,namespace,关于,root From: https://www.cnblogs.com/zongzw/p/18242011