将调试程序附加到 Kubernetes pod

Cloud Code VS Code 扩展程序支持将调试程序附加到 Kubernetes pod。您只需拥有一个可调试容器和一个类型为 cloudcode.kubernetes附加配置

设置容器

您必须确保要调试的容器已做好调试准备。以下是针对特定语言的容器设置说明。

Node.js

  • 使用 --inspect=<debugPort> 启动 Node.js 应用,其中 debugPort 来自附加配置。例如:CMD ["node", "--inspect=9229", "index.js"]

Python

  • 确保您的机器和容器中安装了 ptvsd 模块。
  • 通过 ptvsd 启动 Python 应用。将指定的端口与附加配置中的 debugPort 字段相匹配。例如:
    CMD ["python", "-m", "ptvsd", "--port", "", "app.py"]
    

Go

  • 确保已在计算机和 Go 容器中安装了 dlv 文件包。
  • 通过 dlv debug 启动 Go 应用。

    启动命令中指定的端口应与附加配置中的 debugPort 属性值相同。例如:

    CMD ["dlv", "debug", "--headless", "--listen=:<debugPort>", "--log"]
    

    问题排查提示:调试 Go 应用时,应用将挂起并等待连接调试器。请连接调试器以使该服务启动。

Java

  • 确保您的机器上已安装 JVM。
  • 使用 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=<debugPort>,quiet=y 启动 Java 应用,其中 debugPort 来自附加配置

    例如,如需在调试模式下启动 Java 应用,并侦听端口 debugPort 上的连接,请使用以下语句:

    ENTRYPOINT ["java","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=<debugPort>,quiet=y", "-jar", "my-app-1.0.jar"]
    

.NET Core

  • 确保在 Kubernetes 容器中安装了 Microsoft 的 .NET Core 命令行调试器 vsdbg

    例如:

    RUN apt-get update 
    && apt-get install -y --no-install-recommends unzip
    && apt-get install -y procps
    && rm -rf /var/lib/apt/lists/*
    && curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l /vsdbg

设置附加配置

如需从 VS Code 附加到可调试容器,您需要有一个 cloudcode.kubernetes 类型的附加配置

没有 .vscode/launch.json 文件的项目

如果项目的 .vscode 文件夹中没有 launch.json 文件,则可以使用“Debug”面板添加一个。

  1. 导航到“Debug”面板(使用左侧任务栏中的调试视图图标 “调试”图标),然后从下拉菜单中选择 Add Configuration

    使用调试面板添加配置

  2. 选择 Cloud Code: Kubernetes 作为环境。

    将 Cloud Code Kubernetes 设置为环境

  3. 选择 Attach to Kubernetes Pod 选项。 选择 Kubernetes 配置选项

  4. 选择相应的编程语言。

    选择首选编程语言

  5. 这将为您的项目创建并打开一个 launch.json 文件,并为您创建一项连接配置。现在,您可以更新此文件中的配置属性,以匹配项目的配置属性。如需详细了解配置属性,请参阅这份表格

    所打开的 launch.json 文件中显示的配置属性

具有 .vscode/launch.json 文件的项目

如需向现有 .vscode/launch.json 添加新的附加配置,请按以下步骤操作:

  1. 打开 launch.json 文件。
  2. 按下调用代码段 Intellisese 的 Add Configuration 按钮。
  3. 选择所需语言的 Cloud Code: Attach to Kubernetes Pod 代码段。
  4. 这将添加一个附加配置。现在,您可以更新此配置中的属性,以匹配项目的属性。如需详细了解配置属性,请参阅这份表格

    添加 Kubernetes 附加配置

配置属性

属性 说明
debugPort 容器中使用的调试端口。
podSelector 用于选择调试 pod 的一组键值对(如需了解详情,请参阅选择器指南)。典型的 podSelector 通常如下所示:

"podSelector": { "app": <deployment-name> }

localRoot 包含待调试程序的本地目录的路径。 默认为 ${workspaceFolder}。
remoteRoot 包含待调试程序的远程目录的绝对路径(在 Kubernetes 容器中)。

将调试程序附加到 Kubernetes pod

设置完配置和容器后:

  1. 打开 VS Code 的调试视图 “调试”图标
  2. 使用 F5 选择和启动配置。
    • 在调试过程中,localhost:${debugPort} 将通过端口转发到容器中的 debugPort
  3. 调试会话现已设置成功!
  4. 此时,您可以执行在调试本地代码时通常会执行的所有任务,例如设置断点和单步执行代码。
  5. 如需检查变量和堆栈信息,请使用调试边栏。 如需与调试会话进行交互,请使用底部窗格调试器中的调试控制台

    应用已在断点处暂停,并且变量和调用堆栈部分已填充相应范围内的值

  6. 如需结束调试会话,请点击调试工具栏上的停止图标。

附加到 Kubernetes pod 与调试 Kubernetes 应用

关联到 Kubernetes Pod 调试 Kubernetes 应用
调试单个 Kubernetes pod 调试应用中所有可调试的容器
在调试之前,必须确保应用在 Kubernetes pod 中运行。 在 Kubernetes 集群上运行应用并附加调试程序。
使用类型为“cloudcode.kubernetes”的配置 (.vscode/launch.json) 并请求“附加”。 使用类型为“cloudcode.kubernetes”的配置 (.vscode/launch.json) 并请求“启动”。
启动与附加配置
配置示例:

{
  "name": "Attach to Kubernetes Pod (NodeJS)",
  "type": "cloudcode.kubernetes",
  "request": "attach",
  "language": "Node",
  "debugPort": 9229,
  "podSelector": {
     "app": "hello-world"
  },
  "localRoot": "${workspaceFolder}",
  "remoteRoot": "/app"
}
配置示例:

{
  "name": "Run/Debug on Kubernetes",
  "type": "cloudcode.kubernetes",
  "request": "launch",
  "skaffoldConfig": "${workspaceFolder}/skaffold.yaml",
  "watch": true,
  "cleanUp": true,
  "portForward": true
}
此配置不能用于运行应用 此配置可用于运行或调试应用。
此配置特定于语言 此配置与语言无关
无专用命令 “Debug on Kubernetes”命令

获取支持

如需发送反馈,请在 GitHub 上报告问题,或者在 Stack Overflow 上提问。