第4章 OpenShift 上の S2I のワークフロー例

4.1. OpenShift イメージのリモートデバッグ Java アプリケーション

この手順の例では、S2I for OpenShift イメージを使用して、OpenShift にデプロイされた Java アプリケーションのリモートデバッグを示しています。環境変数 JAVA_DEBUG の値を true に設定し、JAVA_DEBUG_PORT9009 に設定すると、この機能を有効にできます。

注記

JAVA_DEBUG 変数を true に設定され、JAVA_DEBUG_PORT 変数に値が提供されていない場合、JAVA_DEBUG_PORT 変数はデフォルトで 5005 に設定されます。

デプロイメントの準備

手順

  1. 以下のコマンドを実行して OpenShift インスタンスにログインし、認証情報を指定します。

    $ oc login
  2. 新しいプロジェクトを作成します。

    $ 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 のポートに接続 に進みます。

既存アプリケーションのリモートデバッグの有効化

手順

  1. 適切な OpenShift プロジェクトに切り替えます。

     $ oc project js2i-remote-debug-demo
  2. deploymentconfig の名前を取得します。

    $ oc get dc -o name
     deploymentconfig/openshift-quickstarts
  3. deploymentconfig を編集し、JAVA_DEBUG=true および JAVA_DEBUG_PORT=9009 環境変数を追加します。
  4. .spec.template.spec.containers パスと Container のタイプで編集するオブジェクトを指定します。

    $ oc edit dc/openshift-quickstarts
    注記

    エディターを起動し、ターミナルで oc edit コマンドを実行します。環境の EDITOR 変数を定義することで、起動するエディターを変更できます。

ローカルデバッグポートを Pod のポートに接続 に進みます。

デプロイメント後

Pod のポートへのローカルデバッグポートの接続

手順

  1. アプリケーションを実行している 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
  2. 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 に転送されます。

重要

このコマンドにより、ターミナルでそれ以上入力できなくなる場合があります。この場合は、以下の手順を実行するために新しいターミナルを開きます。

アプリケーションへのデバッガーの割り当て

手順

  1. ローカルシステムのデバッガーを、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 接続を処理するのと同様のエントリーが表示されます。

  2. アプリケーションをデバッグします。

    $ 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
    >

関連情報