第 4 章 OpenShift 上 S2I 的工作流示例
4.1. 为 OpenShift 镜像远程调试 Java 应用 复制链接链接已复制到粘贴板!
该流程中的示例显示,使用 S2I for OpenShift 镜像对 OpenShift 上部署的 Java 应用进行远程调试。您可以通过将环境变量 JAVA_DEBUG 的值设置为 true 和 JAVA_DEBUG_PORT 设置为 9009 来启用该功能。
如果 JAVA_DEBUG 变量设为 true,并且没有为 JAVA_DEBUG_PORT 变量提供值,则 JAVA_DEBUG_PORT 默认设为 5005。
为部署准备
流程
运行以下命令并提供您的凭证来登录到 OpenShift 实例:
$ oc login创建一个新项目
$ oc new-project js2i-remote-debug-demo
Deployment
您可以为新的和现有应用程序启用远程调试。
为新应用程序启用远程调试
流程
使用 S2I 用于 OpenShift 镜像和示例 Java 源代码创建一个新应用。在创建应用程序前,请确保设置
JAVA_DEBUG和JAVA_DEBUG_PORT环境变量:$ oc new-app --context-dir=getting-started --name=quarkus-quickstart \ 'registry.access.redhat.com/ubi8/openjdk-11~https://github.com/quarkusio/quarkus-quickstarts.git#2.12.1.Final' -e JAVA_DEBUG=true \ -e JAVA_DEBUG_PORT=9009
为现有应用程序启用远程调试
流程
切换到适当的 OpenShift 项目:
$ oc project js2i-remote-debug-demo检索 deploymentconfig 的名称:
$ oc get dc -o name deploymentconfig/openshift-quickstarts-
编辑 deploymentconfig 并添加
JAVA_DEBUG=true和JAVA_DEBUG_PORT=9009环境变量。 指定在路径
.spec.template.spec.containers和Container类型下编辑的对象:$ oc edit dc/openshift-quickstarts注意在终端中启动编辑器,以运行
oc edit命令。您可以通过定义环境的EDITOR变量来更改启动的编辑器。
post-deployment
将本地调试端口连接到 pod 上的端口
流程
获取运行应用的 pod 的名称(Status Running):
显示
openshift-quickstarts-1-1uymm作为 pod 名称的示例。$ oc get pods NAME READY STATUS RESTARTS AGE openshift-quickstarts-1-1uymm 1/1 Running 0 3m openshift-quickstarts-1-build 0/1 Completed 0 6m使用 OpenShift 或 Kubernetes 端口转发功能来监听本地端口并转发到 OpenShift 容器集上的端口。<running-pod > 是 pod 的 NAME 字段的值,带有上一命令输出中的 Status "running" :
$ oc port-forward <running-pod> 5005:9009 Forwarding from 127.0.0.1:5005 -> 9009 Forwarding from [::1]:5005 -> 9009注意在上例中,5005 是本地系统上的端口号,而
9009是运行 OpenShift 镜像的 S2I 的 OpenShift 容器集的远程端口号。因此,以后对本地端口5005的调试连接被转发到运行 Java 虚拟机(JVM)的 OpenShift 容器集的端口9009。
该命令可能会阻止您在终端中进一步输入。在这种情况下,启动一个新终端来执行后续步骤。
将调试器附加到应用程序
流程
将本地系统上的调试器附加到 S2I for OpenShift 镜像上运行的远程 JVM:
$ jdb -attach 5005 Set uncaught java.lang.Throwable Set deferred uncaught java.lang.Throwable Initializing jdb ... > ...注意启动到远程 OpenShift pod 调试连接的本地调试器后,控制台中会显示与处理
5005的连接类似的条目,其中发出了前面的 oc port-forward 命令。调试应用程序:
$ jdb -attach 5005 Set uncaught java.lang.Throwable Set deferred uncaught java.lang.Throwable Initializing jdb ... > threads Group system: (java.lang.ref.Reference$ReferenceHandler)0x79e Reference Handler cond. waiting (java.lang.ref.Finalizer$FinalizerThread)0x79f Finalizer cond. waiting (java.lang.Thread)0x7a0 Signal Dispatcher running Group main: (java.util.TimerThread)0x7a2 server-timer cond. waiting (org.jolokia.jvmagent.CleanupThread)0x7a3 Jolokia Agent Cleanup Thread cond. waiting (org.xnio.nio.WorkerThread)0x7a4 XNIO-1 I/O-1 running (org.xnio.nio.WorkerThread)0x7a5 XNIO-1 I/O-2 running (org.xnio.nio.WorkerThread)0x7a6 XNIO-1 I/O-3 running (org.xnio.nio.WorkerThread)0x7a7 XNIO-1 Accept running (java.lang.Thread)0x7a8 DestroyJavaVM running Group jolokia: (java.lang.Thread)0x7aa Thread-3 running >
其他资源
- 如需有关 Openshift 通用对象参考的更多信息,请参阅 OpenShift Common Object Reference 部分 Container。
- 有关将红帽 JBoss Developer Studio 的 IDE 调试器连接到运行 OpenShift 镜像的 S2I 的 OpenShift pod 的更多信息,请参阅配置和连接 IDE Debugger。