You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Cloud Code和GoLand调试AKS集群Go应用且无需每次推送镜像

基于Cloud Code+GoLand的AKS Go应用免推送镜像远程调试方案

前置准备

  • 本地已安装GoLand的Cloud Code插件、kubectl、容器运行时(Docker/Containerd),已通过az aks get-credentials获取AKS集群操作权限,本地kubeconfig配置正常。
  • Go项目根目录已生成skaffold.yaml配置文件,没有的话可以直接执行skaffold init自动生成。

第一步:修改Skaffold配置关闭镜像推送

Cloud Code底层依赖Skaffold实现Kubernetes应用的构建、部署流程,默认会将构建的镜像推送至远程仓库,只需修改skaffold.yaml的build段配置即可关闭推送:

注意:请确保本地构建的镜像架构和AKS节点架构一致,避免出现镜像兼容问题

apiVersion: skaffold/v4beta1
kind: Config
build:
  artifacts:
  - image: your-go-app-image # 替换为你的应用镜像名称
    context: .
    docker:
      dockerfile: Dockerfile
  # 核心配置:禁用镜像推送
  local:
    push: false
    useBuildkit: true
deploy:
  kubectl:
    manifests:
    - k8s/*.yaml # 替换为你的K8s部署清单路径

第二步:编写带调试能力的Dockerfile

镜像需要内置Delve调试器,同时关闭Go编译器的代码优化和内联,保证调试断点正常生效:

# 构建阶段
FROM golang:1.21 as builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
# 关闭编译优化,适配调试场景
RUN CGO_ENABLED=0 go build -gcflags "all=-N -l" -o main .
# 安装Delve调试器
RUN go install github.com/go-delve/delve/cmd/dlv@latest

# 运行阶段
FROM alpine:3.18
WORKDIR /app
COPY --from=builder /app/main .
COPY --from=builder /go/bin/dlv /usr/local/bin/dlv
# 暴露应用端口和调试端口
EXPOSE 8080 2345
# 用Delve启动应用
CMD ["dlv", "--listen=:2345", "--headless=true", "--api-version=2", "--accept-multiclient", "exec", "./main"]

第三步:调整K8s部署清单配置

部署配置需要开放调试端口,同时给容器开通ptrace权限保障Delve正常运行:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: go-app-debug
spec:
  replicas: 1
  selector:
    matchLabels:
      app: go-app
  template:
    metadata:
      labels:
        app: go-app
    spec:
      containers:
      - name: go-app
        image: your-go-app-image # 和Skaffold里配置的镜像名保持一致
        ports:
        - containerPort: 8080
        - containerPort: 2345
        securityContext:
          capabilities:
            add: ["SYS_PTRACE"] # Delve调试必须的权限
---
apiVersion: v1
kind: Service
metadata:
  name: go-app-service
spec:
  type: ClusterIP
  selector:
    app: go-app
  ports:
  - name: app
    port: 8080
    targetPort: 8080
  - name: debug
    port: 2345
    targetPort: 2345

第四步:启动调试

打开GoLand底部的Cloud Code面板,选择Debug on Kubernetes,Cloud Code会自动完成本地镜像构建、应用部署到AKS、调试端口转发全流程,整个过程不会将镜像推送至远程镜像仓库,等待调试会话启动完成即可直接在代码中下断点调试。

可选优化:开启代码热重载

修改代码后无需重新构建镜像,直接同步到运行的Pod中生效,只需在Skaffold的artifacts段添加同步配置即可:

build:
  artifacts:
  - image: your-go-app-image
    context: .
    docker:
      dockerfile: Dockerfile
    # 新增代码同步配置
    sync:
      infer:
        - "**/*.go"

内容的提问来源于stack exchange,提问作者Lior Kesten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:24:04