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 ~]#