我目前有一个使用很多的 go 应用程序
fmt.printf
。每当该应用程序在 Pod 中运行时,我都可以通过执行以下操作来取回日志
kubectl logs podname
但是我还需要集成远程调试。我需要使用
dlv
来允许我的 ide(GoLand) 远程连接到 pod。它通过端口 40000 连接到 Pod。
此外,当 Pods 映像运行时,它会公开端口 40000,即 docker 文件中包含此端口 40000
我的 minikube 中也有类似这样的服务
apiVersion: v1
kind: Service
metadata:
name: mydebug
spec:
type: ClusterIP
selector:
app: fooapp
ports:
- protocol: TCP
port: 40000
targetPort: 40000
name: delve
现在当我这样做时
kubectl logs podname
我只得到这个
API server listening at: [::]:40000
2022-10-30T21:18:57Z warning layer=rpc Listening for remote connections (connections are not authenticated nor encrypted)
有什么办法可以取回我的日志吗?何
您可以使用
--continue
exec 标志,在启动时继续调试进程,这将导致持续的日志。
因此开始深入研究,例如与:
dlv --listen=:2345 --headless exec your/app --continue
如果没有
--continue
标志,delve 将等待远程连接并停止您的应用程序。使用 --continue
标志,应用程序将已经启动。
来自
dlv help exec
:
...
Usage:
dlv exec <path/to/binary> [flags]
Flags:
--continue Continue the debugged process on start.
...