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

1、关于nsenter

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

[root@master ~]# nsenter -hUsage: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 1480inet 10.244.219.73  netmask 255.255.255.255  broadcast 10.244.219.73ether 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 0TX 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等命令。

K8S调试工具之--nsenter相关推荐

  1. k8s调试工具--busybox

    busybox是一个很好的调试工具,可以测试k8s集群的很多问题.其中包含了很多常用的命令,比如:ping.wget.telnet等日常运维需要用到的一些常用工具.虽然不支持curl,但是是可以使用w ...

  2. 聊聊k8s调试工具kt-connect的实现

    1. 引言 kt-connect是阿里开源的k8s的调试工具,它的作用类似于VPN,能够打通k8s集群和本地的网络. 传送门: alibaba/kt-connect 它有3种模式 * Connect ...

  3. K8S node-shell

    1 背景 对于云上K8S node我们一般会禁止ssh登录,但有时又不得不登录到node节点查看和debug,这时就可以通过node-shell的方式获得对应node的root shell. 2 安装 ...

  4. 如何成为一个出色的演讲家_成为技术演讲者

    在这篇文章中,我将简要介绍我平常CSS主题,以讨论成为技术演讲者如何帮助我发展职业生涯以及对自己作为开发人员的信心,以及如果您对此持怀疑态度,以鼓励自己您可以尝试一下! 我为什么说话 在过去的一年中, ...

  5. 【好文收藏】k8s中Pod 无法正常解析域名:部署 DNS 调试工具排查

    k8s 中 Pod 无法正常解析域名:部署 DNS 调试工具排查 问题描述 最近将 Kubernetes 升级到 1.18.1 版本,不过升级完后,查看工作节点的部分 Pod 无法启动,查看消息全是 ...

  6. 使用nsenter进入docker namespace

    我们知道docker容器使用namespace实现资源隔离. 我们知道,有很多image内部是没有bash的,所以我们docker exec是无法进入容器的,此时如果还想看一下容器内的情况,其实只需要 ...

  7. 全网最新 Skywalking 6.1.0部署进k8s 包含springcloud测试用例

    skywalking-kubernetes 该项目可以迅速将skywalking 6.1.0部署进kubernetes(k8s) 包含ui oap es模块和完整的springcloud测试用例 此外 ...

  8. OpenYurt 开箱测评 | 一键让原生 K8s 集群具备边缘计算能力

    作者| 郑超 阿里云高级开发工程师 随着物联网技术以及 5G 技术的高速发展,将云计算的能力延伸至边缘设备端,并通过中心进行统一交付.管控,已成为云计算的重要发展趋势.为服务更多开发者把握这一趋势,5 ...

  9. 从零开始入门 K8s | 理解容器运行时接口 CRI

    作者 | 知谨 阿里云工程师 本文整理自<CNCF x Alibaba 云原生技术公开课>第 28 讲,点击直达课程页面. 关注"阿里巴巴云原生"公众号,回复关键词** ...

最新文章

  1. angular2 step by step #1 - environment setup
  2. laravel 中创建全局函数 (类似于 TP 中 functions.php) 的方式
  3. HTTP 错误 500.19 - Internal Server Error
  4. Linux的Nginx二:代理
  5. spark搭建和使用,处理massive文件
  6. 不常用≠没用 Win7容易忽略的四个功能
  7. “搬砖”机器人,每小时800块!
  8. Maven打包自动发布到nexus私服
  9. Spark报错: Invalid Spark URL: spark://YarnScheduler@stream_test_nb:40659
  10. 在Centos环境下搭建Confluence
  11. px2rem-loader(Vue:移动端自适应,px自动转化)
  12. 二、K8s Cluster详细安装步骤
  13. 平行平板多光束干涉matlab,平行平板的多光束干涉.ppt
  14. 迅为恩智浦iTOP-IMX6开发平台
  15. CMMI认证适用的企业
  16. 实战模拟│微信 JSSDK 实现自定义分享、手机选图拍照、图片音频处理、地理位置、摇一摇等功能
  17. 动态域名解析ipv6 群辉dnspod_群晖设置ipv6动态域名
  18. python根据时间序列画折线图_Python如何根据时间序列数据作图
  19. 科斯定理-载罗纳德·科斯
  20. 如何在ASP.NET网络应用实现数据可视化图表

热门文章

  1. 区块链行业人才市场大盘点(附求职指南)
  2. android视频自动旋转,Android 使用PLDroidPlayer播放网络视频 根据视频角度自动旋转...
  3. 不撞南墙不回头----深度优先搜索
  4. 如何安装配置eosjs并连接到EOS区块链
  5. 2020版本idea 左视图跟随主视图定位操作
  6. win10睡眠锁定计算机,Win10专业版电脑睡眠和休眠的区别是什么?
  7. 腾讯 美团 字节 抖音 面经
  8. mysql1273,phpmysql错误 – #1273 – #1273 – 未知排序规则:’utf8mb4_general_ci’
  9. geo数据差异分析_GEO2R:对GEO数据库中的数据进行差异分析
  10. AHRS(航姿参考系统)和IMU(惯性测量单元)的区别