You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Goland调试Kubernetes集成/E2E测试及源码?

当然可以用Goland调试Kubernetes集成测试!

作为K8s源码新手,我完全理解你想用IDE调试替代纯命令行的需求——毕竟单步跟踪源码比啃日志高效太多了。下面就手把手教你配置针对TestPodUpdateActiveDeadlineSeconds这个测试的调试环境:

前期准备

  • 先确保你已经在本地执行过至少一次make test-integration命令,这样所有依赖包、测试所需的二进制文件都会提前编译好,避免调试时因为缺失组件卡住
  • 用Goland打开Kubernetes源码的根目录,让IDE自动识别整个项目的模块结构

配置Run/Debug Configuration

  1. 点击Goland顶部菜单栏的Run -> Edit Configurations
  2. 点击左上角的+号,选择Go Test(别选错成Go Build哦)
  3. Configuration标签页里填写以下内容:
    • Package path:直接输入k8s.io/kubernetes/test/integration/pods,或者点击右侧文件夹图标,选中源码里的test/integration/pods目录
    • Test kind:选择Package(因为我们要跑整个包下的指定测试用例)
    • Go tool arguments:填入-v,对应你命令行里的GOFLAGS="-v",用来输出详细的测试日志
    • Program arguments:填入-run ^TestPodUpdateActiveDeadlineSeconds$,对应KUBE_TEST_ARGS的内容,用来指定只运行这个测试用例
  4. 切换到Environment标签页,添加几个关键环境变量:
    • GO111MODULE=on:确保IDE用Go Module模式管理依赖
    • KUBE_TEST_INTEGRATION=true:告诉测试框架这是集成测试,加载对应的配置
    • 如果你的测试需要访问本地集群,还可以添加KUBE_CONFIG_PATH=/path/to/your/kubeconfig(不过大部分集成测试会启动临时的etcd和apiserver,不用额外配置)
  5. 点击Apply保存配置,然后点击调试按钮(绿色虫子图标)就可以启动调试了!

调试小技巧

  • 在测试代码test/integration/pods/pods_test.go里找到TestPodUpdateActiveDeadlineSeconds函数,或者在K8s核心源码(比如pkg/controller/pod下的相关文件)里打断点,测试运行到断点处会自动暂停
  • 调试过程中可以查看变量值、调用栈,甚至修改临时变量来验证你的猜想,和调试普通Go程序完全一致
  • 如果测试启动了临时的etcd、apiserver进程,Goland会自动关联这些进程的调试信息,不用担心跟踪不到核心代码

注意事项

  • 第一次调试启动会比较慢,因为要重新编译测试组件和依赖,请耐心等待
  • 如果遇到“找不到包”的错误,检查Goland的Go Modules配置(File -> Settings -> Go -> Go Modules),确保Module GOPATH指向你的K8s源码根目录
  • 部分集成测试需要特定的系统权限(比如创建网络命名空间),如果遇到权限问题,可以用sudo启动Goland(或者在终端里用sudo运行Goland,具体取决于你的操作系统)

内容的提问来源于stack exchange,提问作者Wenjia Zhang

火山引擎 最新活动