Kubernetes Pod のデバッグ

Cloud Code Visual Studio Code 拡張機能は、Python、Node.js、Go、Java、.NET Core の接続モードでの Kubernetes デバッグをサポートしています。

Pod のデバッグでは、アプリケーションの実行時やデバッグ時に使用する構成とは異なる構成を使用します。接続モードでデバッグ セッションを開始する前にアプリケーションを実行し、デバッグするコンテナごとに接続構成を作成する必要があります。

既存の launch.json ファイルを使用せずに Kubernetes Pod をデバッグする

既存のプロジェクトのデバッグ用 .vscode フォルダに既存の launch.json がなく、特定の Pod をデバッグするための接続構成が必要な場合は、デバッグパネルを使用して接続構成を追加できます。

  1. [デバッグ] パネルに移動し(左側のタスクバーの [デバッグ] ビューアイコン デバッグ アイコン を使用)、プルダウン メニューから [構成の追加] を選択します。

    デバッグパネルを使用した構成の追加

  2. 環境として [Cloud Code Kubernetes Debug] を選択します。

    環境として Cloud Code Kubernetes Debug を設定する

  3. 対応するプログラミング言語を選択します。

    目的のプログラミング言語を選択する

  4. これにより、プロジェクトの launch.json ファイルが作成されて開き、接続構成も作成されます。プロジェクトの構成属性に合わせて、このファイル内の構成属性を更新できます。構成属性の詳細については、こちらのをご覧ください。

    launch.json ファイルに表示される構成属性

  5. F5 を押して、構成を選択して起動します。

    localhost:${debugPort} は、デバッグ中にコンテナの debugPort にポート転送されます。

  6. これで、デバッグ セッションが正常に設定されました。

既存の launch.json ファイルを使用して Kubernetes Pod をデバッグする

Node.js

  1. VS Code でアプリケーションを開きます。
  2. --inspect=<debugPort> で Node.js アプリケーションを起動します。debugPort はデバッグ構成から取得します。例: CMD ["node", "--inspect=9229", "index.js"]
  3. VS Code のデバッグビュー(デバッグ アイコン)を開き、デバッグ構成を追加します。
  4. podSelectordebugPort などの構成属性を自由に編集します。

    ヒント: podSelector 属性を使用して、デバッグするコードを選択します。典型的な podSelector の場合、次のようになります。

    "podSelector": { "app": <deployment-name> }

  5. F5 を押して、構成を選択して起動します。

    localhost:${debugPort} は、デバッグ中にコンテナの debugPort にポート転送されます。

  6. これで、デバッグ セッションが正常に設定されました。

Python

  1. 始める前に、ptvsd モジュールがマシンにインストールされていることを確認します。
  2. Python コンテナに ptvsd モジュールがインストールされていることを確認します。

    ptvsd から Python アプリケーションを起動します。デバッグ構成の debugPort フィールドに指定されたポートを一致させます。 例:

    CMD ["python", "-m", "ptvsd", "--port", "", "app.py"]
    

  3. VS Code のデバッグビュー(デバッグ アイコン)を開き、デバッグ構成を追加します。

  4. podSelectordebugPort などの構成属性を自由に編集します。

    ヒント: podSelector 属性を使用して、デバッグするコードを選択します。典型的な podSelector の場合、次のようになります。

    "podSelector": { "app": <deployment-name> }

  5. F5 を押して、構成を選択して起動します。

    localhost:${debugPort} は、デバッグ中にコンテナの debugPort にポート転送されます。

  6. これで、デバッグ セッションが正常に設定されました。

Java

  1. 始める前に、JVM をマシンにインストールする必要があります。
  2. -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=<debugPort>,quiet=y を使用して Java アプリケーションを起動します。debugPort はデバッグ構成から取得します。

    たとえば、Java アプリケーションをデバッグモードで起動し、ポート debugPort で接続をリッスンします。

    ENTRYPOINT ["java","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=<debugPort>,quiet=y", "-jar", "my-app-1.0.jar"]
    

  3. VS Code のデバッグビュー(デバッグ アイコン)を開き、デバッグ構成を追加します。

  4. podSelectordebugPort などの構成属性を自由に編集します。

    ヒント: podSelector 属性を使用して、デバッグするコードを選択します。典型的な podSelector の場合、次のようになります。

    "podSelector": { "app": <deployment-name> }

  5. F5 を押して、構成を選択して起動します。

    localhost:${debugPort} は、デバッグ中にコンテナの debugPort にポート転送されます。

  6. これで、デバッグ セッションが正常に設定されました。

Go

  1. 始める前に、dlv パッケージがマシンにインストールされていることを確認します。

    Go コンテナに dlv パッケージがインストールされていることも確認します。

  2. dlv debug から Go アプリケーションを起動します。

    開始コマンドで指定されたポートは、デバッグ構成の debugPort 属性値と同じである必要があります。 例:

    CMD ["dlv", "debug", "--headless", "--listen=:<debugPort>", "--log"]
    

    トラブルシューティングのヒント: Go アプリケーションをデバッグすると、アプリケーションが停止し、デバッガの接続を待機します。サービスを起動するには、デバッガを接続します。

  3. VS Code のデバッグビュー(デバッグ アイコン)を開き、デバッグ構成を追加します。

  4. podSelectordebugPort などの構成属性を自由に編集します。

    ヒント: podSelector 属性を使用して、デバッグするコードを選択します。典型的な podSelector の場合、次のようになります。

    "podSelector": { "app": <deployment-name> }

  5. F5 を押して、構成を選択して起動します。

    localhost:${debugPort} は、デバッグ中にコンテナの debugPort にポート転送されます。

  6. これで、デバッグ セッションが正常に設定されました。

.NET Core

  1. 始める前に、Microsoft の.NET Core コマンドライン デバッガの vsdbg が Kubernetes コンテナにインストールされていることを確認します。

    インストールするには、自動生成された Dockerfile で、vsdbg をインストールするブロックのコメントを解除します。

    RUN apt-get update \
      && apt-get install -y --no-install-recommends unzip \
      && apt-get install -y procps \
      && rm -rf /var/lib/apt/lists/* \
      && curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l /vsdbg
    
  2. VS Code のデバッグビュー(デバッグ アイコン)を開き、デバッグ構成を追加します。

  3. podSelectordebugPort などの構成属性を自由に編集します。

    ヒント: podSelector 属性を使用して、デバッグするコードを選択します。典型的な podSelector の場合、次のようになります。

    "podSelector": { "app": <deployment-name> }

  4. F5 を押して、構成を選択して起動します。

    localhost:${debugPort} は、デバッグ中にコンテナの debugPort にポート転送されます。

  5. これで、デバッグ セッションが正常に設定されました。

構成属性

属性 説明
debugPort コンテナで使用されるデバッグポート。デフォルトは 9229 です。
localRoot デバッグするプログラムが存在するローカル ディレクトリのパス。 デフォルトは ${workspaceFolder} です。
podSelector デバッグポッドの選択に使用される Key-Value ペアのセット(セレクタの詳細をご覧ください)。典型的な podSelector の場合、次のようになります。

"podSelector": { "app": <deployment-name> }

protocol Node.js のデバッグで使用されるプロトコル。デフォルトは auto です。
remoteRoot デバッグするプログラムが存在するリモート ディレクトリの絶対パス(Kubernetes コンテナ上のパス)。デフォルトは /app です。

サポートの利用

フィードバックを送信するには、GitHub で問題を報告します。または、Stack Overflow で質問します。