在 Kubernetes 中进行调试
GoLand 支持以下 Kubernetes 调试流程:使用临时容器对 Pod 进行即时故障排除以及使用 Telepresence 进行远程调试,因此您无需离开您的 IDE 即可诊断各种问题。
临时容器
GoLand 支持将 临时容器 附加到正在运行的 Pod,而无需重启。 这样,您可以检查实时的 Kubernetes 环境,运行诊断命令,并在正在运行的 Pod 内直接调查问题。
临时容器会为调试目的临时添加到现有 Pod 中,并与您的应用容器并行运行。 为此,GoLand 会在幕后运行 kubectl debug 命令。 您可以附加自定义调试容器,或使用轻量级的 BusyBox 镜像,其开箱即用地提供 ping、 netstat、 wget 和 top 等常用工具。
有关调试正在运行的 Pod 的更多详情,请参阅 Kubernetes 文档。
将 BusyBox 附加到正在运行的 Pod
打开 服務工具窗口:选择 或按 Alt+8。
展开列出正在运行的 Pod 的节点,右键点击要调试的 Pod,然后在上下文菜单中选择 。
或者,选择所需的 Pod,点击工具栏上的
,并在下拉列表中选择 Attach Busybox。
将自定义容器附加到正在运行的 Pod
打开 服務工具窗口:选择 或按 Alt+8。
展开列出正在运行的 Pod 的节点,右键点击要调试的 Pod,然后在上下文菜单中选择 。
或者,选择所需的 Pod,点击工具栏上的
,并在下拉列表中选择 自定义附加。在 Attach Custom Debug Container 对话框中,使用以下字段自定义用于启动并附加临时容器的
kubectl debug命令:Pod :从下拉列表中选择您要调试的 Pod。
Target :指定所选 Pod 内的目标容器。
Image :开始键入用于调试的镜像名称,然后从建议列表中选择它。
可执行文件 :指定在临时容器启动后在其中运行的 Shell 的绝对路径(例如,BusyBox 使用
/bin/sh,或 Ubuntu 使用/bin/bash)。选项 :为调试容器提供其他配置参数。 示例请参阅 Kubernetes 文档。

单击 Attach to Pod。
当 GoLand 启动新的临时容器并成功将其附加到 Pod 时,会打开 控制台 选项卡,您可以在其中运行命令并检查该 Pod。

如果您 附加 BusyBox ,GoLand 会自动使用 sh。 对于 自定义镜像, IDE 使用 可执行文件 字段中指定的 Shell。
当您删除其所附加的 Pod 时,该容器将被移除。
最近的命令
通过 临时调试容器 菜单附加临时容器时,GoLand 会自动保存相应的 kubectl debug 命令。 稍后您可以在 最近 部分访问并重新运行它。

使用最近命令启动临时容器
打开 服務工具窗口:选择 或按 Alt+8。
展开列出正在运行的 Pod 的节点,并右键点击要调试的 Pod。 在上下文菜单中选择 Ephemeral Debug Containers 以及所需的最近命令。
或者,选择所需的 Pod,点击工具栏上的
,并在下拉列表中选择该最近命令。
管理最近命令
访问最近命令:
在 设置 对话框(Ctrl+Alt+S )中,选择 。
打开 服务 工具窗口 (Alt+8)。 右键点击任意正在运行的 Pod,并在上下文菜单中选择 。
导航到 临时调试容器 部分。
要添加可预先配置并快速启动新临时容器的新命令,请点击
。 在 添加调试形参 对话框中,您可以为
kubectl debug命令指定镜像、可执行文件和选项。要从最近中移除命令,请在表格中选择它并点击
。
要编辑现有命令,请在表格中选择它并点击
。 在 添加调试形参 对话框中,更改
kubectl debug命令的镜像、可执行文件和选项。
Telepresence
Telepresence 是一款工具,它让您访问 Kubernetes 集群中的服务,对其进行调试、进行更改并测试,就像这些服务在您的计算机上本地运行一样。
Kubernetes 插件提供与 Telepresence 的集成,使您能够:
连接至 Telepresence 以通过其 DNS 名称访问集群中的服务。
拦截服务 将集群的流量路由到您的本地环境。
连接 Telepresence
打开 服務工具窗口:选择 或按 Alt+8。
右键点击您的 Kubernetes 集群并选择 连接Telepresence。 或者,点击工具栏中的
。 当系统提示时,请输入用于启动 Telepresence 守护进程的管理员帐户密码。 在 Windows 上,允许执行 telepresence.exe 。
安装 Telepresence 和 Traffic Manager 后,再次点击 连接Telepresence。
您现在可以通过 DNS 名称访问 Kubernetes 集群中的服务,就像集群在您的工作站上运行一样。 例如,如果您有一个应用程序接受 hello-node:9001 请求,可以通过其名称访问。

拦截来自集群的流量
拦截允许您将流向 Kubernetes 集群中服务的流量路由到本地服务。
在工具栏上,点击
(创建新拦截 ),然后点击 创建新拦截。
在打开的窗口中,在 服务 列表中,选择要拦截的工作负载。 这可以是一个 Deployment、ReplicaSet 或 StatefulSet。
在 端口 字段中,指定您的服务的本地实例运行的端口。

如果成功拦截了该服务,您可以在本地访问它并使用 IDE 功能来尝试、调试和分析在集群中运行的应用程序。
退出 Telepresence
Telepresence 一次与一个集群交互,因此在连接到另一个集群之前,您可能需要停止它。 退出 Telepresence 将停止所有活动的拦截。
打开 服務工具窗口:选择 或按 Alt+8。
右键点击您的 Kubernetes 集群并选择 退出Telepresence。 或者,点击工具栏中的
。
以拦截方式运行应用程序
在 GoLand 中,您只需点击一次即可运行本地应用程序,同时将发往 Kubernetes 集群中某个服务的流量重定向到此本地应用程序。
这是通过配置到您的 Kubernetes 集群的隧道(Telepresence 拦截)并 将其作为 启动前任务 添加到您的运行配置中来实现的。 每次您 运行此运行配置时,GoLand 都会创建一个 Telepresence 拦截,使您能够像在本地运行一样调试远程应用程序。
将拦截器添加到您的运行配置中
确保:
您的服务的原始实例已部署并在 Kubernetes 集群中运行,其本地实例的源代码已在您的编辑器中打开。
您的 GoLand 实例已 连接到您的 Kubernetes 集群。
在主类声明附近的标记栏中点击
,然后选择 添加用于远程调试的隧道。 如果 GoLand 中至少连接了一个集群,则此操作可用。

或者,如果您的应用程序已经存在运行/调试配置,请点击运行小部件中的
,并选择 添加用于远程调试的隧道。
在打开的 将Kubernetes 隧道添加到运行配置 窗口中,选择集群和命名空间,然后点击 连接到集群。 当系统提示时,请输入用于启动 Telepresence 守护进程的管理员帐户密码。
如果您已成功连接到集群,请配置拦截参数:
在 服务 列表中,选择要拦截的 workload
在 端口 字段中,指定您的服务的本地实例运行的端口。
可以选择为
telepresence intercept命令指定附加选项。

如果您想查看 Telepresence 命令的输出,请展开 输出 部分。 如果您在连接 Telepresence 时遇到任何错误,此部分将自动展开。
单击 保存配置。 若要检查截取参数,GoLand 将创建一个拦截,然后离开它。
截距参数将以 添加调试隧道 的形式保存在新的运行配置中的启动任务之前。 为了将其与其他运行配置区分开来,此运行配置名称将包含 (Telepresence) 后缀,例如 MyApp (Telepresence)。
您现在可以准备 运行您的应用程序并拦截其远程版本。
以拦截方式运行应用程序
在运行小组件中,选择带有 (Telepresence) 后缀的运行配置。

点击
运行它,或点击
启动调试会话。
这将运行您的本地应用程序,同时将使用上述指定的参数运行 telepresence intercept 命令。
Telepresence 现在会拦截所有进入集群中某个服务的流量,并将其路由到您的本地应用程序。 您可以在本地编写代码并调试您的 intercepted service。
服务 工具窗口将在 遥程拦截 节点下显示创建的拦截。 您的 Kubernetes 集群的根节点还将显示生成的 telepresence 命令以及相关日志。

当您停止此应用程序(通过点击 ),GoLand也会停止拦截(
telepresence leave)。