[k8s源码]12.远程调试dlv

news2024/9/21 14:40:17

在Windows/Mac宿主机上,使用GoLand的IDE进行开发,但是如何将这些代码直接运行在k8s集群中并看到运行效果呢,这里有一个远程调试工具dlv。

图中展示了dlv的工作方式。GoLand IDE中包含Editor(编辑器)和Debugger(调试器)组件,其中Debugger组件集成了dlv。dlv作为客户端,通过网络连接到在Linux虚拟机中运行的各个Kubernetes组件。在K8s Control Plane(控制平面)虚拟机中,API Server、CC Manager和Scheduler等组件都集成了dlv服务端。在K8s Compute Machine(计算节点)虚拟机中,Kubelet和Kube Proxy组件也集成了dlv服务端。GoLand IDE中的dlv客户端可以连接到任何一个K8s组件中的dlv服务端,实现远程调试。这种设置允许开发者在本地IDE中直接调试运行在远程虚拟机中的Kubernetes各个组件,大大方便了K8s的开发和调试过程。

在远程linux环境下载配置go

我的windows上的go版本是1.22.5,所以选择1.22.5的go安装在linux上。不同版本的 Go 编译器可能会产生略微不同的调试信息。某些 Go 语言特性或标准库函数可能在不同版本间有变化。然而,小版本差异(如 1.19.1 和 1.19.3)通常不会造成大问题。但是主版本号(如 1.18 和 1.19)最好保持一致。

wget https://dl.google.com/go/go1.22.5.linux-amd64.tar.gz

 解压并配置环境变量:

tar -zxvf go1.22.5.linux-amd64.tar.gz -C /usr/local/

在/.bashrc 文件中添加以下go的环境变量:

export GOROOT=/usr/local/go
export GOPATH=/go
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
export GOPROXY="https://goproxy.cn,https://mirrors.aliyun.com/goproxy,direct"
export GO111MODULE=on

这里的/go目录不会自己创建,需要新建GOPATH对应的目录。

随后验证go环境是否配置成功

[root@master local]# go env
GO111MODULE='on'
GOARCH='amd64'
GOBIN=''
GOCACHE='/root/.cache/go-build'
GOENV='/root/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMODCACHE='/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/go'
GOPRIVATE=''
GOPROXY='https://goproxy.cn,https://mirrors.aliyun.com/goproxy,direct'
GOROOT='/usr/local/go'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/usr/local/go/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.22.5'
GCCGO='gccgo'
GOAMD64='v1'
AR='ar'
CC='gcc'
CXX='g++'
CGO_ENABLED='1'
GOMOD='/dev/null'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build1476964916=/tmp/go-build -gno-record-gcc-switches'
go-delve安装

Delve 是专门为 Go 语言设计的调试器,它深度集成了 Go 的运行时和特性,能够提供比通用调试器更好的 Go 调试体验。通过以下命令安装dlv最新版,你可以更改最后的版本号来安装指定的版本。

go install github.com/go-delve/delve/cmd/dlv@latest
dlv
>
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.

The goal of this tool is to provide a simple yet powerful interface for debugging Go programs.

Pass flags to the program you are debugging using `--`, for example:

`dlv exec ./hello -- server --config conf/config.toml`

Usage:
  dlv [command]

Available Commands:
  attach      Attach to running process and begin debugging.
  completion  Generate the autocompletion script for the specified shell
  connect     Connect to a headless debug server with a terminal client.
  core        Examine a core dump.
  dap         Starts a headless TCP server communicating via Debug Adaptor Protocol (DAP).
  debug       Compile and begin debugging main package in current directory, or the package specified.
  exec        Execute a precompiled binary, and begin a debug session.
  help        Help about any command
  test        Compile test binary and begin debugging program.
  trace       Compile and begin tracing program.
  version     Prints version.

Additional help topics:
  dlv backend    Help about the --backend flag.
  dlv log        Help about logging flags.
  dlv redirect   Help about file redirection.

Use "dlv [command] --help" for more information about a command.
kubernetes编译打包

运行中的K8s集群像是一个正在营业的餐厅。它正在为顾客(在K8s中就是应用程序)提供服务,一切都在正常运行。可以调试的K8s源码像是餐厅的设计图纸和食谱。你可以查看它,修改它,但这些修改不会立即影响到正在营业的餐厅。
这两者是独立的,你不希望在修改"食谱"(源码)时意外影响到正在用餐的客人(运行中的应用)。假设你想要为K8s添加一个新功能。你会在源码中进行修改(相当于修改食谱)。编译修改后的源码(相当于在厨房里试做新菜品)。在测试环境中运行新版本(相当于让员工品尝新菜品)。如果一切顺利,才会考虑更新生产环境的集群(相当于将新菜品添加到正式菜单)。

先下载kubernetes源码,注意要下载git文件,而不是zip文件,因为这种方法下载的是仓库的当前状态,不包含Git历史记录。

mkdir -p $GOPATH/src/github.com/kubernetes
cd $GOPATH/src/github.com/kubernetes
git clone https://github.com/kubernetes/kubernetes.git
//进入kubernetes的目录下
cd kubernetes
git checkout v.1.23.1

显示如下结果,detached HEAD状态意味着你当前不在任何分支上,而是直接指向一个特定的提交。在这种状态下可以查看代码、进行实验性更改,甚至创建新的提交。这些更改不会影响任何现有的分支。如果想在这个版本的基础上进行开发或保留您的更改,可以创建一个新的分支。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2051719.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习基础之前馈神经网络

目录 基本结构和工作原理 神经元和权重 激活函数 深度前馈网络 应用场景 优缺点 深度前馈神经网络与卷积神经网络(CNN)和循环神经网络(RNN)的具体区别和联系是什么? 具体区别 联系 如何有效解决前馈神经网络…

探索Python的工业通信之光:pymodbus的奇妙之旅

文章目录 探索Python的工业通信之光:pymodbus的奇妙之旅背景:为何选择pymodbus?pymodbus是什么?如何安装pymodbus?5个简单的库函数使用方法3个场景使用示例常见bug及解决方案总结 探索Python的工业通信之光&#xff1a…

炒作将引发人工智能寒冬

我们似乎经常看到人工智能的进步被吹捧为机器真正变得智能的一大飞跃。我将在这里挑选其中的一个例子,并确切解释为什么这种态度会为人工智能的未来埋下隐患。 这很酷,这是一个非常困难且非常具体的问题,这个团队花了3 年时间才解决。他们一定…

结合GPT与Python实现端口检测工具(含多线程)

端口检测器是一个非常实用的网络工具,它主要用于检测服务器或本地计算机上的特定端口是否处于开放状态。通过这个工具,你可以快速识别和诊断网络连接问题,确保关键服务的端口能够正常接收和处理数据。这对于网络管理员和开发者来说是一个不可…

【Linux修行路】基础I/O——重定向的实现原理

目录 ⛳️推荐 一、再来理解重定向 1.1 输出重定向效果演示 1.2 重定向的原理 1.3 dup2 1.4 输入重定向效果演示 1.5 输入重定向代码实现 二、再来理解标准输出和标准错误 2.1 同时对标准输出和标准错误进行重定向 2.2 将标准输出和标准错误重定向到同一个文件 三、…

版本更新 《坚持学习计时器》软件V3.1 更新内容:自动实时显出

🌟 嗨,我是命运之光! 🌍 2024,每日百字,记录时光,感谢有你一路同行。 🚀 携手启航,探索未知,激发潜能,每一步都意义非凡。 版本更新 《坚持学习…

【统计字符数量】统计出每种字符的数量

输入一行字符&#xff0c;分别统计出其中英文字母、空格、数字和其他字符的个数&#xff0c;使用C语言实现&#xff0c; 具体代码&#xff1a; #include<stdio.h>int main(){char c;int letters0,space0,digit0,others0;printf("请输入一行字符&#xff1a; "…

SpringBoot整合Junit单元测试(解决空指针异常)

1.依赖 依赖只需要导入Spring-Boot-starter、Spring-Boot-test&#xff08;不需要另导入junit依赖&#xff09; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test…

Docker的安装和基本用法

&#x1f4a5; 该系列属于【SpringBoot基础】专栏&#xff0c;如您需查看其他SpringBoot相关文章&#xff0c;请您点击左边的连接 目录 一、在linux虚拟机上安装Docker 1. 卸载旧版本Docker 2. 配置Docker的yum库 3. 安装Docker 4. 启动和校验 二、Docker基本用法 1. Do…

Unity项目优化记录

背景&#xff1a;测试反馈项目组游戏存在内存泄露&#xff0c;来找到中台这边协调排查。好家伙&#xff0c;跑了两次看了内存快照&#xff0c;再看资源组织和管理方式&#xff0c;存在的问题确实比较多。 1、修复内存泄露&#xff1a;结算界面由于资源引用丢失导致整个面板不会…

无人机水面影像几何校正拼接镶嵌

一批水面数据3千张&#xff0c;原图如下所示&#xff1a; 使用“无人机水面影像拼接算法”进行几何校正和匀色镶嵌处理&#xff0c;输出结果如下所示&#xff1a; 镶嵌一张图&#xff1a; 局部放大图&#xff1a; 数据代处理联系方式&#xff1a;

重定向printf、或者USARTX_printf()(hal库)

目录 重定向printf USARTX_printf() 打开工程模板 复制工程模板 配置 重定向printf 在usart.h添加 #include "stdio.h" 在usart.c添加 /* USER CODE BEGIN 1 */ int fputc(int ch,FILE *f) {HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,HAL_MAX_DELAY)…

使用html-docx-js + fileSaver实现前端导出word

因为html-docx-js是16年的老库了&#xff0c;它代码里面用到的with语法现在严格模式不允许&#xff0c;用npm直接引入会报错&#xff0c;所以我们需要用其它方式引入 首先要将html-docx-js的代码放到项目中 html-docx-js/dist/html-docx.js at master evidenceprime/html-do…

java 日期

Date SimpleDateFormat Date d new Date();System.out.println(d);//输出当前时间long it d.getTime();//返回自1970年1月1日00:00:00到date的时间Date d2 new Date(it);//将毫秒值转换为时间System.out.println(d2);d2.setTime(it1000);//将d2转换为输入参数对应的时间Sys…

vue 后台管理 之 状态管理 vuex 的使用

幸福是一种能力 文章目录 一、数据驱动视图二、VueX 数据公共池 一、数据驱动视图 我们都知道 vue 之所以好用&#xff0c;是因为官方帮我们做了数据驱动视图初始化时将数据和视图进行绑定&#xff0c;通过 watcher 来监听数据的变化&#xff0c;当数据变化时&#xff0c;会触…

数据结构(邓俊辉)学习笔记】优先级队列 07——堆排序

1.算法 作为完全二叉堆的一个应用&#xff0c;这节来介绍堆排序算法。 是的&#xff0c;谈到优先级队列&#xff0c;我们很自然地就会联想到排序。因为就其功能而言&#xff0c;包括完全二叉堆在内的任何一种优先级队列都天生地具有选取功能&#xff0c;也就是选取其中的最大…

【微服务】SpringCloud 1-9章

1 从Boot和Cloud版本选型开始说起 1.1 Springboot版本选择 1.1.1 git源码地址 https://github.com/spring-projects/spring-boot/releases/ 1.1.2 官网看Boot版本 1.1.3 SpringBoot3.0崛起 https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-N…

SpringSecurity实现登录功能实战!!!

实现思路 登录 ①自定义登录接口 调用ProviderManager的方法进行认证 如果认证通过生成jwt 把用户信息存入redis中 ②自定义UserDetailsService 在这个实现类中去查询数据库 注意配置passwordEncoder为BCryptPasswordEncoder 退出登录&#xff0c;删除redis中的数…

vuex 辅助函数用法:mapGetters,mapMutations,mapActions

1 mapGetters:用法 <template> //普通用法 <p> {{ $store.getters.getCounter }} </p> //辅助函数用法 <p> {{ getCounter }} </p> </template> import { mapGetters } from vuex export default{ name:"homeView&q…

损失函数-回归模型|分类模型

损失函数 Loss Function 回归模型均方误差&#xff08;MSE: Mean Squared Error&#xff09;均方根误差&#xff08;RMSE&#xff1a;Root Mean Squared Error&#xff09;平均绝对误差&#xff08;MAE: Mean Absolute Error&#xff09;Huber损失 分类模型交叉熵损失&#xff…