Kubernetes 中的 Dapr 调试面板

在 Kubernetes 中如何在 Dapr 控制面板中进行调试

概述

有时有必要了解 Dapr 控制面板(也称为 Kubernetes 服务),包括 dapr-sidecar-injectordapr-operatordapr-placementdapr-sentry,尤其是当您诊断您的 Dapr 应用程序并想知道 Dapr 本身是否出了问题时。 此外,你可能正在为 Kubernetes 中的 Dapr 开发一个新功能,并且想调试你的代码。

这份指南将展示在 Kubernetes 集群中如何使用 Dapr 调试二进制文件对 Dapr 服务进行调试。

调试 Dapr Kubernetes 服务

先决条件

1. 构建 Dapr 调试二进制文件

为了调试 Dapr Kubernetes 服务,需要重新构建所有的 Dapr 二进制文件 和 Docker 镜像来禁用编译器优化。 要做到这一点,请运行以下命令:

  1. git clone https://github.com/dapr/dapr.git
  2. cd dapr
  3. make release GOOS=linux GOARCH=amd64 DEBUG=1

在Windows上下载MingGW,并使用ming32-make.exe代替make

在上述命令中,“DEBUG” 设定为“1”可禁用编译器优化。 ‘GOOS=linux’ 和 ‘GOARCH=amd64’ 也是必要的,因为二进制文件将在下一步中打包到基于 Linux 的 Docker 镜像。

可以在 “dapr” 目录下的 ‘dist/linux_amd64/debug’ 子目录下找到二进制文件。

2. 构建 Dapr 调试 Docker 镜像

使用下面的命令将调试二进制文件打包成 Docker 镜像。 在此之前,你需要登录到你的 docker 账号,如果还没有 docker 账号,可以在 “https://hub.docker.com/” 中注册。

  1. export DAPR_TAG=dev
  2. export DAPR_REGISTRY=<your docker.io id>
  3. docker login
  4. make docker-push DEBUG=1

一旦 Dapr 镜像构建完成并推送到 Docker hub 中,你就已经做好了在你的 Kubernetes 中重新安装 Dapr 的准备。

3. 安装 Dapr 调试二进制文件

如果您的 Kubernetes 集群中已经安装了 Dapr,请先卸载它:

  1. dapr uninstall -k

我们将使用 “helm” 来安装 Dapr 调试二进制文件。 接下来的章节,我们将使用 Dapr Operator 来演示在 Kubernetes 环境中如何配置、安装和调试 Dapr 服务。

首先配置一个包含这些选项的values文件:

  1. global:
  2. registry: docker.io/<your docker.io id>
  3. tag: "dev-linux-amd64"
  4. dapr_operator:
  5. debug:
  6. enabled: true
  7. initialDelaySeconds: 3000

注意

如果你需要调试 Dapr 服务的启动时间,你需要考虑将 initialDelaySeconds 配置为一个非常长的时间值,例如 “3000” 秒。 除此之外的情况,请将其配置为一个短时间值,如:“3”秒。

如果你还没有,那么请进入最初在本指南中从GitHub克隆的’dapr’目录,并执行以下命令:

  1. helm install dapr charts/dapr --namespace dapr-system --values values.yml --wait

4. 转发调试端口

要调试目标 Dapr 服务 (在这种情况下为 Dapr Operator),其预配置的调试端口需要是对你的 IDE 可见。 为了做到这一点,我们需要首先找到目标 Dapr 服务的节点:

  1. $ kubectl get pods -n dapr-system -o wide
  2. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  3. dapr-dashboard-64b46f98b6-dl2n9 1/1 Running 0 61s 172.17.0.9 minikube <none> <none>
  4. dapr-operator-7878f94fcd-6bfx9 1/1 Running 1 61s 172.17.0.7 minikube <none> <none>
  5. dapr-placement-server-0 1/1 Running 1 61s 172.17.0.8 minikube <none> <none>
  6. dapr-sentry-68c7d4c7df-sc47x 1/1 Running 0 61s 172.17.0.6 minikube <none> <none>
  7. dapr-sidecar-injector-56c8f489bb-t2st9 1/1 Running 0 61s 172.17.0.10 minikube <none> <none>

然后使用 kubectl 的 port-forward 命令将内部调试端口曝光到外部 IDE:

  1. $ kubectl port-forward dapr-operator-7878f94fcd-6bfx9 40000:40000 -n dapr-system
  2. Forwarding from 127.0.0.1:40000 -> 40000
  3. Forwarding from [::1]:40000 -> 40000

全部完成。 现在您可以从您喜欢的 IDE 中使用40000端口开启远程调试了。

相关链接