IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> K8S调试工具之--nsenter -> 正文阅读

[系统运维]K8S调试工具之--nsenter

注:本文基于K8S v1.21.2版本编写

1、关于nsenter

nsenter就是namespace enter的意思,它可以进入到目标程序所在的namespace中,因此可以用来调试容器程序。我们都知道目前存在的几个namespace,比如网络,用户,pid等,nsenter都有对应的参数可以指定,从而进入该namespace,

[root@master ~]# nsenter -h

Usage:
 nsenter [options] <program> [<argument>...]

Run a program with namespaces of other processes.

Options:
 -t, --target <pid>     target process to get namespaces from
 -m, --mount[=<file>]   enter mount namespace
 -u, --uts[=<file>]     enter UTS namespace (hostname etc)
 -i, --ipc[=<file>]     enter System V IPC namespace
 -n, --net[=<file>]     enter network namespace
 -p, --pid[=<file>]     enter pid namespace
 -U, --user[=<file>]    enter user namespace
...

2 常用场景

对于容器中有bash程序的场景,我们通过exec的方式就能进入容器内部,此时并不需要nsenter,但是对于那些没有bash程序的,就没法通过exec进入容器了,比如我们尝试进入coredns容器,

[root@master ~]# kubectl exec -it -n kube-system coredns-74747c454d-w57p8 -- /bin/bash
OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "/bin/bash": stat /bin/bash: no such file or directory: unknown
command terminated with exit code 126

这个时候nsenter就派上用场了,因为bash不存在,也就是文件系统层面的隔离导致的,我们可以不进入这个namespace,

[root@master ~]# docker ps | grep coredns |grep -v pause
87c9da4bff1d   296a6d5035e2             "/coredns -conf /etc…"   3 days ago     Up 3 days               k8s_coredns_coredns-74747c454d-sshdk_kube-system_19246bc7-5c13-40b4-afbc-72a7b2fc687a_8
3dc5c132293d   296a6d5035e2             "/coredns -conf /etc…"   3 days ago     Up 3 days               k8s_coredns_coredns-74747c454d-8dttx_kube-system_de4a127f-811e-48d2-a22e-5de060a88c7c_8
b2aa0928b3d9   296a6d5035e2             "/coredns -conf /etc…"   3 days ago     Up 3 days               k8s_coredns_coredns-74747c454d-w57p8_kube-system_17ce6713-101a-4df2-a520-5c52563c5d0f_8
[root@master ~]# docker inspect --format "{{.State.Pid}}" 87c9da4bff1d
5157
[root@master ~]# nsenter -u -n -p -t 5157
[root@coredns-74747c454d-sshdk ~]# hostname
coredns-74747c454d-sshdk
[root@coredns-74747c454d-sshdk ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1480
        inet 10.244.219.73  netmask 255.255.255.255  broadcast 10.244.219.73
        ether 02:5e:0f:ac:5b:94  txqueuelen 0  (Ethernet)
        RX packets 78006  bytes 7194976 (6.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 78337  bytes 7492525 (7.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

我们首先通过docker inspect获得对应容器的pid,然后通过nsenter进入utc、net、和pid namespace,这样我们就能使用宿主机的调试工具,比如tcpdump,ip等命令。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-19 12:18:43  更:2021-10-19 12:20:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:02:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码