oc-命令根据服务名而不是pod-name将本地端口转发到远程调试端口

时间:2019-06-13 15:36:02

标签: openshift remote-debugging

为了最小化使用intelliJ将调试会话附加到远程Pod(部署在OpenShift上的微服务)的建立时间, 我正试图充分利用远程调试配置的“启动前”设置。

在使用以下命令行参数将调试器附加到JVM Socket之前,我使用了2个步骤(此设置有效,但需要编辑每个新的部署);


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

步骤1: 外部工具:带有参数的oc:


    login
    https://url.of.openshift.environment
    --username=<login>
    --password=<password>

步骤2: 外部工具:带有参数的oc:


    port-forward
    microservice-name-65-6bhz8   -> this needs to be changed after every deploy
    8000
    3000
    3001 

背景信息: 这是spec> containers> env下他的YAML服务中的信息:

- name: JAVA_TOOL_OPTIONS
              value: >-
                -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n            
                -Dcom.sun.management.jmxremote=true
                -Dcom.sun.management.jmxremote.port=3000            
                -Dcom.sun.management.jmxremote.rmi.port=3001
                -Djava.rmi.server.hostname=127.0.0.1            
                -Dcom.sun.management.jmxremote.authenticate=false
                -Dcom.sun.management.jmxremote.ssl=false

随着Pod名称的每次更改(重新部署),我正在尝试找到一个oc命令,该命令可用于端口转发而无需提供Pod名称。(例如基于服务名称) 或者是一个完全其他的解决方案,允许我按1个按钮来设置调试会话(最好是intelliJ)。

> Screenshot IntelliJ settings

-----------------------------提示后编辑--------------- ----------------

现在,我制作了一个小批处理脚本,可以解决这个问题: 随时为更快的解决方案提供帮助 (我正在检查https://openshiftdo.org/) 或其他智能解决方案


    set /p _username=Type your username:
    set /p _password=Type your password:
    oc login replace-with-openshift-console-url --username=%_username% --password=%_password%
    oc project replace-with-project-name  
    oc get pods --selector app=replace-with-app-name -o jsonpath={.items[?(@.status.phase=='Running')].metadata.name} > temp.txt
    set /p PODNAME= <temp.txt
    del temp.txt
    oc port-forward %PODNAME% 8000 3000 3001

1 个答案:

答案 0 :(得分:0)

您需要Pod名称才能向前移植,但是您当然可以以编程方式一致地获取该名称,因此您不必每次都进行适当的更新。

您可以通过jsonpath,go template,bash等多种方式来执行此操作。一个示例是使用以下内容,并根据需要替换您的应用名称:

oc get pod -l app=replace-me -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}'