使用delve调试K3s

k3s是什么

K3s是什么?k8s的精简版。编译之后执行程序大小不到50M。 可以用在物联网的边缘计算侧。如果想深入了解k8s,那么k3s是个很好的起点。 那么如果能够断点调试k3s,就更好了。下面我们来看看怎么做。

步骤

  • 建议使用linux 64位操作系统。这样可以native构建。
  • 建议性能好一些的机器,虚拟机编译会很慢
  • 建议安装好docker
  • 配置好go的环境,设置GOPATH,同时把$GOPATH/bin加入到PATH
  • 安装Goland这个集成开发环境
  • 从github克隆k3s的代码,加上depth参数则不下载历史,速度会快很多

    1
    $ git clone --depth 1 https://github.com/rancher/k3s.git $GOPATH/src/github.com/rancher/k3s
  • 安装delve的debug工具。完成之后会生成可执行文件$GOPATH/bin/dlv

    1
    2
    3
    $ git clone --depth 1 https://github.com/go-delve/delve.git $GOPATH/src/github.com/go-delve/delve
    $ cd $GOPATH/src/github.com/go-delve/delve
    $ make install
  • 构建含有调试信息的可执行文件k3s,所在路径是$GOPATH/src/github.com/rancher/k3s/

    1
    2
    $ cd $GOPATH/src/github.com/rancher/k3s
    $ go build -gcflags "all=-N -l" -o k3s
  • 用delve执行。这时候线程会监听2345的远程调试接入。

    1
    2
    $ cd $GOPATH/src/github.com/rancher/k3s
    $ dlv --listen=:2345 --headless=true --api-version=2 exec -- ./k3s server --docker --disable-agent
  • Goland中添加k3s项目。项目根路径为$GOPATH,然后配置增加一个remote调试。在运行之前,在main.go上打一个断点。

运行远程调试之后,成功。 remote-debug