[英]How to debug a nodeJS application inside a Kubernetes Pod?
幾乎是問題的標題。
我正在使用一個 Ubuntu 系統,該系統具有帶有多個節點和多個運行 Docker 容器的 pod 的 k8s 部署。 一些 pod 是 nodeJS 微服務,它們在啟動時運行以下命令:
node app.js
有時我需要通過添加日志、更改內部邏輯等來調試微服務。
在 Windows 中使用相同的微服務,我只需更改源代碼並重新啟動node.exe
進程。 我將如何通過 Kubernetes 部署在 Linux 中實現相同的功能?
我試圖運行一個shell:
user@node1:~$ kubectl exec my-microservice-XXXX -it -- sh
更改源代碼並保存: nano app.js
查找node
進程: ps aux
PID USER TIME COMMAND
1 root 0:00 npm
22 root 0:00 npm
42 root 0:27 node --max-http-header-size=65000 app.js
然后將SIGTERM
發送到PID 42
:
kill SIGTERM 42
這導致我被從 pod 中啟動:
/usr/src/app # kill SIGTERM 42
sh: invalid number 'SIGTERM'
/usr/src/app # command terminated with exit code 137
test@node1:~$
一個新的 pod 會自動啟動:
my-microservice-XXXX 0/1 Completed 1 19h
my-microservice-XXXX 1/1 Running 2 19h
這在Kubernetes
是不可能的,因為我們不管理容器(創建、終止等)。 這是由Kubernetes
完成的,因此這個過程是短暫的。
如果您不想在容器重新啟動時丟失更改,那么您可以使用進行更改的目錄的卷掛載。 (這完全違背了 docker 容器化的目的,也不建議在生產(任何)環境中批量存儲代碼)。
通過以下兩個步驟,您可以調試在 kubernetes Pod 中的 Docker 容器內運行的 Node 應用程序:
kubectl exec -it <pod-name> bash
node --inspect-brk index.js
kubectl port-forward <pod-name> 9229
注意: 9229
是調試器偵聽的默認端口號,您不需要在 Kubernetes 配置 yaml 文件中公開此端口。
這就對了。
現在您可以使用地址chrome://inspect
打開 Chrome 瀏覽器,單擊遠程目標,並開始調試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.