goland远程调试k8s上容器
上次也遇到过一次需要在k8s的容器里debug程序的情况,当时找了个偷懒的办法绕过去了,
这回绕不过去了,老老实实整一把。主要还是用dlv配合goland的远程调试功能。
选node并同步代码
- 可以用
kubectl top node
查看资源使用情况,选一个相对清闲的node,记住这个主机名nodeName - 可以用scp或者goland的同步功能(最好是直接在node上
git clone
便于分辨脏文件)将本地代码传到node上的某个路径下,记录这个代码路径codePath - 用这个nodeName和codePath创建deployment
准备debug镜像
- 在node上创建一个空文件夹(空文件夹编译更快)
- 保存如下内容到fileName
- 执行
docker build -f fileName -t image:tag .
# 选用go1.19的alpine版本
FROM golang:1.19-alpine
# 设置go代理并下载dlv源码并编译安装
RUN go env -w GOPROXY="https://goproxy.cn,direct" && go mod download github.com/go-delve/delve@v1.9.1
WORKDIR /go/pkg/mod/github.com/go-delve/delve@v1.9.1/
RUN go mod tidy
RUN go mod vendor
RUN go install ./cmd/dlv/
# 替换源并下载gcc,非必须,看编译是否依赖
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk --no-cache add gcc
WORKDIR /go
创建deployment
- 用上面的nodeName codePath image:tag替换yaml中的变量
- 执行
kubectl apply -f deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata