NS
namespace 是 Linux 内核用来隔离内核资源的方式
Linux namespace资源:
- Mount: 挂载点
- Network: 网络设备/协议栈/端口
- IPC: 进程间通信
- USR: 用户和用户组
- PID: 进程
- UTS: 主机名和域名
- Cgroup: 控制组
- Time
Cgroup
Cgroup: Control Groups.是linux下用于对一个或一组进程资源控制和监控的机制.可以管理cpu, memory,diskIO 等资源.不同资源的具体管理工作由相应的cgrouup子系统来实现.
cgroup在不同的系统资源管理子系统中以层级树(Hierarchy)的方式来组织管理, 每个cgroup可以包含其它子cgroup.
ls -l /sys/fs/cgroup
cgroup子系统:
- cpu
- cpuacct
- cpuset
- memory
- blkio
- devices
- freezer
- ns
- pid
- net_cls
- net_prio
lsns
查看系统的namespace
ns类型: mnt, net, ipc, user, pid, uts, cgroup
$lsns -l
$lsns -t net
unshare
使用非共享的NS运行程序
// 创建unshare 的 ns类型.
$unshare -f -m/-n/-i/-U/-p/-u/-C ...
// 在net类型的namespace执行sleep命令
$unshare -fn sleep 10
nsenter
ns enter: Namespace enter.
nsenter - run program with namespaces of other processes
$ nsenter [options] [program [arguments]]
// 指定ns的目标进程,可以通过nsls查看.
$ nsenter -t/--target
// 进入所有类型的ns.
$ nsenter -a --all ...
// 进入指定类型的ns
$ nsenter -m/-u/-i/-n/-p/-C/-U ...
// 进入指定ns的指定进程
$ nsenter -t <pid> -n ip a
$ nsenter -S/-G/-r/-w ...
$ nsenter -F/--no-fork ...
$ nsenter -Z/--follow-context ...