远程 Debug kubeadm

栏目: 编程工具 · 发布时间: 5年前

内容简介:最近在看 kubeadm 的源码,不过有些东西光看代码还是没法太清楚,还是需要实际运行才能看到具体代码怎么跑的,还得打断点 debug;无奈的是本机是 mac,debug 得在 Linux 下,so 研究了一下 remote debug这里不会详细写如何安装 Go 开发环境以及 GoLand 安装,本文默认读者已经至少已经对 Go 开发环境以及代码有一定了解;顺便提一下 GoLand,这玩意属于 jetbrains 系列 IDE,在大约 2018.1 版本后在线激活服务器已经全部失效,不过网上还有其他本地

最近在看 kubeadm 的源码,不过有些东西光看代码还是没法太清楚,还是需要实际运行才能看到具体代码怎么跑的,还得打断点 debug;无奈的是本机是 mac,debug 得在 Linux 下,so 研究了一下 remote debug

一、环境准备

  • GoLand 2018.2.4
  • Golang 1.11.2
  • delve v1.1.0
  • Kubernetest master
  • Ubuntu 18.04
  • 能够高速访问外网(自行理解)

这里不会详细写如何安装 Go 开发环境以及 GoLand 安装,本文默认读者已经至少已经对 Go 开发环境以及代码有一定了解;顺便提一下 GoLand,这玩意属于 jetbrains 系列 IDE,在大约 2018.1 版本后在线激活服务器已经全部失效,不过网上还有其他本地离线激活工具,具体请自行 Google,如果后续工资能支撑得起,请补票支持正版(感恩节全家桶半价真香:joy:)

1.1、获取源码

需要注意的是 Kubernetes 源码虽然托管在 Github,但是在使用 go get 的时候要使用 k8s.io 域名

go get -d k8s.io/kubernetes

go get 命令是接受标准的 http 代理的,这个源码下载会非常慢,源码大约 1G 左右,所以最好使用加速 工具 下载

➜  ~ which proxy
/usr/local/bin/proxy
➜  ~ cat /usr/local/bin/proxy
#!/bin/bash
http_proxy=http://127.0.0.1:8123 https_proxy=http://127.0.0.1:8123 $*
➜  ~ proxy go get -d k8s.io/kubernetes

1.2、安装 delve

delve 是一个 Golang 的 debug 工具,有点类似 gdb,不过是专门针对 Golang 的,GoLand 的 debug 实际上就是使用的这个开源工具;为了进行远程 debug,运行 kubeadm 的机器必须安装 delve,从而进行远程连接

# 同样这里省略在 Linux 安装 go 环境操作
go get -u github.com/derekparker/delve/cmd/dlv

二、远程 Debug

2.1、重新编译 kubeadm

默认情况下直接编译出的 kubeadm 是无法进行 debug 的,因为 Golang 的编译器会进行编译优化,比如进行内联等;所以要关闭编译优化和内联,方便 debug

cd ${GOPATH}/src/k8s.io/kubernetes/cmd/kubeadm
GOOS="linux" GOARCH="amd64" go build -gcflags "all=-N -l"

2.2、远程运行 kubeadm

将编译好的 kubeadm 复制到远程,并且使用 delve 启动它,此时 delve 会监听 api 端口,GoLand 就可以远程连接过来了

dlv --listen=192.168.1.61:2345 --headless=true --api-version=2 exec ./kubeadm init

注意: 要指定需要 debug 的 kubeadm 的子命令,否则可能出现连接上以后 GoLand 无反应的情况

2.3、运行 GoLand

在 GoLand 中打开 kubernetes 源码,在需要 debug 的代码中打上断点,这里以 init 子命令为例

首先新建一个远程 debug configuration

远程 Debug kubeadm

名字可以随便写,主要是地址和端口

远程 Debug kubeadm

接下来在目标源码位置打断点,以下为 init 子命令的源码位置

远程 Debug kubeadm

最后只需要点击 debug 按钮即可

远程 Debug kubeadm

在没有运行 GoLand debug 之前,目标机器的实际指令是不会运行的,也就是说在 GoLand 没有连接到远程 delve 启动的 kubeadm init 命令之前, kubeadm init 并不会真正运行;当点击 GoLand 的终止 debug 按钮后,远程的 delve 也会随之退出

远程 Debug kubeadm

转载请注明出处,本文采用 CC4.0 协议授权


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

智能

智能

[法]弗雷德里克·马特尔 / 君瑞图、左玉冰 / 商务印书馆 / 2015-8 / 59.90

揭示数字化主流大趋势的最新权威论著 《主流》作者的最新力作!与法国秋季新版同步上市! 面对数字化时代的到来,美国、欧盟、中国、俄罗斯、印度、巴西、古巴、伊朗、南非、韩国、新加坡、肯尼亚、墨西哥、日本等世界各国各地区正在如何应对? 在国际地缘政治格局下如何把握数字化主流的大趋势? 谷歌、苹果、脸书、亚马逊、阿里巴巴、腾讯、中兴、华为等大家熟知的网络巨头接受了作者的采访。作者的......一起来看看 《智能》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

MD5 加密
MD5 加密

MD5 加密工具