Cloud Code for VS Code の Kubernetes Pod にデバッガをアタッチする

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

VS Code 用 Cloud Code では、Node.js、Python、Go、Java、.NET の Kubernetes Pod にデバッガを接続できます。必要なのは、デバッグ可能なコンテナcloudcode.kubernetes タイプのアタッチ構成のみです。

Kubernetes Pod へのアタッチと Kubernetes アプリケーションのデバッグの違いについては、Kubernetes Pod へのアタッチと Kubernetes アプリケーションのデバッグをご覧ください。

コンテナの設定

デバッグ用のコンテナを準備するには、使用している言語の手順に従います。

Node.js

  • --inspect=<debugPort> で Node.js アプリケーションを起動します。debugPortアタッチ構成から取得します。例: CMD ["node", "--inspect=9229", "index.js"]

Python

  • ptvsd モジュールがマシンとコンテナにインストールされていることを確認します。
  • ptvsd から Python アプリケーションを起動します。アタッチ構成debugPort フィールドに指定されたポートを一致させます。例:
    CMD ["python", "-m", "ptvsd", "--port", "", "app.py"]
    

Go

  • dlv パッケージがマシンと Go コンテナにインストールされていることを確認します。
  • dlv debug から Go アプリケーションを起動します。

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

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

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

Java

  • JVM がマシンにインストールされていることを確認します。
  • 次のオプションで Java アプリケーションを起動します。debugPortアタッチ構成から取得します。

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

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

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

.NET Core

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

    次に例を示します。

    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

アタッチ構成の設定

デバッグ可能なコンテナにアタッチするには、cloudcode.kubernetes タイプのアタッチ構成が必要です。

.vscode/launch.json ファイルがないプロジェクト

プロジェクトの .vscode フォルダに launch.json ファイルがない場合は、[デバッグ] パネルを使用して追加できます。

  1. [デバッグ] パネルに移動するには、アクティビティ バーの デバッグ アイコン [実行とデバッグ] をクリックします。

  2. プルダウン メニューから [Add Configuration] を選択します。

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

    環境として Cloud Code: Kubernetes の設定

  4. [Attach to Kubernetes Pod] オプションを選択します。

    Kubernetes 構成オプションの選択

  5. 使用しているプログラミング言語を選択します。

    これにより、プロジェクトの launch.json ファイルが作成され、開かれて、接続構成が作成されます。

  6. プロジェクトの構成属性と一致するように、launch.json ファイル内の構成属性を更新します。構成属性の詳細については、構成属性をご覧ください。

.vscode/launch.json ファイルがあるプロジェクト

既存の .vscode/launch.json ファイルに新しい接続構成を追加するには:

  1. launch.json ファイルを開きます。
  2. Intellisense スニペットを起動するには、[Add Configuration] をクリックします。
  3. アタッチ構成を追加するには、使用している言語の [Cloud Code: Attach to Kubernetes Pod] スニペットを選択します。
  4. プロジェクトの属性と一致するように構成内の属性を更新します。構成属性の詳細については、構成属性をご覧ください。

構成属性

属性 説明
debugPort コンテナで使用されるデバッグポート。
podSelector デバッグポッドの選択に使用される Key-Value ペア。詳しくは、セレクタのガイドをご覧ください。 次のサンプルは、一般的な「podSelector」を示しています。

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

localRoot デバッグするプログラムが存在するローカル ディレクトリのパス。 デフォルトは ${workspaceFolder} です。
remoteRoot デバッグするプログラムが存在するリモート ディレクトリの絶対パス(Kubernetes コンテナ上のパス)。

Kubernetes Pod へのデバッガのアタッチ

構成とコンテナを設定したら、次の手順を行います。

  1. [デバッグ] パネルに移動するには、アクティビティ バーの デバッグ アイコン [実行とデバッグ] をクリックします。
  2. F5 を押して、構成を選択して起動します。

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

    これで、デバッグ セッションが正常に設定されました。ブレークポイントの設定やコードのステップ実行など、ローカルコードのデバッグ時に普段行うタスクを実行できます。

  3. 変数とスタック情報を調べるには、デバッグ サイドバーを使用します。デバッグ セッションをインタラクティブに操作するには、下部ペインのデバッガにあるデバッグ コンソールを使用します。

  4. デバッグ セッションを終了するには、デバッグ ツールバーで デバッグ停止アイコン [停止] をクリックします。

Kubernetes Pod へのアタッチと Kubernetes アプリケーションのデバッグ

Kubernetes Pod へのアタッチ Kubernetes アプリケーションのデバッグ
単一の Kubernetes Pod をデバッグします。 アプリケーション内のすべてのデバッグ可能なコンテナをデバッグします。
デバッグする前に、アプリケーションを Kubernetes Pod で実行する必要があります。 Kubernetes クラスタでアプリケーションを実行し、デバッガをアタッチします。
タイプ「cloudcode.kubernetes」の構成(.vscode/launch.json)を使用し、「attach」をリクエストします。 タイプ「cloudcode.kubernetes」の構成(.vscode/launch.json)を使用し、「launch」をリクエストします。
詳細については、構成の開始とアタッチをご覧ください。
サンプル構成:

{
  "name": "Attach to Kubernetes Pod (NodeJS)",
  "type": "cloudcode.kubernetes",
  "request": "attach",
  "language": "Node",
  "debugPort": 9229,
  "podSelector": {
     "app": "hello-world"
  },
  "localRoot": "${workspaceFolder}",
  "remoteRoot": "/app"
}
サンプル構成:

{
  "name": "Run/Debug on Kubernetes",
  "type": "cloudcode.kubernetes",
  "request": "launch",
  "skaffoldConfig": "${workspaceFolder}/skaffold.yaml",
  "watch": true,
  "cleanUp": true,
  "portForward": true
}
この構成を使用してアプリケーションを実行することはできません。 この構成を使用して、アプリケーションを実行またはデバッグできます。
この構成は言語固有のものです この構成は言語に依存しません
専用のコマンドを使用しません Debug on Kubernetesコマンド
ウォッチモードが使用できないため、変更後にデバッガを手動で再起動します。 ウォッチモードを使用すると、変更を保存した後に Cloud Code がデバッガを再起動できます。

サポートの利用

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