将调试程序附加到 Kubernetes pod

Cloud Code 支持将调试程序附加到 Node.js、Python、Go、Java 和 .NET 版 Kubernetes pod。您只需要一个可调试的容器以及一个 cloudcode.kubernetes 类型的附加配置

如需了解如何附加到 Kubernetes pod 与调试 Kubernetes 应用不同,请参阅附加到 Kubernetes pod 与调试 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。
  • 使用以下选项启动 Java 应用,其中 debugPort 来自连接配置

    -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=,quiet=y
    

    例如,如需在调试模式下启动 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

设置附加配置

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

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

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

  1. 导航到“Debug”面板(使用活动栏中的调试视图图标 “调试”图标),然后从下拉菜单中选择添加配置

    使用调试面板添加配置

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

    将 Cloud Code Kubernetes 设置为环境

  3. 选择 Attach to Kubernetes Pod 选项

    选择 Kubernetes 配置选项

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

    选择首选编程语言

    这样将为您的项目创建并打开一个 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. 打开“调试”视图 “调试”图标
  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** 命令。
Watch 模式不可用,因此进行更改后,请手动重启调试程序。 Watch 模式允许 Cloud Code 在您保存更改后重启调试程序。

获取支持

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