nsenter命令简介
介绍
nsenter 命令是一个可以在指定进程的命令空间下运行指定程序的命令。它位于 util-linux 包中。
nsenter 命令的语法:
1nsenter [options] [program [arguments]]
2
3options:
4-t, --target pid:指定被进入命名空间的目标进程的pid
5-m, --mount[=file]:进入mount命令空间。如果指定了file,则进入file的命令空间
6-u, --uts[=file]:进入uts命令空间。如果指定了file,则进入file的命令空间
7-i, --ipc[=file]:进入ipc命令空间。如果指定了file,则进入file的命令空间
8-n, --net[=file]:进入net命令空间。如果指定了file,则进入file的命令空间
9-p, --pid[=file]:进入pid命令空间。如果指定了file,则进入file的命令空间
10-U, --user[=file]:进入user命令空间。如果指定了file,则进入file的命令空间
11-G, --setgid gid:设置运行程序的gid
12-S, --setuid uid:设置运行程序的uid
13-r, --root[=directory]:设置根目录
14-w, --wd[=directory]:设置工作目录
15
16如果没有给出program,则默认执行$SHELL
示例:
运行一个 nginx 容器,查看该容器的 pid:
1docker inspect -f {{.State.Pid}} nginx
254325
3# 进入net命令空间
4nsenter -n -t54325
5ip addr
6# 进入容器nsenter -m -u -i -n -p -t
7nsenter --target 54325 --mount --uts --ipc --net --pid
8root@164f44ff58d1:/bin#
在 Kubernetes 中,在得到容器 pid 之前还需获取容器的 ID,可以使用如下命令获取:
1kubectl get pod test -oyaml|grep containerID
2 - containerID: docker://cf0873782d587dbca6aa32f49605229da3748600a9926e85b36916141597ec85
或者更为精确地获取 containerID:
1kubectl get pod test -o template --template='{{range .status.containerStatuses}}{{.containerID}}{{end}}'
2docker://cf0873782d587dbca6aa32f49605229da3748600a9926e85b36916141597ec85
原理
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 目录中看到命名空间的文件描述符。
1pwd
2/proc/1/ns
3ll
4total 0
5lrwxrwxrwx 1 root root 0 Sep 23 19:53 ipc -> ipc:[4026531839]
6lrwxrwxrwx 1 root root 0 Sep 23 19:53 mnt -> mnt:[4026531840]
7lrwxrwxrwx 1 root root 0 Sep 23 19:53 net -> net:[4026531956]
8lrwxrwxrwx 1 root root 0 Sep 23 19:53 pid -> pid:[4026531836]
9lrwxrwxrwx 1 root root 0 Sep 23 19:53 user -> user:[4026531837]
10lrwxrwxrwx 1 root root 0 Sep 23 19:53 uts -> uts:[4026531838]
发布日期:2023-04-18 00:22 字数:222 用时
tags:Nsenter
标签云
alpine(1) api网关(1) async(1) await(1) centos(4) cli(1) client-go(1) debug(1) docker(10) docker-compose(1) dockerfile(1) embed(1) es6(1) etcd(1) etcdctl(1) freemesh(2) git(6) go(5) go-zeus(5) goland(2) golang(7) grafana(2) grpc(5) grpcurl(1) homebrew(1) homedir(1) http(2) hugo(1) java(2) javascript(3) job(1) js(1) json(1) k8s(16) k8s部署指南(1) kubebuilder(1) kubectl(4) kubernetes(1) linux(2) localecompare(1) lombok(1) metrics(2) mock(1) mysql(1) npm(1) nsenter(1) nvm(1) pnpm(2) pprof(1) prettier(1) prometheus(2) protobuf3(1) protoc(1) qiankun(1) request(1) scss(1) servicemesh(1) spring(1) springcloud->freemesh(1) ssh(2) systemctl(1) tcpdump(1) typescript(2) vite(2) vscode(2) vue(8) vue-admin(2) vue3(1) webssh(1) xtermjs(1) xxl-job(1) yarn(1) zookeeper(1) 云原生(4) 云原生框架(1) 介绍(1) 单体架构->freemesh(1) 单元化(1) 博客(1) 压缩(1) 可观测(1) 后台管理系统(1) 命名规范(1) 多云多活(1) 如水网(1) 安全(1) 安装(1) 容器(2) 开发联调神器(1) 微前端(1) 微服务(2) 微服务架构->freemesh(1) 微服务框架(1) 快速开始(1) 控制面(1) 数据面(1) 文集(2) 服务发现(1) 服务网格(1) 流量泳道(1) 流量管理(1) 监控告警(1) 端口映射(1) 证书(1) 负载均衡(1) 配置(1)