實用技巧 || 如何快速 debug 遠(yuǎn)程微服務(wù)
之前的文章中我們介紹了如何通過 Nocalhost 快速開發(fā) Rainbond 上的微服務(wù),介紹了基本的開發(fā)流程。
本文將續(xù)接上文繼續(xù)介紹,使用 Nocalhost 開發(fā)配置文件[1] 實現(xiàn)以下內(nèi)容:
一鍵 Run 和 遠(yuǎn)程Debug 持久化配置 開發(fā)容器資源限制 端口轉(zhuǎn)發(fā)
「什么是開發(fā)配置?」
開發(fā)配置是圍繞 開發(fā)模式 來進(jìn)行的,例如使用什么鏡像來進(jìn)入 開發(fā)模式,是否需要開啟持久化來保存開發(fā)容器的內(nèi)容,將哪些文件同步到開發(fā)容器中,如何一鍵調(diào)試、一鍵運行容器內(nèi)的服務(wù)等。配置了正確且合適的開發(fā)配置后,可以在使用 Nocalhost 開發(fā)模式 時更加得心應(yīng)手。
部署 Rainbond + SpringCloud
接下來繼續(xù)以上文中的 SpringCloud Pig 為例,調(diào)試 Java Maven 服務(wù)的 Pig-auth 模塊。
項目 Gitee 地址:https://gitee.com/zhangbigqi/pig
部署 Rainbond
這里就不詳細(xì)介紹 Rainbond 的安裝,請參閱 基于Linux安裝Rainbond[2]。
部署 SpringCloud
我們在 Rainbond 內(nèi)對接了開源應(yīng)用商店后,在開源應(yīng)用商店內(nèi)搜索 Spring Cloud Pig 安裝 3.5.0 版本。
來自應(yīng)用商店安裝應(yīng)用組件的英文名稱是自動生成的字符串,需要我們設(shè)置一下組件的英文名稱(Deployment Name),通過 Nocalhost 連接到集群時可以很直觀的分清楚 Deployment 對應(yīng)的組件。

Nocalhost 對接 Rainbond
安裝 Nocalhost JetBrains Plugin 插件,請參閱文檔 安裝Nocalhost JetBrains Plugin 插件[3]。
獲取 K8s Kubeconfig,請參閱文檔 獲取 Kubeconfig 文件[4]。
在
pig命名空間下,找到工作負(fù)載pig-auth右擊并選擇Dev Config(開發(fā)配置)

將以下配置文件復(fù)制到 Dev Config中。
# Deployment Name
name: pig-auth
serviceType: deployment
containers:
# Deployment 主容器名稱
- name: auth
dev:
# 開發(fā)鏡像,該鏡像包含了 Java Maven 環(huán)境
image: registry.cn-hangzhou.aliyuncs.com/zqqq/maven:3.8.6-openjdk-8
# 默認(rèn)終端為 bash
shell: bash
# Rainbond 提供的 StorageClass Name
storageClass: rainbondvolumerwx
# 配置開發(fā)容器資源
resources:
limits:
memory: 4096Mi
cpu: "2"
requests:
memory: 2048Mi
cpu: "1"
persistentVolumeDirs:
# Maven 依賴包緩存路徑,配合 storageClass 一起食用
- path: /root/.m2/repository
capacity: 10Gi
command:
# 一鍵啟動命令,安裝依賴包和啟動 pig-auth 子模塊
run:
- mvn
- install
- '&&'
- mvn
- spring-boot:run
- -pl
# 指定子模塊啟動
- pig-auth
# 一鍵 Debug 命令,安裝依賴包和 Debug pig-auth 子模塊
debug:
- mvn
- install
- '&&'
- mvn
- spring-boot:run
- -pl
# 指定子模塊啟動
- pig-auth
# Java Debug 命令
- -Dspring-boot.run.jvmArguments=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005
debug:
# 遠(yuǎn)程端口,對應(yīng)Debug命令中的 address=5005
remoteDebugPort: 5005
# 選擇 Java 語言
language: java
# 熱加載
hotReload: true
# 文件同步
sync:
type: send
mode: gitIgnore
deleteProtection: true
# 端口轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)容器內(nèi)的3000端口到本地3999
portForward:
- 3999:3000
一鍵 Run
右擊工作負(fù)載 pig-auth。選擇 Remote Run。 Nocalhost 會自動進(jìn)入 DevMode 并執(zhí)行 Remote Run。

一鍵 Debug
右擊工作負(fù)載 pig-auth。選擇 Remote Debug。 Nocalhost 會自動進(jìn)入 DevMode 并執(zhí)行 Remote Debug。 在代碼中打上斷點,發(fā)起請求,進(jìn)入 IDE Debug 模式。

持久化配置
在開發(fā)時,我們希望持久化的文件大多數(shù)都是 依賴包 日志,本篇文章中也是緩存了 Java 的依賴包。
rainbondvolumerwx 是 Rainbond 默認(rèn)提供的存儲類,填寫以下配置后會在當(dāng)前命名空間下自動創(chuàng)建 PVC,如下:
storageClass: rainbondvolumerwx
persistentVolumeDirs:
- path: /root/.m2/repository
capacity: 10Gi

容器資源限制
限制開發(fā)容器的資源,限額能讓服務(wù)器的資源利用最大化,可以通過以下開發(fā)配置修改:
resources:
limits:
memory: 4096Mi
cpu: "2"
requests:
memory: 2048Mi
cpu: "1"
端口轉(zhuǎn)發(fā)
轉(zhuǎn)發(fā)容器端口到本地,可以通過以下開發(fā)配置修改:
portForward:
- 3999:3000 # 轉(zhuǎn)發(fā)容器 3000 端口到本地 3999 端口
最后
當(dāng)然 Nocalhost 可以同時調(diào)試多個微服務(wù),同樣的方式只需修改配置文件中的 Deployment Name 和 Containers Name 以及微服務(wù)的子模塊。
Nocalhost 還有一些開發(fā)配置文中沒講到的,比如:開發(fā)環(huán)境變量、文件同步的兩種模式 pattern gitignore 等等,并且 Nocalhost 支持多種語言,Java 只是其中一種,小伙伴們可以自行探索。
Nocalhost + Rainbond 讓開發(fā)、部署更加高效、便捷。
Reference Link
Nocalhost 開發(fā)配置文件: https://nocalhost.dev/docs/config/config-overview-en/
[2]基于Linux安裝Rainbond: https://www.rainbond.com/docs/installation/install-with-ui/host-install-with-ui
[3]安裝Nocalhost JetBrains Plugin 插件: https://nocalhost.dev/docs/installation/
[4]獲取 Kubeconfig 文件: https://www.rainbond.com/docs/ops-guide/tools/kubectl
About Rainbond
?Rainbond 核心100%開源,使用簡單,不需要懂容器和Kubernetes,支持管理多種Kubernetes集群,提供企業(yè)級應(yīng)用的全生命周期管理。
?
?? Github:https://github.com/goodrain/rainbond
?? 官網(wǎng):https://www.rainbond.com
?? 微信群:關(guān)注 Rainbond 公眾號加入技術(shù)交流群
?? 釘釘群:請搜索釘釘群號 31096419
