[1] 背景介绍
小伙伴们有没有经常遇到服务器故障后,需要安装一大堆调试工具进行排障的情况呢?本地docker容器出现故障之后,是如何排查的呢?在K8S Node出现故障之后,你又是如何调试的呢?在使用K8S的时候遇到某些Pod挂掉或者Pod无法登录的情况下,如何排障呢?前不久,云大君的容器服务器也遇到故障需要排查,Github上刚好推送给我一个社区新开源的Debug工具,于是我下载下来体验了一把。
kube-debug是一款比较好用的调试工具箱,能够在任意主机上一键开启本机的调试排障、远端K8S Node主机的调试排障、本机容器的调试排障、K8S集群中任意Pod的调试排障。
[2] 快速开始调试
只需要三步就可以快速开始可视化Web调试工作,下面跟着云大君来体验一把。
2.1 下载kube-debug软件包
我们可以从https://github.com/cloudnativer/kube-debug/releases这个地方下载kube-debug的软件包。
# cd ~/
# wget https://github.com/cloudnativer/kube-debug/releases/download/v0.1.0/kube-debug-v0.1.0-x86.tgz
# tar -zxvf kube-debug-v0.1.0-x86.tgz
# cd ~/kube-debug/
2.2 初始化本地调试环境
执行“kube-debug -init”参数可以对本地调试环境进行初始化:
# cd ~/kube-debug/
# ./kube-debug -init
2.3 开始调试之旅
此时,我们就可以使用“kube-debug”命令开始调试任意容器、主机、Pod、Node之旅啦!
比如我们需要对本地主机进行调试,我们可以执行“kube-debug -localhost”命令快速开始本机的调试工作:
# cd ~/kube-debug/
# ./kube-debug -localhost
命令执行完毕之后,会显示下面的结果信息:
现在我们就可以进入调试环境进行调试啦!从上面命令的返回信息可以看到kube-debug提供了两种方便你调试的途径:
途径一:使用Web浏览器进行调试和链接分享
现在我们就可以使用Web浏览器访问 http://192.168.1.12:3080 地址,进入可视化UI界面进行调试啦。
我们可以把这个调试链接( http://192.168.1.12:3080 )发给项目组的其他同事,让小伙伴们来协助我一起定位排查故障,大家一起高效协作!
在这里,我们能够轻松地进行可视化调试,所有的命令都可以通过按tab键提示和补全。
比如你可以执行“termshark”离开进行网络抓包分析:
比如你也可以执行“strace”来诊断和跟踪操作系统进程相关的故障等。此外,kube-debug集成了curl、fping、iftop、iperf、iptraf-ng、mtr、net-snmp-tools、nmap、strace、tcpdump、tcptraceroute、termshark、git等上百种调试工具。
途径二:直接进入本地调试环境
我们除了可以使用上面的Web浏览器来方便的分享和调试外,还可以在一些网络不通的环境下直接使用“docker exec -it kube-debug-localhost /bin/bash”命令一键进入调试环境:
[3] 调试功能介绍
3.1 调试本地主机
上面已经介绍过,我们可以使用“kube-debug -localhost”命令快速开始本机的调试工作:
# cd ~/kube-debug/
# ./kube-debug -localhost
命令执行完毕之后,会显示下面的结果信息:
现在我们就可以进入调试环境进行调试啦!
从上面命令的返回信息可以看到kube-debug提供了两种方便你调试的途径:
(1)使用Web浏览器进行调试和链接分享:我们就可以使用Web浏览器访问 http://192.168.1.12:3080地址,就可以进入可视化UI界面进行调试,并分享给团队其他人一起来调试!
(2)直接进入本地调试环境:我们除了可以使用上面的Web浏览器来方便的分享和调试外,还可以在一些网络不通的环境下直接使用“docker exec -it kube-debug-localhost /bin/bash”命令一键进入调试环境。
3.2 调试本地容器
我们可以使用“kube-debug -container <container id or containername>”命令对本地主机上的容器进行调试。例如我们要对本地container id为“a1aa35697643”的容器进行调试,可以执行下面的命令:
# cd ~/kube-debug/
# ./kube-debug -container "a1aa35697643" -debugport 38080
命令执行完毕之后,会显示下面的结果信息:
现在我们就可以进入调试环境进行调试啦!
从上面命令的返回信息可以看到kube-debug提供了两种方便你调试的途径:
(1)使用Web浏览器进行调试和链接分享:我们就可以使用Web浏览器访问http://192.168.1.12:38080地址,就可以进入可视化UI界面进行调试,并分享给团队其他人一起来调试!
(2)直接进入本地调试环境:我们除了可以使用上面的Web浏览器来方便的分享和调试外,还可以在一些网络不通的环境下直接使用“docker exec -it kube-debug-container-a1aa35697643 /bin/bash”命令一键进入调试环境。
3.3 调试K8S集群中的任意Node主机
我们可以使用“kube-debug -node <kubernetes node IP>”命令对K8S集群中的任意Node主机进行调试。例如我们要对本地IP地址为“192.168.1.13”的目标K8S Node主机进行调试,可以执行下面的命令:
# cd ~/kube-debug/
# ./kube-debug -node"192.168.1.13" -debugport 38081
命令执行完毕之后,会显示下面的结果信息:
现在我们就可以进入调试环境进行调试啦!
从上面命令的返回信息可以看到kube-debug提供了两种方便你调试的途径:
(1)使用Web浏览器进行调试和链接分享:我们就可以使用Web浏览器访问http://192.168.1.13:38081地址,就可以进入可视化UI界面进行调试,并分享给团队其他人一起来调试!
(2)直接进入本地调试环境:我们除了可以使用上面的Web浏览器来方便的分享和调试外,还可以在一些网络不通的环境下直接使用“docker exec -it kube-debug-node-192.168.1.13 /bin/bash”命令一键进入调试环境。
3.4 调试K8S集群中的任意Pod
我们可以使用“kube-debug -pod <pod name> -namespace <namespace> -kubeconfig <kubeconfig file>”命令对K8S集群中的任意Pod进行调试。例如我们要对“testns”命名空间下的“test-6bfb69dc64-hdblq”Pod进行调试,可以执行下面的命令:
# cd ~/kube-debug/
# ./kube-debug -pod "test-6bfb69dc64-hdblq" -namespace "testns" -kubeconfig "/etc/kubernetes/pki/kubectl.kubeconfig" -debugport 38082
命令执行完毕之后,会显示下面的结果信息:
现在我们就可以进入调试环境进行调试啦!
从上面命令的返回信息可以看到kube-debug提供了两种方便你调试的途径:
(1)使用Web浏览器进行调试和链接分享:我们就可以使用Web浏览器访问http://192.168.1.15:38082地址,就可以进入可视化UI界面进行调试,并分享给团队其他人一起来调试!
(2)直接进入本地调试环境:我们除了可以使用上面的Web浏览器来方便的分享和调试外,还可以在一些网络不通的环境下直接使用“docker exec -it kube-debug-pod-test-6bfb69dc64-hdblq /bin/bash”命令一键进入调试环境。
[4] 清理调试环境
我们可以通过执行“kube-debug -clear”来清理本地机器的调试环境。执行下面的命令将自动清理调试所产生本地临时缓存文件、调试容器与进程等环境。
# cd ~/kube-debug/
# ./kube-debug -clear
等待命令执行完毕之后,本地调试环境就清理好了。
[5] 更多帮助信息
通过执行“kube-debug -help”命令可以查看到kube-debug工具的更多使用帮助信息:
参考文档:
https://github.com/cloudnativer/kube-debug/blob/main/README.md
https://github.com/cloudnativer/kube-debug
https://github.com/cloudnativer/kube-debug/blob/main/docs/parameters.md