Mount namespace的作用是隔离mount point,每个mnt namespace内的文件结构可以单独修改,互不影响。
当前进程所在的mnt namespace的所有挂载点信息记录在以下三个文件中
为接下来的操作准备两个目录,每个目录下一个文件
启一个终端
[root@k8s-nginx1 ~]# ll /proc/$$/mount* -r--r--r-- 1 root root 0 Nov 26 13:45 /proc/4433/mountinfo -r--r--r-- 1 root root 0 Nov 26 13:45 /proc/4433/mounts -r-------- 1 root root 0 Nov 26 13:45 /proc/4433/mountstats
创建新的mount namespace和uts namespace并运行bash ###
[root@k8s-nginx1 ~]# unshare --mount --uts bash
### 设置hostname以便于观察 ### [root@k8s-nginx1 ~]# hostname namespace-01 && exec bash
### 查看对应namespace的inode number ### [root@namespace-01 ~]# readlink /proc/$$/ns/{uts,mnt} uts:[4026532431] mnt:[4026532430]
### 将上面创建的namespace01目录挂在到/mnt ###
[root@namespace-01 ~]# mount --bind namespace01/ /mnt/
1
### 查看/mnt目录下的文件 ### [root@namespace-01 ~]# ll /mnt/ total 0 -rw-r--r-- 1 root root 0 Nov 26 13:46 namespace01.txt
另启动一个终端
创建新的mount namespace和uts namespace,执行bash ###
[root@k8s-nginx1 ~]# unshare --mount --uts bash [root@k8s-nginx1 ~]# hostname namespace-02 && exec bash [root@namespace-02 ~]# readlink /proc/$$/ns/{uts,mnt} uts:[4026532433] mnt:[4026532432] [root@namespace-02 ~]# ll /mnt/ total 0 drwxr-xr-x. 2 root root 6 Nov 6 13:52 cdrom [root@namespace-02 ~]# mount --bind namespace02/ /mnt/ [root@namespace-02 ~]# ll /mnt/ total 0 -rw-r--r-- 1 root root 0 Nov 26 13:46 namespace02.txt
当新的mount namespace创建时,会从创建进程所在的namespace复制挂载点信息,所以namespace01和namespace02都可以看到相同的文件视图
[root@namespace-01 ~]# unshare --mount --uts bash [root@namespace-01 ~]# hostname namespace-03 && exec bash [root@namespace-03 ~]# readlink /proc/$$/ns/{uts,mnt} uts:[4026532435] mnt:[4026532434] [root@namespace-03 ~]# ll /mnt/ total 0 -rw-r--r-- 1 root root 0 Nov 26 13:46 namespace01.txt