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

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

  • Microsoft の.NET Core コマンドライン デバッガの vsdbg が 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. 環境として Cloud Code: Kubernetes を選択します。

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

  3. Attach to Kubernetes Pod オプションを選択

    Kubernetes 構成オプションの選択

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

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

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

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

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

既存の .vscode/launch.json に新しいアタッチ構成を追加するには:

  1. launch.json ファイルを開きます。
  2. Add Configuration ボタンを押して、Intellisence スニペットを起動します。
  3. 目的の言語の Cloud Code: Attach to Kubernetes Pod スニペットのうちいずれかを選択します。
  4. これにより、アタッチ構成が追加されます。これで、この構成の属性をプロジェクトの属性に合わせて更新できます。構成属性の詳細については、こちらのをご覧ください。

    Kubernetes アタッチ構成の追加

構成属性

属性 説明
debugPort コンテナで使用されるデバッグポート。
podSelector デバッグ Pod の選択に使用される Key-Value ペアです(詳細については、セレクタのガイドをご覧ください)。典型的な podSelector の場合、次のようになります。

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

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

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

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

  1. デバッグビュー デバッグ アイコン を開きます。
  2. F5 を押して、構成を選択して起動します。
    • localhost:${debugPort} は、デバッグ中にコンテナの debugPort にポート転送されます。
  3. これで、デバッグ セッションが正常に設定されました。
  4. ブレークポイントの設定やコードのステップ実行など、ローカルコードのデバッグ時に普段行うすべてのタスクを実行できるようになります。
  5. 変数とスタック情報を調べるには、デバッグ サイドバーを使用します。デバッグ セッションをインタラクティブに操作するには、下部ペインのデバッガにあるデバッグ コンソールを使用します。

    ブレークポイントと変数でアプリを一時停止し、スコープ内の値が入力されたコールスタック セクション

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

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 で質問します。