之前在公司里有过一场讨论: 业务容器里要不要装上 netstat
, tcpdump
, 乃至 arthas
这样的排障工具.
一派信奉 docker 哲学: 容器镜像要精简, 要 immutable, 装各种排障工具这种属于虚拟机时代的伪需求. 再说了, 你要更新一个排障工具或者 debug 脚本, 得动所有业务镜像, 成何体统?
一派践行实用主义: 哲学不哲学的都不能赚钱, 我们就关心线上出了问题工程师能不能用最熟悉, 最顺手的方案定位问题解决问题, 搞那么多花里胡哨的没用. 预装几个 binary 和脚本, 能解决问题就是好的!
从那时起我就想做今天这个项目了, 而在机缘巧合之下, 今天真的把解决方案做了出来: kubectl-debug
简单说: kubectl-debug
是一个 kubectl 插件, 支持用户用 kubectl debug POD_NAME
这样的指令, 对指定 Pod 中的目标容器进行 debug. 它的背后其实就是帮用户启动了一个新容器, 并且加入到目标容器的 pid
,user
, network
以及 ipc
namespace 中, 这时新容器当中的各种排障工具和脚本就可以用起来了. 而与此同时, 所有的业务容器不需要预装任何其它工具.
做完之后自己用了一下, 确实舒服了很多, 尤其是很多早期的业务容器, 用的 alpine 当基础镜像, 啥都没有, 要 debug 的时候先进去 apk add
一波是真的苦...
最后附上 github 主页, 欢迎大家试用反馈😁
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.