Cloud Code を使用すると、skaffold debug
を活用することで、Kubernetes クラスタにデプロイされたアプリケーションを簡単にデバッグできます。 ローカル クラスタ(Minikube や Docker Desktop など)、Google Kubernetes Engine(GKE)、その他のクラウド プロバイダでアプリケーションをデバッグできます。
ポート転送の設定や言語固有のデバッグ引数の挿入などを手動で設定する必要はありません。必要なのは、skaffold.yaml
構成ファイルと cloudcode.kubernetes
起動構成が含まれている Cloud Code 対応の Kubernetes アプリケーションだけです。
アプリケーションのデバッグ
- ステータスバーで
[Cloud Code] をクリックし、Kubernetes でデバッグを選択します。
- アプリケーションに必要な skaffold 構成または
cloudcode.kubernetes
起動構成が含まれていない場合は、Cloud Code によりそうした構成を設定できます。 - 現在の Kubernetes コンテキストを使用してアプリを実行する(または目的のアプリに切り替える)かどうかを確認します。
リモート クラスタをコンテキストとして選択した場合は、プロンプトが表示されたら、イメージを push するイメージ レジストリを選択します。Container Registry を使用している場合は、既存のレジストリを参照するか、作成するレジストリの名前を指定できます。プロジェクトで Artifact Registry API が有効で、1 つ以上の Artifact Registry リポジトリが有効になっている場合は、既存の Artifact Registry リポジトリを参照して選択できます。
次のサンプルは、一般的なレジストリの場合にコンテナ イメージの保存場所を指定する方法を示しています。
Container Registry gcr.io/{project_id} Docker Hub docker.io/{account}
非公開 Docker Hub リポジトリを使用している場合は、適切に認証されるようにしてください。最終的なイメージ リポジトリ名を生成するには、Cloud Code によってこのイメージ レジストリを Kubernetes マニフェストで指定されたイメージ名に連結します。この選択は
cloudcode.kubernetes
起動構成(.vscode/launch.json 内)に保存されます。詳細については、イメージ レジストリ取り扱いガイドをご覧ください。
次に、Cloud Code はコンテナをビルドして、レジストリに push し、Kubernetes 構成をクラスタに適用して、ロールアウトを待ちます。
ロールアウト後、Cloud Code は宣言されたすべてのコンテナポートをマシンに自動的にポート転送します。また、ライブ アプリケーションをブラウジングできるように、出力ウィンドウに URL を表示します。
アプリケーションのデバッグ可能なコンテナごとに、デバッグするプログラムが存在するリモート コンテナのディレクトリを確認または入力します。
または、Esc キーを押すと、コンテナのデバッグをスキップできます。
Cloud Code は、アプリケーションのデバッグ可能なコンテナごとにデバッグ セッションをアタッチします。
ブレークポイントの設定、コードのステップ実行など、ローカルコードのデバッグ時に普段行うのと同じタスクをライブの Kubernetes クラスタに対して実行できるようになりました。
デフォルトでは、アプリケーションへの変更が自動保存されると、Cloud Code はアプリケーションを再デプロイして、新しいデバッグ セッションを設定します。この機能を切り換えるには、プロジェクトの起動構成で
watch
フラグを指定します。変数とスタック情報を調べるには、デバッグ サイドバーを使用します。デバッグ セッションをインタラクティブに操作するには、下部ペインのデバッガにあるデバッグ コンソールを使用します。
セッションが完了すると、次のコンテキスト メニュー コマンドを使用できます。
- デプロイログを開く: Cloud Code ログ エクスプローラで特定のデプロイのアプリケーション ログを開きます。
- Open Service URL: 特定サービスのアプリケーション サービス URL をウェブブラウザで開きます。
起動構成でウォッチモードをオフにし、アプリケーションを変更して再ビルドと再デプロイを行う場合は、[Development sessions] ペインで、実行アクションを一時停止し、
[Rebuild and redeploy the application] をクリックします。
デバッグ セッションを終了するには、デバッグ ツールバーで
[停止] をクリックします。
デバッグ セッションを終了すると、デプロイされたすべての Kubernetes リソースがクラスタから削除されます。
構成の詳細
Skaffold を使用した Cloud Code は、サポートされているすべての言語で、次の構成を自動的に処理します。
- デバッガをアタッチできるように、デバッグポートのポート転送を行います。
- アプリケーション内の 1 つ以上のデバッグ可能なコンテナにデバッガを接続します。
アプリケーションに、
skaffold.yaml
で構成されている複数のデバッグ可能なコンテナ(Cloud Code デバッグでサポートされているコンテナ)がある場合、デバッガ可能な各コンテナにデバッガがアタッチされます。 - セッション間でのソース マッピング定義を永続化します。
.vscode/launch.json
を直接編集して、定義をカスタマイズできます。
Cloud Code は、次の言語固有の構成の詳細も処理します。
Node.js
呼び出すエントリポイントを書き換えます。
node --inspect=localhost:9229
Python
Init コンテナを使用して、ptvsd
モジュールをインストールし、呼び出すエントリポイントを書き換えます。
python -m ptvsd --host localhost --port 5678
Go
Init コンテナを使用して dlv
デバッガをインストールし、エントリ ポイントを書き換えて、起動したデバッグ セッションがデバッグ サーバーのみで(ヘッドレス モードで)実行され、起動時のデバッグ プロセスを継続し、複数のクライアント接続を受け入れ、localhost:56268
でリッスンできるようにします。
dlv exec --headless --continue --accept-multiclient --listen=localhost:56268 --api-version=2, <app> --
Java
適切な Java Debug Wire Protocol(JDWP)構成を使用して環境 JAVA_TOOLS_OPTIONS
を追加し、JDWP デバッグ エージェントがポート 5005 のソケット接続をリッスンすることで、デバッガがアタッチする前に VM の実行を開始できるようにします。
jdwp=transport=dt_socket,server=y,suspend=n,address=5005,quiet=y
Skaffold を使用したデバッグの詳細については skaffold debug
ドキュメントをご覧ください。
Kubernetes Pod へのデバッガのアタッチ
VS Code 用の Cloud Code は、Kubernetes Pod へのデバッガのアタッチもサポートします。比較については、Kubernetes Pod へのアタッチと Kubernetes アプリケーションのデバッグをご覧ください。