iT邦幫忙

2021 iThome 鐵人賽

DAY 28
0
DevOps

k8s歷險記系列 第 28

Day28- 你都用什麼debug kubectl-debug

當使用k8s碰上pod起不來 crash loop 或是pod 網路不通時,不外乎就是kubectl logs 或者 使用 kubectl exec進入pod後,安裝curl tcp-dump 等工具來檢測,但是一來麻煩,二來建立pod的image通常是最小化的image,可能沒有apt-get之類的安裝工具,在這種情況下,就會很難debug。
而kubectl-debug 就是能解決這種情況的工具。

什麼是kubectl-debug

kubectl-debug,是一個幫助你診斷以及debug的工具,他能夠在有問題的pod內建立一個工具容器,並且會加入目標容器的pid, network, useripc namespaces內,所以你就可以透過這個工具容器內的工具來進行故障排除,而不用把這些工具加到出問題的容器image內了。

安裝 kubectl-debug

官網有不同的安裝方式,這邊挑如何用brew安裝:

brew install aylei/tap/kubectl-debug

安裝完成後,可以用kubectl-debug -h來測試看看是否有成功安裝,成功安裝的話就會像下圖:
https://ithelp.ithome.com.tw/upload/images/20211005/20129607FxJMqLaPrg.png

這樣子就是安裝成功了。
要注意的是k8s 1.18版本後,內建kubectl debug,這個跟我們剛剛介紹的kubectl-debug是不同東西,要注意一下。

測試

kubectl-debug建立出來的pod是基於nicolaka/netshoot的image而來的(有興趣的人可以去看看netshoot的readme,有介紹到不少工具的使用,以及不同網路問題的排除。)
要測試也很簡單,只要下這句即可

kubectl-debug <pod-name>

將你的pod名稱代入後,就可以進行查看host或是使用netstat的操作。

如果你的pod正在crash loop,無法連接的情況下,可以使用下面指令

kubectl-debug <pod-name> --fork

他會複製一個相同的pod出來,這時你就可以去對複製的pod進行診斷了。

透過這個工具,我們能夠比較容易地針對pod進行測試以及診斷,下一章會介紹最後一個k8s工具,希望對在看的人有幫助。


上一篇
Day27- k10s 不存在? k9s進階功能
下一篇
Day29- 這是替身攻擊!! 替換你的pod Telepresence
系列文
k8s歷險記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言