Cloud Code 可讓您運用 skaffold debug,對部署至 Google Kubernetes Engine (GKE) 叢集的應用程式進行偵錯。
您可以在本機叢集 (例如 minikube 或 Docker Desktop)、GKE 或任何其他雲端服務供應商上,對應用程式進行偵錯。
若是使用 Cloud Code 的偵錯支援,您就無須完成設定通訊埠轉送,或插入特定語言偵錯引數等手動設定。如要進行偵錯,您需要具備 Cloud Code 且包含 skaffold.yaml 設定檔和 cloudcode.kubernetes 啟動設定在內的 GKE 應用程式。
對 GKE 應用程式進行偵錯
如要開始對 GKE 應用程式進行偵錯,請按照下列步驟操作:
在 Cloud Code 狀態列中,按一下有效專案名稱。

在隨即顯示的「快速挑選」選單中,選取「在 Kubernetes 上偵錯」。
如果系統提示,請驗證憑證,在本機執行及偵錯應用程式。
如果應用程式沒有必要的 Skaffold 設定或
cloudcode.kubernetes啟動設定,Cloud Code 會協助您設定。確認是否要使用目前的 Kubernetes 內容執行應用程式 (或切換至偏好的內容)。
如果選擇遠端叢集做為環境,系統會提示您選擇要將映像檔推送至哪個映像檔登錄檔。
如果專案已啟用 Artifact Registry API,且至少有一個 Artifact Registry 存放區,您可以瀏覽並選取現有的 Artifact Registry 存放區。
以下範例說明如何為一些常見的登錄檔指定容器映像檔的儲存位置:
Artifact Registry REGION-docker.pkg.dev/PROJECT_ID/REPO_NAMEDocker Hub docker.io/ ACCOUNT
如果您使用私密 Docker Hub 存放區,請務必正確驗證。AWS Container Repository (ECR) AWS_ACCOUNT_ID.dkr.ecr.REGION.amazonaws.com/APPAzure Container Registry (ACR) ACR_NAME.azurecr.io/APP為產生最終的映像檔存放區名稱,Cloud Code 會將這個映像檔登錄檔與 Kubernetes 資訊清單中指定的映像檔名稱串連。這項選擇會儲存在
cloudcode.kubernetes啟動設定 (位於.vscode/launch.json)。詳情請參閱映像檔登錄處理指南。
Cloud Code 會建構容器、推送容器到登錄檔、將 Kubernetes 設定套用至叢集,然後等待推出。
推出後,Cloud Code 會自動將所有已宣告的容器連接埠轉送至您的電腦,並在輸出視窗中顯示網址,方便您瀏覽即時應用程式。
針對應用程式中的每個可偵錯容器,確認或輸入要偵錯的程式所在的遠端容器目錄。
或者,您也可以按 ESC 鍵略過容器偵錯。

Cloud Code 會為應用程式中每個可偵錯的容器附加偵錯工作階段。
現在您可以對使用中的 Kubernetes 叢集執行與平常偵錯本機程式碼時相同的工作,例如設定中斷點和逐步完成程式碼。
根據預設,儲存應用程式變更時,Cloud Code 會重新部署應用程式並設定新的偵錯工作階段。您可以在專案的啟動設定中,使用
watch標記切換這項功能。如要觀察變數與堆疊資訊,請使用偵錯側欄。如要與偵錯工作階段互動,請使用底部窗格偵錯工具的「Debug Console」。
工作階段完成後,您可以使用下列內容選單指令:
- 開啟部署記錄:使用 Cloud Code 記錄探索工具,開啟特定部署作業的應用程式記錄。
- 開啟服務網址:在網路瀏覽器中開啟特定服務的應用程式服務網址
如果您已在啟動設定中關閉監看模式,且想要變更應用程式、重建並重新部署應用程式,請在「開發工作階段」窗格中暫停執行動作,然後按一下「重建並重新部署應用程式」
。如要結束偵錯工作階段,請按一下「偵錯工具列」中的「停止」
。偵錯工作階段結束後,所有已部署的 Kubernetes 資源都會從叢集刪除。
設定詳細資料
Cloud Code 採用 Skaffold,可自動處理所有支援語言的下列設定詳細資料:
- 通訊埠轉送偵錯通訊埠,才可使偵錯工具連上系統。
- 將偵錯工具附加至應用程式中的一或多個可偵錯容器。如果應用程式在
skaffold.yaml中設定了多個可偵錯的容器 (需是 Cloud Code 偵錯的語言可支援的容器),則偵錯工具將與這些容器個別相互連結。 - 在不同工作階段中保留來源對應定義;您可以直接編輯
.vscode/launch.json檔案,自訂這些定義。
Cloud Code 也會處理下列語言專屬的設定詳細資料:
Node.js
重新編寫進入點以叫用:
node --inspect=localhost:9229
Python
使用 Init Container 安裝 ptvsd 模組,並重新編寫進入點來叫用:
python -m ptvsd --host localhost --port 5678
Go
使用 Init Container 安裝 dlv 偵錯工具,並重新編寫進入點,讓啟動的偵錯工作階段只使用偵錯伺服器 (無周邊模式),繼續偵錯程序 (啟動時)、接受多個用戶端連線,並在 localhost:56268 監聽:
dlv exec --headless --continue --accept-multiclient --listen=localhost:56268 --api-version=2, <app> --
Java
新增環境 JAVA_TOOLS_OPTIONS,並使用適當的 Java 偵錯線路通訊協定 (JDWP) 設定,讓 JDWP 偵錯代理程式監聽通訊埠 5005 的 Socket 連線,並允許 VM 在附加偵錯工具前開始執行:
jdwp=transport=dt_socket,server=y,suspend=n,address=5005,quiet=y
如要進一步瞭解如何使用 Skaffold 偵錯,請參閱skaffold debug說明文件。
設定容器
如要準備容器以進行偵錯,請按照所用語言的操作說明操作:
Node.js
- 使用
--inspect=<debugPort>啟動 Node.js 應用程式,其中debugPort來自附加設定。例如:CMD ["node", "--inspect=9229", "index.js"]
Python
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
請確認您已在 Kubernetes 容器上安裝
vsdbg,這是 Microsoft 的 .NET Core 指令列偵錯工具。例如:
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 /dbg/netcore/vsdbg
設定附加設定
如要附加至可偵錯的容器,您需要類型為 cloudcode.kubernetes 的附加設定。
新增 .vscode/launch.json 檔案
如果專案的 .vscode 資料夾中沒有 launch.json 檔案,您可以使用「Debug」(偵錯) 面板新增這個檔案。
如要前往「Debug」面板,請按一下活動列中的「Run and Debug」
。從下拉式選單中選取「新增設定」。
選取「Cloud Code: Kubernetes」做為環境。

選取「Attach to Kubernetes Pod」(連結至 Kubernetes Pod) 選項。

選取您使用的程式設計語言。
這會建立並開啟專案的
launch.json檔案,並為您建立附加設定。更新
launch.json檔案中的設定屬性,使設定屬性與您專案的屬性相符。如要進一步瞭解設定屬性,請參閱「設定屬性」。
在 .vscode/launch.json 檔案中新增附加設定
如要在現有的 .vscode/launch.json 檔案中新增附加設定,請按照下列步驟操作:
- 開啟
launch.json檔案。 - 如要叫用程式碼片段 Intellisense,請按一下「新增設定」。
- 如要新增附加設定,請選取您使用的語言適用的「Cloud Code: Attach to Kubernetes Pod」(Cloud Code:附加至 Kubernetes Pod) 片段。
- 更新設定中的屬性,使屬性與您專案的屬性相符。如要進一步瞭解設定屬性,請參閱「設定屬性」。
設定屬性
| 屬性 | 說明 |
|---|---|
| debugPort | 容器上使用的偵錯通訊埠。 |
| podSelector | 用來選取偵錯 Pod 的鍵/值組合。詳情請參閱選取器指南。以下範例顯示典型的 podSelector:
"podSelector": {
"app": <deployment-name>
}
|
| localRoot | 包含要偵錯程式的本機目錄路徑。 預設值為 ${workspaceFolder}。 |
| remoteRoot | 包含要偵錯程式的遠端目錄絕對路徑 (在 Kubernetes 容器上)。 |
將偵錯工具附加至 Kubernetes Pod
Cloud Code for VS Code 支援將偵錯工具附加至 Node.js、Python、Go、Java 和 .NET 的 Kubernetes Pod。您只需要可偵錯的容器和 attach 設定 (類型為 cloudcode.kubernetes)。
如要瞭解附加至 Kubernetes Pod 與偵錯 Kubernetes 應用程式的差異,請參閱附加偵錯工具至 Pod 與偵錯 Kubernetes 應用程式的差異。
如要將偵錯工具附加至 Kubernetes Pod,請執行下列工作:
- 如要前往「Debug」面板,請按一下活動列中的「Run and Debug」
。 按下
F5選取並啟動設定。- 偵錯時,
localhost:${debugPort}會轉送至容器上的debugPort。
偵錯工作階段現已設定成功。您可以如常執行對本機程式碼偵錯時的工作,例如設定中斷點及逐步完成程式碼。
- 偵錯時,
如要觀察變數與堆疊資訊,請使用偵錯側欄。如要與偵錯工作階段互動,請使用底部窗格偵錯工具的「Debug Console」。
如要結束偵錯工作階段,請按一下「偵錯工具列」中的「停止」
。
將偵錯工具附加至 Pod 與偵錯 Kubernetes 應用程式的差異
| 連結至 Kubernetes Pod | 對 Kubernetes 應用程式進行偵錯 |
|---|---|
| 對單一 Kubernetes Pod 進行偵錯。 | 偵錯應用程式中所有可偵錯的容器。 |
| 應用程式必須在 Kubernetes Pod 中執行,才能進行偵錯。 | 在 Kubernetes 叢集上執行應用程式,並附加偵錯工具。 |
使用類型為 cloudcode.kubernetes 和要求 attach 的設定 (.vscode/launch.json)。
|
使用類型為 cloudcode.kubernetes 且要求為 launch 的設定 (.vscode/launch.json)。詳情請參閱「啟動與附加設定」。 |
設定範例:
{
"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 會在監看模式下重新啟動偵錯工具。 |
後續步驟
- 使用同步處理檔案和熱重載功能,加快開發速度。
- 在 Cloud Code 中設定持續開發環境。
- 在 Cloud Code 中查看 Kubernetes 記錄檔。