Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > goland远程调试k8s上容器

goland远程调试k8s上容器的实现

作者:-_-void

本文主要介绍了goland远程调试k8s上容器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

上次也遇到过一次需要在k8s的容器里debug程序的情况,当时找了个偷懒的办法绕过去了,这回绕不过去了,老老实实整一把。主要还是用dlv配合goland的远程调试功能。

选node并同步代码

准备debug镜像

# 选用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:
  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

远程调试需要网络通信,创建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上容器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文