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

Cloud Code は、Kubernetes Pod へのデバッガのアタッチをサポートします。デバッグ可能なコンテナとタイプ cloudcode.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 がマシンにインストールされていることを確認します。
  • -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"]
    

.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. [デバッグ] パネルに移動し(アクティビティ バーの [デバッグ] ビューアイコン デバッグ アイコン を使用)、プルダウン メニューから [Add Configuration] を選択します。

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

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

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

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

    Kubernetes 構成オプションの選択

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

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

  5. これにより、プロジェクトの 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」コマンド

サポートの利用

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