TAP 文章系列-11 | 利用 TAP 實現應用雲除錯與面向開發者的應用執行狀態監控

語言: CN / TW / HK

從雲原生平臺的廣泛應用談起......

雲原生平臺,特別是以Kubernetes為代表的容器排程平臺,已經得到了非常快速的普及。各行業企業的資料中心,紛紛調研並落地適合各自企業現狀的Kubernetes雲原生應用平臺;但是遺憾的是,很少有企業在落地並實施Kubernetes雲原生應用平臺的時候,考慮如何降低由於雲原生平臺所帶來的開發階段的額外應用開發成本。

我們可以簡單的將開發階段(或者定義為開發閉環 Inner Loop)的活動,分成下面幾個主要板塊:

  • Learn的階段

隨著微服務軟體架構與DevOps的興起,以及網際網路大廠所引領的 “you build it, you run it”,這樣的理念的推行,應用開發團隊的職責,越來越向傳統基礎架構所負責的領域延展,包括:設計,開發,測試,打包,執行應用。

為了有效的實踐這樣的理論,應用開發團隊需要及早學習並熟悉應用實際的物理執行計算環境;在雲原生K8S平臺的廣泛普及下,意味著開發團隊需要學習並熟悉基於K8S的應用部署平臺,利用這樣的平臺進行應用的開發、除錯,甚至進而打包並部署應用到K8S環境中,並提供精益運維的支援;

可現實是,隨著K8S平臺的實踐,越來越多的開發團隊意識到,直接基於K8S 平臺提供的介面進行開發活動,嚴重影響開發團隊的開發效率;因此,退而求其次,開發環境採用桌面版的容器環境,例如:Docker/Docker Compose,整合測試、生產環境用K8S平臺。這種環境的差異,特別是在微服務架構的應用開發、部署、運維場景下,為後期精益運維引入了巨大的風險;更嚴重的是,有的應用系統非常的複雜,桌面版的容器環境沒法滿足應用算力的需求,不得不依賴遠端的K8S平臺進行開發活動,仍然會產生開發效率下降的問題。

Tanzu Application Platform 提供了一個服務層,將K8S的介面遮蔽在了這個服務層之下;利用TAP的服務層介面,開發團隊可以快速的開展應用的日常開發、測試、部署等活動。

需要說明的是,本文主要關注在開發,除錯階段如何利用TAP服務層的快速除錯API,幫助開發工程師,利用本地或遠端的K8S進行應用的開發,除錯活動;如果需要了解TAP服務層提供的推送應用API、Bind Backing Service等API的需求,請參考系列文章的其它主題。

  • Discovery and Start 的階段

 開發團隊在這個階段,通過 DDD(Domain Driven Design)學習並形成各個子系統的邊界、Boris分析子系統間的呼叫與依賴、SnapE記錄子系統的介面規格與描述;同時,學習部署系統的計算平臺的基本功能已幫助解決應用系統的可用性等非功能特性;對於基於Kubernetes平臺部署的雲原生應用系統,意味著開發團隊需要分配寶貴的開發時間,讓團隊成員熟悉Kubernetes平臺的基本功能。

Tanzu Application Platform可以極大的降低開發團隊成員學習Kubernetes的門檻,將應用在Kubernetes環境中的開發、除錯、部署與訪問整合到開發團隊熟悉並廣泛使用的IDE(Integrated Development Environment)中,實現降低開發工程師基於Kubernetes開發應用的門檻。

  • Code、Test、Debug 工作流

這個階段是開發團隊的主要日常工作一個普遍的廣為接受的想法和目標,就是儘量讓開發團隊專注於領域需求的業務程式碼開發。

但我們發現在基於K8S雲原生平臺的開發過程中,很少有開發團隊在日常的開發中,基於K8S平臺來進行日常的開發、除錯等工作流程。一個最為樸素的原因,從修改程式碼,到構建 OCI image映象,到裝配K8S yaml,再到最後的部署,釋出應用,訪問程式碼實現修改的結果這一系列操作下來,至少需要15到20分鐘。更麻煩的是如何利用開發工程師熟悉的IDE進行應用的K8S遠端斷點除錯呢?妥協的結果,就是開發團隊仍然利用已有的工具,利用桌面環境,利用Docker工具棧,開展Code、Test、Debug的日常工作。對於複雜的微服務應用,或者受限於外部系統依賴, 再或者受限於桌面算力,必然影響開發團隊的開發效率。

Tanzu Application Platform 專門針對開發團隊使用K8S雲原生環境進行應用的開發、測試、除錯的場景,利用開源社群提供的 Tilt 工具,結合 TAP Developer Tools Extensions 以及IDE開發工具3重優勢,嘗試解決開發團隊有效利用K8S進行微服務開發、測試、Debug的日常需求。這也是本文重點分享的內容。

利用TAP實現應用雲除錯

基於之前的背景鋪墊,期待大家能夠認識到,在雲原生下的微服務應用開發迴圈(inner loop)階段,在必要的情況下,利用與應用部署的QA或者預生產環境相近似的Developer K8S環境進行開發、測試、除錯,能夠極大的提升開發效率同時減少未來可能因為環境的差異導致的測試、部署上的風險。

接下來,我們會利用Tanzu Application Platform 應用開發除錯 Developer API,以及開源 Tilt 工具、VS code IDE 、Tanzu Developer Tools Plugin,給大家演示如何利用TAP所提供的工具鏈,幫助開發團隊實現快速,便捷的K8S應用雲除錯。

安裝準備工作

如圖所示,在利用TAP實現應用的雲調製之前,需要準備一下TAP環境以及必要工具:

  • 準備基於Dev角色的桌面或遠端TAP Enabled K8S叢集

關於基於角色的TAP Dev環境安裝,請參考系列文章的TAP安裝篇,本文不在贅述;

  • 桌面IDE開發環境的準備,目前TAP v1.1 支援的IDE是支援Java開發環境的VSCode,後續版本會繼續加入Eclipse與Intellij的IDE的plugin支援;
  1. 通過 Tanzu Network 官方網站下載 Tanzu Developer Tools for Visual Studio Code
  2. 開啟VS Code IDE

  1. 執行Extensions: Install from VSIX…”.
  2. 選擇擴充套件檔案:tanzu-vscode-extension.vsix.

安裝成功後,Reload VSCode

注意:VSCode 的 Tanzu Application Platform Plugin的安裝詳情請參考官方手冊

正常安裝 Tanzu Developer Tools extension 會同時安裝如下Plugin:

  • Debugger for Java
  •  Language Support for Java(™) by Red Hat
  • YAML extensions

注意:如果任何依賴的Plugin安裝失敗,請參考官方安裝手冊,重新手工安裝這3個Plugin;

請安下圖操作,確認 Language Support for Java is running in Standard Mode

  • 在桌面環境中安裝 Tilt v0.24.0或以上版本
  • VSCode 的Tanzu Developer Tools extension 的全域性配置;
  1. 如果您的桌面環境可以訪問多個K8S叢集,請啟動VSCode的時候,確保其引用正確的安裝有TAP 的K8S環境;
  2. 啟動 VSCode後,點選選單 File -> Preferences -> Settings -> Extensions -> Tanzu ;
  3. 在當前的配置頁面,配置如下引數:
    • Source Image (必選配置):TAP Developer Plugin會將當前專案環境的原始碼專案打包,格式為OCI image並推送到本地映象倉庫。這麼做的目的是對比前後專案的變化,已決定如何快速更新遠端K8S環境中執行的應用。配置舉例:your-registry.io/project/tanzu-java-web-app-source
    • Local Path (可選配置):配置當前專案環境的本地路徑,預設配置:current directory
    • Namespace (可選配置):配置應用推送的K8S Namespace的租戶空間,預設配置:當前桌面環境的kubeconfig檔案中設定的Namespace。

專案工程 Tiltfile 配置檔案

通過 Tanzu Developer Tools Extension 以及 本地Tilt 工具,進行Java應用的雲端(K8S)除錯,需要準備一個叫 Tiltfile 的配置檔案;這個檔案可以利用 Tanzu Developer Tools Extension提供的模板進行建立和定製化;

如圖所示:

  1. 在專案工程的根目錄,建立一個叫 Tiltfile 的空白檔案;
  2. 在檔案的空白處,敲入 ti,Tanzu Developer Tools Extension會自動提示Tiltfile的模板,Tab可以自動填充;
  3. 根據專案的實際情況,進行模板的定製化,如下圖:

利用TAP進行Java應用的雲除錯 - 遠端應用自動更新

應用/服務開發工程師日常開發工作,最經常的工作就是編寫程式碼、編譯、打包、部署與驗證結果。這樣的工作流程在雲原生(K8S)的開發平臺下,變的耗時耗力;下面我們演示利用TAP Developer Tools Extensions 使得開發工程師在雲原生的環境下,可以像傳統開發環境一樣的進行日常的開發工作。

  1. 啟動 Tilt 環境,如下圖:

2.(Optional) 啟動 Tilt Dashboard

3.第一次啟動應用除錯,依賴專案的規模,以及TAP平臺架構師提供的雲環境的流水線的配置,需要一定的時間完成應用從構建,到部署,以及最後的訪問;例如下圖,是作者的TAP環境,應用部署的流水線配置:

注意

       儘管在本文,我們一直強調的是TAP PaaS平臺如何幫助開發團隊、開發工程師利用TAP快速開發、迭代雲原生的應用程式;我們同時也考慮並實踐如何利用DevSecOps的理念,將部分Security、Ops相關的工作,左移到開發階段;作為TAP的平臺架構師,可以將安全相關的工作,例如:程式碼CVE掃描、容器映象掃描加入到開發階段的開發、除錯流水線中;一個顯而易見的好處,在不影響開發工程師日常工作流程的前提下,提前將安全相關的最佳實踐加入到開發階段以減少後期因為安全、審計而導致的專案延期;

4.訪問應用URL

 通過上圖,可以看到,利用TAP Developer Tools Extension,開發工程師無需被暴露在K8S雲原生的環境下,就可以進行應用的開發與除錯工作;

當然,如果確實需要利用K8S的native 命令,進行除錯,也可以方便的進行操作,如下:

5.應用開發的Iterate,即修改程式碼,測試結果

例如:修改如下的程式碼

至於具體的程式碼,重點關注紅框中的時間 tag,我們可以觀察到,從Save程式碼的變更,到訪問URL,只用了極短的時間 (4ms);經過測試,基本跟工程師利用本地環境進行開發、測試時間大體相同。

利用TAP進行Java應用的雲除錯 - 遠端設定斷點

 斷點除錯,開發工程師開發應用最基本的技能與工作,在基於雲原生(K8S)的環境下,變得異常的陌生與複雜。利用TAP Developer Tools Extension for IDE (VSCode) 開發工程師可以在必要的情況下,利用IDE的斷點除錯能力,通過 TAP Developer Tools Extension,對執行在K8S雲原生環境下的應用,進行類似桌面程式開發體驗類似的雲斷點除錯功能。

具體的操作如下:

  1. IDE (VSCode) 的TAP Developer Extension的配置跟前文提到的過程一致;
  2. 利用 workload.yaml ,右鍵功能選單,選擇 Tanzu: Java Debug Start

3.利用 IDE 的斷點除錯能力,進行正常的斷點的設定,除錯;如下圖:

利用TAP實現面向開發的應用執行狀態監控

國內外網際網路大廠,一直都在佈道雲原生 DevOps 或者 Google SRE,其中有一句最經典的話:”you build it, you run it”;但是具體到如何成功實踐這樣的理念,一個最樸素的需求:將生產環境中的應用執行狀態展示給開發團隊。這樣的一個樸素的需求,其實對基礎架構是非常有挑戰的任務:

  1. 開發團隊對執行中的應用需要展示什麼樣的資訊?基礎架構通常的集中觀測/監控/預警平臺提供的各種監控圖表,Trace,Log等資訊,能否直接暴露給開發團隊來使用?這種集中式的平臺,培訓工作如何展開?
  2. 執行在生產環境中的應用,在傳統的基礎架構部門的管理下,能否開放給開發團隊成員去訪問?會不會產生運維安全問題?

Tanzu Application Platform GUI 為開發團隊提供了一個ReadOnly的、面向開發工程師的應用狀態展示面板(Application Live View)。

在這裡,ReadOnly 的目的顯然是消除生產環境運維團隊的顧慮,對於開發工程師來說,一個只讀的應用執行狀態展示面板,大多數的情況下,已經可以幫助開發團隊開展故障排查,應用執行調優、產品精益等活動;另外,面向開發工程師的應用狀態展示/監控面板,除了大家比較熟悉的CPU利用率、Memory使用趨勢等常規指標以外,應用當時的請求RPS、Response TimeDelay、執行緒池狀態應用執行時的環境變數等等,對開發工程師排查故障都是非常重要的資訊。

另外,Tanzu Application Platform GUI基於Spotify 開源專案Backstage 進行的定製化開發,意味著開發團隊,可以基於Backstage的Plugin機制,定製符合自己團隊、組織的應用執行狀態展示面板;

下面的圖示,基於TAP v1.1為大家展示幾個典型應用執行狀態資訊

  1. 進入 SpringBoot應用的部署Pod頁面

2.通過App Live View 從 Information Category中選擇你關心的執行狀態資訊;

3.下圖展示應用執行時的Env資訊,對應用故障排查至關重要:

4.Log Levels可在特殊情況下臨時動態調整當前應用例項的Log輸出級別;

5.SpringBoot Actuator 應用執行狀態展示

6.HTTP請求狀態展示

更多的應用執行狀態資訊,讀者可以嘗試參考之前提供的TAP安裝配置文件進行安裝並體驗,能夠獲取到比本文中提到的更多的應用檢測狀態資訊的展示,並體會到TAP給企業級應用帶來的可觀測性的價值。

文章小結:

基於雲原生平臺或者說K8S平臺,進行應用的日常開發、除錯當前在業界還處於剛剛開始的階段,但是發展非常迅猛;儘管目前很多的開發團隊,特別是傳統企業開發團隊,利用桌面的計算環境進行開發還是當前的主流但是我們已經注意到,越來越多的企業,在實踐以微服務架構進行新業務應用的開發過程中,對利用工具、IDE實現雲除錯也越來越期待;

VMware TAP PaaS平臺在支援開發人員實現應用程式的雲除錯的這種特性,能夠給諸多企業使用者軟體開發人員帶來更好的開發體驗。

此外,Tanzu Application Platform是一款面向開發的,高度可擴充套件的應用PaaS平臺。還有很多“有趣”能力等待大家的發掘。請持續關注TAP系列文章的其它專題;

作者簡介:

畢建華,VMware大中華區應用現代化部門高階解決方案架構師。多年來一直從事雲原生相關領域工作,包括系統設計以及參與多種容器排程平臺開發,部署,運維工作;包括,基於MesosDCOS平臺,開發Dbaas框架;

參與Kubernetes開源專案KUDO的開發與推廣;

CNCF認證CKA工程師;

VMware認證Spring Professional工程師

 

來源|公眾號:VMwareTanzu雲原生

「其他文章」