Below you will find pages that utilize the taxonomy term “goland”
July 28, 2023
k8s调试之 kube-apiserver 组件
上一节《GoLand+dlv进行远程调试》我们介绍了如何使用 GoLand 进行远程调试,本节我们就以 kube-apiserver 为例演示一下调试方法。
服务器环境 作为开发调试服务器,需要安装以下环境
安装 Golang 环境,国内最好设置 GOPROXY 安装 dlv 调试工具 安装 Docker 环境, 同时安装 containerd 服务(对应官方教程中的 containerd.io 安装包)并设置代理 同步代码(本地) 以下为我们本机环境设置。
本机下载 kubernetes 仓库
git clone --filter=blob:none https://github.com/kubernetes/kubernetes.git 这里指定 –filter=bold:none 可以实现最小化下载
这里 k8s 项目目录为 /Users/sxf/workspace/kubernetes, 对应远程服务器目录为 /home/sxf/workspace/kubernetes,如图所示
映射关系配置
同时选择自动上传 Automatic upload (Always) 菜单,这样以后当本地文件有变更时将自动同步到远程服务器。
首次手动同步远程代码(右键Upload here菜单)
如果文件特别多的话,首次同步将会比较慢,可以手动将本地项目打包上传到远程服务器再解压。
环境检测 首先对当前调试环境进行一系列的检查,如果条件不满足将给出提示信息
$ make verify 如果本地 Git 仓库存在未提交的文件的话,则此时将提示先提交。这一块有点不好,我这里直接终止了这个检查继续下一步。
安装Etcd 由于 kube-apiserver 依赖于 ectd ,所以必须先安装etcd。
$ cd workspace/kubernetes $ ./hack/install-etcd.sh Downloading https://github.com/coreos/etcd/releases/download/v3.5.7/etcd-v3.5.7-linux-amd64.tar.gz succeed etcd v3.
July 27, 2023
Goland+dlv远程调试
环境
远程服务器(Linux):192.168.245.137
本地(macOS):GoLand
目的 远程调试就是使用使用本地 IDE 来调试远程服务器上的服务。本地打断点,调用远程服务的接口。本地就会停在断点。
为什么需要远程调试呢?主要有以下几点原因:
运行环境:有时候本机不具备调试环境,如开发的程序依赖太多组件,而这些组件在当前机器并不被支持 性能:一般远程服务器的配置都比较高,编译速度也比较快。而开发机器的配置相对要低一些,每次修改程序都要重新编译,非常的消耗时间。 硬盘空间:编译时产生大量的中间临时文件,多达10个G左右,如果本机硬盘空间不足的话,则根本就没有办法进行本地调试 我这里用的系统是macOS,硬盘只有128G大小,硬盘空间非常的紧张,vmware虚拟机占用了30个G, 在虚拟机里编译时发现期间产生的临时文件达到6个G,硬盘空间已经不远远不够,所以选择使用远程调试这种方式。
这些调试方式对于k8s 开发者来讲应该比较常见,如 调试 kube-apiserver 组件。
安装 dlv(远程) 首先我们在远程服务器安装 Golang 环境 和 dlv 命令。
这里默认已经安装好了 Golang 环境,版本为1.20,如果没有安装的话,则需要先安装一下,参考 https://go.dev
安装 dlv 命令参考 https://github.com/go-delve/delve/tree/master/Documentation/installation
# go install github.com/go-delve/delve/cmd/dlv@latest 查看一下 dlv 的用法
# dlv -h Delve is a source level debugger for Go programs. Delve enables you to interact with your program by controlling the execution of the process, evaluating variables, and providing information of thread / goroutine state, CPU register state and more.