nsenter命令简单介绍(转载)

nsenter命令是一个可以在指定进程的命令空间下运行指定程序的命令。它位于util-linux包中。

用途

一个最典型的用途就是进入容器的网络命令空间。相当多的容器为了轻量级,是不包含较为基础的命令的,比如说ip address,ping,telnet,ss,tcpdump等等命令,这就给调试容器网络带来相当大的困扰:只能通过docker inspect ContainerID命令获取到容器IP,以及无法测试和其他网络的连通性。这时就可以使用nsenter命令仅进入该容器的网络命名空间,使用宿主机的命令调试容器网络。

[root@localhost ~]# kubectl --kubeconfig /tmp/kubectl.conf get pods -o wide |grep 172.21.125.144 
nginx-7f957b9dc-8qd5w                     1/1     Running   0          11d     10.22.174.8     172.21.125.144   <none>           <none>

[root@localhost ~]# docker ps |grep nginx
c786965e9ef3   nginx                                                         "/docker-entrypoint.…"   11 days ago   Up 11 days             k8s_nginx-server_nginx-7f9xxx2e602fa_0
5a567301b615   registry.xxx.com/public/pause:3.1                    "/pause"                 11 days ago   Up 11 days             k8s_POD_nginx-7f9xxx2e602fa_0

[root@localhost ~]# docker inspect -f {{.State.Pid}} c786965e9ef3
4631
[root@localhost ~]# nsenter -n -t 4631
[root@localhost ~]# ip a

  

namespace是Linux中一些进程的属性的作用域,使用命名空间,可以隔离不同的进程。

Linux在不断的添加命名空间,目前有:

mount:挂载命名空间,使进程有一个独立的挂载文件系统,始于Linux 2.4.19
ipc:ipc命名空间,使进程有一个独立的ipc,包括消息队列,共享内存和信号量,始于Linux 2.6.19
uts:uts命名空间,使进程有一个独立的hostname和domainname,始于Linux 2.6.19
net:network命令空间,使进程有一个独立的网络栈,始于Linux 2.6.24
pid:pid命名空间,使进程有一个独立的pid空间,始于Linux 2.6.24
user:user命名空间,是进程有一个独立的user空间,始于Linux 2.6.23,结束于Linux 3.8
cgroup:cgroup命名空间,使进程有一个独立的cgroup控制组,始于Linux 4.6
Linux的每个进程都具有命名空间,可以在**/proc/PID/ns**目录中看到命名空间的文件描述符。

 

————————————————
版权声明:本文为CSDN博主「大数据老司机」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35745940/article/details/119900634

posted @ 2022-12-26 15:55  小马过大河  阅读(94)  评论(0)    收藏  举报