第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 for 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
ローカルデバッグポートを Pod のポートに接続 に進みます。
既存アプリケーションのリモートデバッグの有効化
手順
適切な 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
変数を定義することで、起動するエディターを変更できます。
ローカルデバッグポートを Pod のポートに接続 に進みます。
デプロイメント後
Pod のポートへのローカルデバッグポートの接続
手順
アプリケーションを実行している Pod の名前を取得します (Runningの状況)。
Pod 名 として表示される
openshift-quickstarts-1-1uymm
の例$ 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 Pod のポートに転送します。<running-pod> は、直前のコマンド出力から Status "running" が設定された Pod の NAME フィールドの値です。
$ 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 Pod のリモートポート番号です。そのため、ローカルポート5005
に送信される今後のデバッグ接続は、Java 仮想マシン (JVM) を実行する OpenShift Pod のポート9009
に転送されます。
このコマンドにより、ターミナルでそれ以上入力できなくなる場合があります。この場合は、以下の手順を実行するために新しいターミナルを開きます。
アプリケーションへのデバッガーの割り当て
手順
ローカルシステムのデバッガーを、S2I for OpenShift イメージで実行しているリモート JVM に割り当てます。
$ jdb -attach 5005 Set uncaught java.lang.Throwable Set deferred uncaught java.lang.Throwable Initializing jdb ... > ...
注記リモート OpenShift Pod へのローカルデバッガーが開始すると、以前の oc port-forward コマンドが発行されたコンソールに
5005
接続を処理するのと同様のエントリーが表示されます。アプリケーションをデバッグします。
$ 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, section Container セクションを参照してください。
- Red Hat JBoss Developer Studio の IDE デバッガーを S2I for OpenShift イメージを実行する OpenShift Pod に接続する方法は、Configuring and Connecting the IDE Debugger を参照してください。