【问题标题】:is it possible to remote debugging java program in kubernetes using service name是否可以使用服务名称在 kubernetes 中远程调试 java 程序
【发布时间】:2022-02-08 16:03:30
【问题描述】:

现在我正在使用 kubectl 代理转发在 kubernetes(v1.15.2) 中远程调试我的 java 程序,如下所示:

kubectl port-forward soa-report-analysis 5018:5018 -n dabai-fat

我可以使用 intellij idea 远程连接我的 localhost 端口 5018 来远程调试远程数据中心 kubernetes 集群中的 pod,但现在我面临的一个问题是每次我必须在 pod 升级后更改 pod 名称以重新调试,任何如何保持稳定的调试渠道?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    我可以建议任何想在 Kubernetes 中调试 Java(以及 Go、NodeJS、Python、.NET Core)应用程序的方法的人看看 skaffold
    它是一个简单的 CLI 工具,它使用您曾经使用的现有构建和部署配置。 无需额外安装集群,无需修改现有部署配置等
    安装 CLI:https://skaffold.dev/docs/install/
    打开您的项目,然后尝试:

    skaffold init
    

    这将使 skaffold 创建

    skaffold.yaml

    (skaffold 唯一需要的配置文件)

    然后

    skaffold debug
    

    它将使用您现有的构建和部署配置来构建和部署容器。如果需要,必要的参数将被注入到容器中,端口转发将自动启动。

    有关更多信息,请查看: https://skaffold.dev/docs/workflows/debug/

    这可以提供一种一致的方式来调试您的应用程序,而不必一直了解当前的 pod 或部署状态。

    【讨论】:

      【解决方案2】:

      我使用这个脚本来改进我的工作流程:

      #!/usr/bin/env bash
      
      
      set -u
      
      set -e
      
      set -x
      
      kubectl get pods -n dabai-fat | grep "soa-illidan-service"
      
      POD=$(kubectl get pod -l k8s-app=soa-illidan-service -o jsonpath="{.items[0].metadata.name}")
      
      kubectl port-forward ${POD} 11014:11014
      

      此脚本自动获取 pod 名称并打开远程调试。

      【讨论】:

      • 活跃度探头你是怎么保养的?它会在一段时间后重新启动。
      【解决方案3】:

      我们可以使用 nodeport 类型的服务来解决您的问题。这是一个示例 yaml 文件:-

      apiVersion: v1
      kind: Service
      metadata:
        name: debug-service
      spec:
        type: NodePort
        selector:
          app: demoapp
        ports:
            # By default and for convenience, the `targetPort` is set to the same value as the `port` field.
          - port: 8001  // port which exposed in DockerFile for debugging purpose
            targetPort: 8001
            # Optional field
            # By default and for convenience, the Kubernetes control plane will allocate a port from a range (default: 30000-32767)
            nodePort: 30019
      

      在 IntelliJ 中,您将能够连接到

      主机:本地主机

      端口:30019

      【讨论】:

      • 你的方法很好,但我认为我的方法更简单。@Shiwani
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 2016-01-14
      • 2013-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多