簡體   English   中英

如何在 Kubernetes Pod 中調試 nodeJS 應用程序?

[英]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 應用程序:

  1. 登錄容器並在調試模式下運行 Node 應用程序:
kubectl exec -it <pod-name> bash
node --inspect-brk index.js
  1. 將本地端口的連接轉發到 Pod 上的端口
kubectl port-forward <pod-name> 9229

注意: 9229是調試器偵聽的默認端口號,您不需要在 Kubernetes 配置 yaml 文件中公開此端口。

這就對了。

現在您可以使用地址chrome://inspect打開 Chrome 瀏覽器,單擊遠程目標,並開始調試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM