k8s容器的调试利器-nsenter

30 篇文章 2 订阅
9 篇文章 6 订阅

一、什么是nsenter

Nsenter是一个命令行工具,可以让我们进入一个运行中的容器内部。当使用Docker/Contained运行一个容器时,容器内部就像是一个隔离的虚拟机环境,你需要通过命令行进入容器内部来进行管理和操作。通过Nsenter命令,可以使用容器内部的Shell或其它工具,就像在本地主机上执行命令一样方便。

二、什么场景能用到

一个最典型的用途就是进入容器的网络命令空间。

k8s环境中,常常会需要在容器内部debug,但是相当多的容器为了轻量级,并不是都包含所需的工具软件,比如curl,wget,ifconfig,tcpdump等,这就让人很抓狂了。

三、支持的参数有哪些

图片

四、具体应该怎么用

比如我们在宿主机vm12上,pod名为tomcat-test-7c7d55d66c-zthvr,查到他的pid为773068

[root@vm12 ~]# kubectl get pod -n default -owide|grep tomcat
NAME                           READY   STATUS    RESTARTS   AGE   IP              NODE                            NOMINATED NODE   READINESS GATES
tomcat-test-7c7d55d66c-zthvr   1/1     Running   0          45d   172.24.189.75   vm12   <none>           <none>

[root@vm12 ~]# crictl ps
CONTAINER           IMAGE               CREATED             STATE               NAME                      ATTEMPT             POD ID
09bc7c51f6ada       81cd9536b1e67       46 hours ago        Running             tomcat                    0                   02b112885b84c

[root@vm12 ~]# crictl inspect 09bc7c51f6ada |grep -i pid
    "pid": 773068,
            "pid": 1
            "type": "pid"

4.1、直接命令执行Host主机上的各种命令行

进入该pid的网络命名空间的同时,获取pod的IPv4地址

[root@vm12 ~]#  nsenter -t 773068 -n ip -4 add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
4: eth0@if23: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1480 qdisc noqueue state UP group default  link-netnsid 0
    inet 172.24.189.75/32 scope global eth0
       valid_lft forever preferred_lft forever

4.2、进入交互模式,默认执行[当前bash]

[root@vm12 ~]# kubectl exec -it tomcat-test-7c7d55d66c-smff9 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
bash-4.4# tcpdump -h
bash: tcpdump: command not found

从以上返回结果,首先可以确定pod内部没有安装tcpdump这个软件包的。

但是我们可以直接进到“目标视角”里面去,进行交互式执行cli

[root@vm12 ~]#  nsenter -t 773068 -n 

#这个时候就已经进入到交互模式了,再次执行tcpdump命令
[root@vm-2-k8s2 ~]# tcpdump -h
tcpdump version 4.9.2
libpcap version 1.5.3
OpenSSL 1.0.2k-fips  26 Jan 2017
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
                [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
                [ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
                [ -Q|-P in|out|inout ]
                [ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
                [ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
                [ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
                [ -Z user ] [ expression ]
                

可以看到,所有的网络相关的命令行都可以执行(宿主机有的)。

想要退出的话,exit即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CN-FuWei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值