从IDE调试Kubernetes内部的Go应用程序

当您的应用程序仅适用于kubernetes公开的api时,您只需在调试模式下从IDE启动应用程序并调试应用程序。 但是当您的应用程序需要连接到仅在Kubernetes集群中可用的其他服务或组件时,此解决方案将无法工作。

##存储库

对于本文,我将使用[ kubernetes-go-grpc存储库 ]。 您可以在本文如何开发Go gRPC微服务并在Kubernetes中进行部署中找到更多详细信息和部署说明。 由于本文的重点是调试解决方案,因此我将不介绍该项目。

##解决方案

在生成二进制go时,编译器可以更改操作顺序,添加代码,删除代码或应用转换。 因此,很难将Go行映射到优化的输出。 但是在调试期间,您需要在特定的Go行映射或停止执行。 因此,您需要生成二进制文件而不进行优化。 您可以通过使用gcflags将标志传递给编译器来禁用优化。 执行以下命令以生成二进制文件而不进行优化

GOOS=linux GOARCH=amd64 CGO_ENABLED= 0 go build -gcflags "all=-N -l" -o ./app

这里的-N将禁用优化,而-l将禁用内联。 要进行远程操作,您需要在计算机上启动无头Delve服务器。

dlv --listen=: 40000 --headless= true --api-version= 2 --accept-multiclient exec ./app

然后从您的IDE(在本例中为Goalnd)连接到该服务器。

## Dockerfile

要容器化您的应用程序,请在名为dockerfile.debug的dockerfile下使用

FROM golang
RUN go get -u github.com/go-delve/delve/cmd/dlv
RUN mkdir app
WORKDIR /app
COPY app .
EXPOSE 40000
EXPOSE 8080
ENTRYPOINT [ "/go/bin/dlv" , "--listen=:40000" , "--headless=true" , "--api-version=2" , "exec" , "./app" ]

在这里下载Delve进行调试,复制调试启用二进制文件,将8080端口公开为api正在此端口上运行,并将40000端口公开为Delve服务器将在此端口上启动。 建立您的Docker映像执行

docker build -f Dockerfile.debug -t api-debug

要使用本地Docker存储库并在kubernetes中进行部署,请执行以下命令

eval $(minikube docker-env) \
&& kubectl run --rm -i debug-api-deploy --image=api-debug --image-pull-policy=Never

要知道您的吊舱名称执行

kubectl get pods

并找到您的api pod名称。 您的Pod名称应类似于debug-api-deploy-867bd55f4d-gzh5c

现在,您需要转发端口8080和40000,以便可以远程连接Pod。

kubectl port-forward <YOUR_POD_NAME> 40000 : 40000
kubectl port-forward <YOUR_POD_NAME> 8080 : 8080

##配置IDE

在本文中,您将使用Goland,但它将与其他IDE相似地工作。 由于已激活端口转发,因此您需要创建一个远程调试并将其指向localhost:40000。

从那时起,您就可以在我们的本地IDE中设置Breakpoint,它将与Kubernetes集群中部署的`Delve`调试器进行通信,以允许调试您的应用程序。

##最后

在开始执行代码之前,该应用程序将等待您的IDE连接到它,这样您就可以从头开始调试。 通常,每次您在IDE端停止调试或断开连接时,Pod都会停止在完成状态。

快乐的编码.... :)

From: https://hackernoon.com/debugging-go-application-inside-kubernetes-from-ide-h5683xeb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值