Ebpay

    Ebpay
    全栈云原生平台
    帮助企业在任何云上构建、运行管理应用程序,覆盖应用全生命周期管理,300+金融/制造/能源等头部企业级云原生解决方案!
    注册试用
    获取云原生转型之旅
    quick-debug | 容器程序调试利器,如本地运行般丝滑
    2021-08-31


    随着 k8s 的越来越流行,大多数项目都部署在 k8s 中,开发环境也是。

    但调试稍微麻烦,至少需要替换 docker 镜像(此时还需要提 git 提交,CICD 构建镜像,自动或手动部署,时间较长)。

    可见即所得的调试(类似前端本地调试或本地有开发环境)对开发者更友好,也会节约很多时间。

    应用场景:

     

    1)本地无法搭建开发环境,或本地开发环境不够真实

    2)顺利获得打印日志方式快速调试程序,debug

    3)试验不熟悉的 lib,查看其运行结果

    4)快速分析一个程序的运行情况

    5)边开发,边调试,边自测

     

    1.png

    原理比较简单,开发环境的镜像需要包含 quick-debug 可执行文件,实际的服务由 quick-debug 启动。

    当本地编译好程序后(例如加一些 debug 日志),顺利获得暴露的 node port 上传到对应 pod,重启服务,达到快速调试的目的。


    使用前

    代码修改,git 提交,CICD 生成镜像(或手动 build 镜像),自动或手动替换远端 k8s 容器镜像,使用 kubectl 或容器平台查看日志

    使用后

    可直接在本地开发机修改代码,编译,在远端 k8s 运行程序,在本机查看日志


    以 http://github.com/chinaran/go-httpbin 为例,可参考示例 http://github.com/chinaran/quick-debug/tree/main/example

    注: 本机网络需要能访问开发 k8s 集群,该工具只可用于开发环境

    0. 安装 quick-debug 和 quick-debug-client

    git clone http://github.com/chinaran/quick-debug.git $GOPATH/src/github.com/chinaran/quick-debug/
    cd $GOPATH/src/github.com/chinaran/quick-debug/
    make install


    1. docker image 中 包含 /usr/local/bin/quick-debug

    可使用如下方式:

    • 本地编译后,构建时复制到镜像中
    • 以 ghcr.io/chinaran/quick-debug:0.2-alpine3.13 作为基础镜像
    • 类似构建示例      http://github.com/chinaran/quick-debug/blob/main/example/program-with-quick-debug.Dockerfile,复制 quick-debug 到镜像中

    2. deployment 更新 command 和 args

    command:
    -quick-debug
    ---exec-path=/bin/go-httpbin# your exec path in docker
    -exec-args
    args:# orginal args
    --port
    -"80"
    --response-delay
    -10ms


    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 最好固定好(使用随机的也行)

    kubectlapply-f-<<EOF
    apiVersion:v1
    kind:Service
    metadata:
    name:{your-name}-nodeport
    namespace:{your-namespace}
    spec:
    ports:
    -name:quick-deubg
    nodePort:{32101}
    port:60006
    protocol:TCP
    targetPort:60006
    selector:
    {your-selector-key}:{your-selector-value}
    type:NodePort
    EOF


    4. 本地编译好可执行程序,使用 quick-debug-client 上传程序和查看其运行日志

    #编译可执行文件
    CGO_ENABLED=0 GOOS=linux go build -o /tmp/go-httpbin ./cmd/go-httpbin
    # upx 压缩
    upx -1 /tmp/go-httpbin
    #上传到远端 k8s pod
    quick-debug-client upload --addr {your-node-ip}:{your-node-port} --file {your-program-path}
    #在本地查看远端 k8s pod 运行日志
    quick-debug-client taillog --addr {your-node-ip}:{your-node-port}


    Golang 可使用 shell 函数 http://github.com/chinaran/quick-debug/blob/main/shell-func-golang.sh 快速执行对应命令 (其他语言生成的二进制也可参考该脚本

    ---转载自:公众号进击的代码


    上一篇:Ebpay发布云原生制品仓库Harbor企业版

    下一篇:Ebpay再次入选Gartner 中国ICT技术成熟度曲线


     


    © 2025 All Rights Reserved. Ebpay 版权所有 备 案号:京ICP备15011102号-2      隐私条款
    电话咨询 在线客服 微信咨询 公众号