quick-debug | 容器程序调试利器,如本地运行般丝滑
quick-debug 项目详见:详见: https://github.com/chinaran/quick-debug
要解决什么问题
随着 k8s 的越来越流行,大多数项目都部署在 k8s 中,开发环境也是。
但调试稍微麻烦,至少需要替换 docker 镜像(此时还需要提 git 提交,CICD 构建镜像,自动或手动部署,时间较长)。
可见即所得的调试(类似前端本地调试或本地有开发环境)对开发者更友好,也会节约很多时间。
应用场景
- 本地无法搭建开发环境,或本地开发环境不够真实
- 通过打印日志方式快速调试程序,debug
- 试验不熟悉的 lib,查看其运行结果
- 快速了解一个程序的运行情况
- 边开发,边调试,边自测
原理
原理比较简单,开发环境的镜像需要包含 quick-debug 可执行文件,实际的服务由 quick-debug 启动。
当本地编译好程序后(例如加一些 debug 日志),通过暴露的 node port 上传到对应 pod,重启服务,达到快速调试的目的。
使用效果
使用前
代码修改,git 提交,CICD 生成镜像(或手动 build 镜像),自动或手动替换远端 k8s 容器镜像,使用 kubectl 或容器平台查看日志
使用后
可直接在本地开发机修改代码,编译,在远端 k8s 运行程序,在本机查看日志
使用步骤
以 https://github.com/chinaran/go-httpbin 为例,可参考示例 https://github.com/chinaran/quick-debug/tree/main/example
注: 本机网络需要能访问开发 k8s 集群,该工具只可用于开发环境
0. 安装 quick-debug 和 quick-debug-client
|
|
1. docker image 中 包含 /usr/local/bin/quick-debug
可使用如下方式:
- 本地编译后,构建时复制到镜像中
- 以
ghcr.io/chinaran/quick-debug:0.2-alpine3.13
作为基础镜像 - 类似构建示例 https://github.com/chinaran/quick-debug/blob/main/example/program-with-quick-debug.Dockerfile,复制
quick-debug
到镜像中
2. deployment 更新 command
和 args
|
|
go-httpbin pod 最终执行命令: quick-debug --exec-path=/bin/go-httpbin exec-args -port 80 -response-delay 10ms
go-httpbin pod 修改前原命令: /bin/go-httpbin -port 80 -response-delay 10ms
3. 部署 NodePort Service (默认端口 60006)
其中 nodePort
最好固定好(使用随机的也行)
|
|
4. 本地编译好可执行程序,使用 quick-debug-client 上传程序和查看其运行日志
|
|
Golang 可使用 shell 函数 https://github.com/chinaran/quick-debug/blob/main/shell-func-golang.sh 快速执行对应命令 (其他语言生成的二进制也可参考该脚本)
- 原文链接:https://www.gocode.top/post/2021/08/27/quick-debug-recommendation/
- 版权声明:本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可,转载请注明出处(作者「阿然」,原文链接)。