转:https://blog.csdn.net/caoshuming_500/article/details/51682776
1. 命名空间是什么
命名空间简单的来说提供的就是全局资源的一种抽象,将资源放到不同的命名空间中,各个命名空间中的资源是相互隔离的。
2. namespace 的分类
namespace 分成了5类,分别是UTS/IPC/PID/NS/Net; 这些命令空间可以组合使用,创建一个namespace 也是在clone 的库函数中设置一个参数(每类namespace 有自己的参数)即可新建新的namespace;
- 容器是否包括所有的namespace
LXC 任何一个容器可以创建0-5个namespace,来完成对不同全局资源的隔离;一般我们用的容器中是5中namespace 全部新建来完成容器的彻底虚拟化隔离
3. namespace 的5个分类
- UTS (uname)
主要是用来进行hostname的资源隔离,在不同的UTS 的namespace 里面hostname 可以名字一样,相互之间透明、不冲突;
- PID(进程pid)
主要是用来进行进程资源的隔离,在不同的PID的namespace 里面pid 相同的2个进程可以存在,而且相互之间透明、不冲突
- IPC(inter-process-connection 进程之间通信)
主要是用来进行进程直接通信的隔离的,这个主要的作用是?(现在还不确定:自己理解是隔离进程直接直接通信,二用容器或者pod 来通信)
- NS(mnt) 文件系统隔离
容器在chroot 之后限制了进程只能读写指定的目录,NS的namespace 则是文件的挂载和卸载只跟namespace 有关系,跟其他的namespace 是透明的
- NET 网络隔离
借助namespace 可以进行网络接口的隔离,达到一个容器单独一个“网卡”的效果;不同的namespace 的网卡的带宽相互不影响