远程 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 协议授权


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

查看所有标签

猜你喜欢:

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

敏捷软件开发

敏捷软件开发

Robert C.Martin,、Micah Martin / 邓辉、孙鸣 / 人民邮电出版社 / 2010-12 / 79.00元

要想成为一名优秀的软件开发人员,需要熟练应用编程语言和开发工具,更重要的是能够领悟优美代码背后的原则和前人总结的经验——这正是本书的主题。本书凝聚了世界级软件开发大师Robert C. Martin数十年软件开发和培训经验,Java版曾荣获计算机图书最高荣誉——Jolt大奖,是广受推崇的经典著作,自出版以来一直畅销不衰。 不要被书名误导了,本书不是那种以开发过程为主题的敏捷软件开发类图书。在......一起来看看 《敏捷软件开发》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换