運行在Kubernetes上的應用程序的Java遠程調試

Kubernetes1.2版本最近剛發佈就立馬成爲容器(Docker,Rocket,Hyper等等)的事實上的集羣管理路徑。這裏是一些關於1.2版本的有趣特色:docker

  • 集羣如今能夠擴容到30,000個容器一個集羣json

  • 優雅的關閉節點,過渡到集羣裏運行的其餘節點bootstrap

  • 自定義指定指標做爲自動擴容的基礎windows

  • 動態配置管理app

當你在本地筆記本上面開發微服務的時候,你可使用Kubernetes來運行你的本地Docker容器,而且在你配置你的應用程序的時候,獲得開發人員/QA/生產過程等類似過程。
對於Java開發人員來講,有一件事確定會發生:就是你如何看日誌、作遠程調試以及如何追蹤協議棧。文章如下的內容是一些小提示:ssh

爲你的Pod跟蹤日誌微服務

在一些集羣管理系統中,你基本上不得不查找應用程序的本地IP(若是是在容器裏運行的話),不管如何都要ssh到它,而後找到日誌而且跟蹤它。有了Kubernetes,你就不用必須作上述的任意事情了。除了你正在運行的那臺機器(也就是你運行Kubernetes client的地方),你能夠按照下面的來:post

在你的集羣裏列出如下podsspa

圖片描述

追蹤日誌插件

如今選擇你想要追蹤的日誌,而且運行它!

圖片描述

若是必須的話,經過Shell鏈接

若是你因爲某些緣由必須登錄到pod(在文件系統中試探一下,查看其它配置文件等等)

圖片描述

虛擬機遠程調試你的應用程序

這樣的話,查看你的應用程序上面發生了什麼就會變得十分方便。爲了作到這個,你只要作跟今天作的同樣的事情就行了。當你bootstrap你的JVM,你應該有方法啓動JVM調試。例如,HawtApp Maven plugin就是一個簡單的mvn 插件,能夠將Java Main做爲可執行的、簡單的、靈活的bootrtrap bin/run.sh 腳本(或者windows的批處理文件),容許你控制路徑和經過環境變量調試。

令Bootstrap Java能夠暴露到調試端口

好比:
圖片描述

經過Kubernetes密鑰清單在docker容器裏定義調試端口

如今你須要在你的Docker容器裏面經過你的Kubernetes密鑰清單(json/yaml)曝光端口 5005 (在這個例子裏)

圖片描述

注意,咱們已經添加了一個env變量到Kubernetes密鑰清單文件到能夠控制咱們是否想要遠程調試打開或者關閉(true/false)。Bootstrap腳本(以上所述)會檢查env 變量,而且你能夠經過kube密鑰清單控制它(如今Kube1.2有了ConfigMap,或者OpenShift templates)。

最後一步是代理服務調試端口到你的本地機器。若是你在本地運行 kubectlclient,就會十分容易:

列出集羣裏的pods

圖片描述

代理pod到一個特殊端口

ceposta@postamac(~) $ kubectl port-forward file-ingress-events-3artj  5005:5005

上述代碼會從你的本地環境(5005)端口轉發到pod的端口5005。如今你能夠將你的遠程調試器附加到 localhost:5005

但願這篇帖子能夠幫助你調試你的Java apps!

相關文章
相關標籤/搜索