目录选node并同步代码准备debug镜像创建deployment创建svc上次也遇到过一次需要在k8s的容器里debug程序的情况,当时找了个偷懒的办法绕过去了,这回绕不过去了,老
上次也遇到过一次需要在k8s的容器里debug程序的情况,当时找了个偷懒的办法绕过去了,这回绕不过去了,老老实实整一把。主要还是用dlv配合Goland的远程调试功能。
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
用上面的nodeName codePath image:tag替换yaml中的变量
执行kubectl apply -f deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s-app: go-env
name: go-env
spec:
selector:
matchLabels:
k8s-app: go-env
template:
metadata:
creationTimestamp: null
labels:
k8s-app: go-env
spec:
containers:
- image: ${ImageTag}
imagePullPolicy: IfNotPresent
name: go-env
stdin: true
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
tty: true
volumeMounts:
- mountPath: /go/src/code
name: code
dnsPolicy: ClusterFirst
nodeName: ${NodeName} # node name
restartPolicy: Always
schedulerName: default-scheduler
volumes:
- hostPath:
path: ${CodePath} # /path/to/code
type: Directory
name: code
远程调试需要网络通信,创建svc将deploy的2345暴露到node的32345上
apiVersion: v1
kind: Service
metadata:
name: go-env
spec:
externalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- nodePort: 32345
port: 2345
protocol: tcp
targetPort: 2345
selector:
k8s-app: go-env
sessionAffinity: None
type: NodePort
远程启动dlv
到此这篇关于goland远程调试k8s上容器的实现的文章就介绍到这了,更多相关goland远程调试k8s上容器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: goland远程调试k8s上容器的实现
本文链接: https://www.lsjlt.com/news/193788.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0