goland IDE和delve调试位于kubernetes集群中的go程序

1 概述:

在本地电脑的ide中调试远程go程序,IDE为goland-2019.3,go程序暴露的http接口为GET /ip,go程序是以pod的形式运行在kubernetes集群中。当客户端请求到达目标go程序时,本地的IDE断点生效。

2 delve:

2.1简介

delve是一款go程序调式工具(git clone https://github.com/go-delve/delve.git),是一个简单易用的二进制程序,可用来启动目标go程序,进入dlv环境后可通过各种内置命令进行调试目标go程序。

2.2下载二进制文件

#下载的文件位于$GOPATH/bin/目录下
go get -u github.com/go-delve/delve/cmd/dlv

2.3 运行方式

方式1:
$GOPATH/bin/dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec /目标go二进制文件 --continue

方式2:
#先启动目标go程序,得到pid再运行以下命令
dlv attach 目标go程序的pid --headless --listen=:2345 --api-version=2 --accept-multiclient

2.4 其他说明

2.4.1 编译目标go程序时需要带上参数-gcflags=“all=-N -l”

2.4.2 推荐B站的一个delve的简易教程。

https://www.bilibili.com/video/BV1pb411i7nw?from=search&seid=1674747649731508669

3 go程序:

https://github.com/gzlj/http-demo

go程序暴露的http接口为:GET /ip


4 制作docker镜像:

4.1编译go程序

#cd $GOPATH/src/github.com/gzlj/http-demo/cmd/gracehttp-demo
#编译目标go程序时需要带上参数-gcflags="all=-N -l"
go build -gcflags="all=-N -l" -o main

4.2 编写Dockerfile

#将目标go程序的二进制可执行文件main和dlv可执行文件放到Dockerfile的目录
在这里插入图片描述

4.3 执行docker build命令构建镜像

docker build -t "192.168.1.70:5000/http:dlv" .

5 部署go程序至kubernetes集群

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
  namespace: default
spec:
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - command:
        - /dlv
        - --listen=:2345
        - --headless=true
        - --api-version=2
        - --accept-multiclient
        - exec
        - /main
        - --continue
        image: 192.168.1.70:5000/http:dlv
        imagePullPolicy: Always
        name: web
        #容器需要SYS_PTRACE 或 直接作为特权容器
        securityContext:
          capabilities:
            add:
            - SYS_PTRACE

---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: web
  name: web
  namespace: default
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  - name: dlv
    port: 2345
    protocol: TCP
    targetPort: 2345
  type: NodePort
  selector:
    app: web

在这里插入图片描述
成功部署后,得知节点的31883端口映射至容器的2345端口(delve程序监听的端口)。

6 goland开启remote debug模式

6.1 新增go remote debug配置

在菜单栏中进行点击 Run —> Edit Configurations —> 新增 —> Go Remote —> 确定。

在这里插入图片描述

6.2 新增go remote debug配置

在代码/ip接口的http handler方法中开启断点,点击IDE的虫子图标以debug方式运行代码。
在这里插入图片描述

7 访问目标go程序并查看IDE的端点

以kubernetes node port方式访问go程序的/ip接口

#192.168.1.71是kubernetes集群的节点,31175是go程序的service NodePort。
curl 192.168.1.71:31175/ip && echo

在这里插入图片描述

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值