liunx uts命名空间

UTS命名空间是Linux内核Namespace(命名空间)的一个子系统,主要用来完成对容器HOSTNAME和domain的隔离,同时保存内核名称、版本、以及底层体系结构类型等信息。
UTS命名空间是扁平化的结构,不同的命名空间之间没有层级关系。
Uts命名空间的用来隔离系统的这些信息,使得用户在容器中查看到的信息是当前容器的系统、版本,不同于主机的,内核通过uts_namespace对当前系统中多个容器的这些信息进行统一管理,每一个容器对应有一个自己的uts_namespace,用来隔离容器的内核名称、版本等信息,不同容器查看到的都是属于自己的信息,相互间不能查看

查看当前状态的进程树

启一个终端查看

[root@k8s-nginx1 ~]# pstree -pl
systemd(1)─┬─NetworkManager(793)─┬─{NetworkManager}(816)
           │                     └─{NetworkManager}(818)
           ├─agetty(803)
           ├─auditd(765)───{auditd}(766)
           ├─crond(798)
           ├─dbus-daemon(788)
           ├─irqbalance(796)
           ├─lvmetad(613)
           ├─master(1283)─┬─pickup(4030)
           │              └─qmgr(1285)
           ├─nginx(1114)───nginx(1115)
           ├─polkitd(791)─┬─{polkitd}(809)
           │              ├─{polkitd}(810)
           │              ├─{polkitd}(811)
           │              ├─{polkitd}(812)
           │              ├─{polkitd}(815)
           │              └─{polkitd}(820)
           ├─rngd(794)
           ├─rsyslogd(1027)─┬─{rsyslogd}(1131)
           │                └─{rsyslogd}(1132)
           ├─sshd(1029)───sshd(4052)───bash(4054)───pstree(4088)
           ├─systemd-journal(588)
           ├─systemd-logind(792)
           ├─systemd-udevd(617)
           └─tuned(1023)─┬─{tuned}(1552)
                         ├─{tuned}(1553)
                         ├─{tuned}(1555)
                         └─{tuned}(1556)

查看当前进程的uts,$$表示当前进程的PID,这里等同于4054

使用readlink 查看namespace的inode number

[root@k8s-nginx1 ~]# readlink  /proc/$$/ns/uts  /proc/4054/ns/uts
uts:[4026531838]
uts:[4026531838]

查看当前进程的hostname

[root@k8s-nginx1 ~]# hostname
k8s-nginx1

创建新的uts namespace  查看当前状态进程树

[root@k8s-nginx1 ~]# unshare  --uts bash
[root@k8s-nginx1 ~]# pstree -pl
systemd(1)─┬─NetworkManager(793)─┬─{NetworkManager}(816)
           │                     └─{NetworkManager}(818)
           ├─agetty(803)
           ├─auditd(765)───{auditd}(766)
           ├─crond(798)
           ├─dbus-daemon(788)
           ├─irqbalance(796)
           ├─lvmetad(613)
           ├─master(1283)─┬─pickup(4030)
           │              └─qmgr(1285)
           ├─nginx(1114)───nginx(1115)
           ├─polkitd(791)─┬─{polkitd}(809)
           │              ├─{polkitd}(810)
           │              ├─{polkitd}(811)
           │              ├─{polkitd}(812)
           │              ├─{polkitd}(815)
           │              └─{polkitd}(820)
           ├─rngd(794)
           ├─rsyslogd(1027)─┬─{rsyslogd}(1131)
           │                └─{rsyslogd}(1132)
           ├─sshd(1029)───sshd(4052)───bash(4054)───bash(4091)───pstree(4100)# 比上面多出一个bash(4091)
           ├─systemd-journal(588)
           ├─systemd-logind(792)
           ├─systemd-udevd(617)
           └─tuned(1023)─┬─{tuned}(1552)
                         ├─{tuned}(1553)
                         ├─{tuned}(1555)
                         └─{tuned}(1556)

4054与4091的uts inode number不同,说明这两个线程处在不同的namespace

[root@k8s-nginx1 ~]# readlink  /proc/$$/ns/uts  /proc/4091/ns/uts
uts:[4026532430]
uts:[4026532430]

设置当前进程的hostname

新的hostname不会立即生效,执行exec bash,使用新bash取代当前bash,使hostname生效

[root@k8s-nginx1 ~]# hostname namespace-01
[root@k8s-nginx1 ~]# exec bash
[root@namespace-01 ~]# hostname
namespace-01

 另启一个终端

查看进程树

[root@k8s-nginx1 ~]# pstree -pl
systemd(1)─┬─NetworkManager(793)─┬─{NetworkManager}(816)
           │                     └─{NetworkManager}(818)
           ├─agetty(803)
           ├─auditd(765)───{auditd}(766)
           ├─crond(798)
           ├─dbus-daemon(788)
           ├─irqbalance(796)
           ├─lvmetad(613)
           ├─master(1283)─┬─pickup(4030)
           │              └─qmgr(1285)
           ├─nginx(1114)───nginx(1115)
           ├─polkitd(791)─┬─{polkitd}(809)
           │              ├─{polkitd}(810)
           │              ├─{polkitd}(811)
           │              ├─{polkitd}(812)
           │              ├─{polkitd}(815)
           │              └─{polkitd}(820)
           ├─rngd(794)
           ├─rsyslogd(1027)─┬─{rsyslogd}(1131)
           │                └─{rsyslogd}(1132)
           ├─sshd(1029)───sshd(4052)─┬─bash(4054)───bash(4091)
           │                         └─bash(4115)───pstree(4130)
           ├─systemd-journal(588)
           ├─systemd-logind(792)
           ├─systemd-udevd(617)
           └─tuned(1023)─┬─{tuned}(1552)
                         ├─{tuned}(1553)
                         ├─{tuned}(1555)
                         └─{tuned}(1556)

查看当前uts进程

[root@k8s-nginx1 ~]# readlink  /proc/$$/ns/uts  /proc/4115/ns/uts
uts:[4026531838]
uts:[4026531838]

查看当前进程的hostname

[root@k8s-nginx1 ~]# hostname
k8s-nginx1

创建新的uts namespace 查看进程树

[root@k8s-nginx1 ~]# unshare  --uts bash
[root@k8s-nginx1 ~]# pstree -pl
systemd(1)─┬─NetworkManager(793)─┬─{NetworkManager}(816)
           │                     └─{NetworkManager}(818)
           ├─agetty(803)
           ├─auditd(765)───{auditd}(766)
           ├─crond(798)
           ├─dbus-daemon(788)
           ├─irqbalance(796)
           ├─lvmetad(613)
           ├─master(1283)─┬─pickup(4030)
           │              └─qmgr(1285)
           ├─nginx(1114)───nginx(1115)
           ├─polkitd(791)─┬─{polkitd}(809)
           │              ├─{polkitd}(810)
           │              ├─{polkitd}(811)
           │              ├─{polkitd}(812)
           │              ├─{polkitd}(815)
           │              └─{polkitd}(820)
           ├─rngd(794)
           ├─rsyslogd(1027)─┬─{rsyslogd}(1131)
           │                └─{rsyslogd}(1132)
           ├─sshd(1029)───sshd(4052)─┬─bash(4054)───bash(4091)
           │                         └─bash(4115)───bash(4133)───pstree(4142)#新的进程4133
           ├─systemd-journal(588)
           ├─systemd-logind(792)
           ├─systemd-udevd(617)
           └─tuned(1023)─┬─{tuned}(1552)
                         ├─{tuned}(1553)
                         ├─{tuned}(1555)
                         └─{tuned}(1556)

查看当前进程的uts

[root@k8s-nginx1 ~]# readlink /proc/$$/ns/uts /proc/4133/ns/uts
uts:[4026532431]
uts:[4026532431]
[root@k8s-nginx1 ~]# hostname  namespace-02
[root@k8s-nginx1 ~]# exec bash
[root@namespace-02 ~]# hostname
namespace-02

 三个namespace之间设置的hostname互不影响,所有进程退出之后,namespace将被自动删除,inode number回收利用

使用exit退出namespace

[root@namespace-02 ~]# hostname
namespace-02
[root@namespace-02 ~]# exit
exit
[root@k8s-nginx1 ~]# 
[root@k8s-nginx1 ~]# pstree -pl
systemd(1)─┬─NetworkManager(793)─┬─{NetworkManager}(816)
           │                     └─{NetworkManager}(818)
           ├─agetty(803)
           ├─auditd(765)───{auditd}(766)
           ├─crond(798)
           ├─dbus-daemon(788)
           ├─irqbalance(796)
           ├─lvmetad(613)
           ├─master(1283)─┬─pickup(4030)
           │              └─qmgr(1285)
           ├─nginx(1114)───nginx(1115)
           ├─polkitd(791)─┬─{polkitd}(809)
           │              ├─{polkitd}(810)
           │              ├─{polkitd}(811)
           │              ├─{polkitd}(812)
           │              ├─{polkitd}(815)
           │              └─{polkitd}(820)
           ├─rngd(794)
           ├─rsyslogd(1027)─┬─{rsyslogd}(1131)
           │                └─{rsyslogd}(1132)
           ├─sshd(1029)───sshd(4052)─┬─bash(4054)───bash(4091)
           │                         └─bash(4115)───pstree(4165)#进程4133已经没有了
           ├─systemd-journal(588)
           ├─systemd-logind(792)
           ├─systemd-udevd(617)
           └─tuned(1023)─┬─{tuned}(1552)
                         ├─{tuned}(1553)
                         ├─{tuned}(1555)
                         └─{tuned}(1556)
[root@k8s-nginx1 ~]# readlink /proc/$$/ns/uts  /proc/4133/ns/uts
uts:[4026531838]
[root@k8s-nginx1 ~]# nsenter  --target 4091  --uts bash
[root@namespace-01 ~]# readlink  /proc/$$/ns/uts
uts:[4026532430]
[root@namespace-01 ~]# hostname
namespace-01
[root@namespace-01 ~]# 

  

原文地址:https://www.cnblogs.com/caonw/p/11933377.html