應(yīng)對五大 Kubernetes 調(diào)試挑戰(zhàn)
Kubernetes 等云原生技術(shù)使公司能夠快速構(gòu)建軟件并輕松擴(kuò)展。然而,由于構(gòu)建面向服務(wù)的架構(gòu)(微服務(wù))和運(yùn)行底層Kubernetes基礎(chǔ)設(shè)施的復(fù)雜性增加,調(diào)試這些基于 Kubernetes 的應(yīng)用程序可能非常具有挑戰(zhàn)性。
錯誤是不可避免的,通常是由于軟件開發(fā)過程中的錯誤或疏忽而發(fā)生的。因此,為了讓企業(yè)跟上應(yīng)用程序交付的步伐并讓最終用戶滿意,開發(fā)人員需要一種高效且有效的調(diào)試方式。這涉及查找、分析和修復(fù)這些錯誤。
本文重點(diǎn)介紹了五個 Kubernetes 調(diào)試挑戰(zhàn)以及如何解決它們。
1.由于構(gòu)建和重新部署容器導(dǎo)致開發(fā)循環(huán)緩慢
當(dāng)開發(fā)團(tuán)隊采用像 Kubernetes 這樣的云原生技術(shù)時,他們的開發(fā)人員體驗(yàn)會發(fā)生顯著改變,因?yàn)樗麄儸F(xiàn)在需要在內(nèi)部開發(fā)循環(huán)中執(zhí)行額外的步驟。他們不再像以前在整體環(huán)境中那樣編寫代碼并立即看到代碼更改的結(jié)果,而是必須管理外部依賴項(xiàng)、構(gòu)建容器并實(shí)施編排配置(例如 Kubernetes YAML)才能看到影響他們的代碼更改。
有幾種方法可以解決這個 Kubernetes 調(diào)試挑戰(zhàn):
- 第一個是讓您在本地開發(fā)服務(wù)并專注于單元測試而不是端到端測試,但是當(dāng)服務(wù)/Web 應(yīng)用程序具有身份驗(yàn)證要求和對數(shù)據(jù)庫的依賴性時,這會很痛苦。
- 解決這個問題的另一種方法是使用一個名為 DevSpace 的工具,它將自動執(zhí)行您的構(gòu)建和部署步驟,從而使其更快。
- 最后,您還可以利用名為 Telepresence 的 CNCF 工具將本地開發(fā)環(huán)境連接到遠(yuǎn)程 Kubernetes 集群,從而可以訪問遠(yuǎn)程 Kubernetes 集群中的這些外部依賴項(xiàng),并針對本地正在開發(fā)的服務(wù)進(jìn)行即時測試反饋回路。
2.分布式應(yīng)用程序的端到端流程缺乏可見性
使用 Kubernetes 時的另一個調(diào)試挑戰(zhàn)是全面了解應(yīng)用程序的端到端流程,因?yàn)榉?wù)通常太多了。如果沒有完全可見性,就很難識別和修復(fù)錯誤。
理想情況下,您應(yīng)該能夠獲得跨服務(wù)可見性,了解什么在調(diào)用什么、什么在超時等。要解決這個問題,您需要利用能夠使可觀察性和跟蹤更加無縫的工具。例如,工具 OpenTelemetry、Jaeger 和 Grafana Tempo 可以幫助您獲取重現(xiàn)錯誤所需的信息。這里的目標(biāo)是獲取盡可能多的信息,當(dāng)您這樣做時,您將能夠?qū)崟r修復(fù)錯誤并最終提高應(yīng)用程序的整體性能。
3.無法將調(diào)試器附加到代碼
開發(fā)人員需要的最重要的事情之一是能夠?qū)⒄{(diào)試器附加到他們的代碼,而使用 Kubernetes 并不能使這變得容易。是的,打印/日志語句之類的東西可以工作,但它們遠(yuǎn)不及能夠?qū)⒄{(diào)試器放在某物上并單步執(zhí)行代碼,特別是如果它是用戶不熟悉的新代碼庫。
解決此 Kubernetes 調(diào)試問題的兩種可能方法是:
- 在本地開發(fā)并找到模擬或啟動本地依賴項(xiàng)實(shí)例的方法。
- 確保代碼是可單元測試的,并專注于這些代碼,因?yàn)樗鼈兏菀拙帉憸y試,也更容易調(diào)試。
4.使用本地更改執(zhí)行集成測試的復(fù)雜設(shè)置
云原生應(yīng)用程序通常由各種微服務(wù)組成。通常情況下,這些微服務(wù)相互依賴地工作并相互通信以處理更大的業(yè)務(wù)請求。
例如,社交媒體應(yīng)用程序的時間線服務(wù)可能需要與用戶配置文件服務(wù)對話以確定用戶的關(guān)注者,同時可能需要與身份驗(yàn)證服務(wù)對話以確定用戶的身份驗(yàn)證狀態(tài)。由于微服務(wù)之間發(fā)生的這種多向的、服務(wù)到服務(wù)的通信,在部署任何更改之前對微服務(wù)執(zhí)行集成測試至關(guān)重要,因?yàn)閱为?dú)的單元測試并不總能保證目標(biāo)中應(yīng)用程序的行為環(huán)境。
在此上下文中執(zhí)行集成測試自然涉及運(yùn)行多個服務(wù)并連接到(可能是遠(yuǎn)程的)中間件和數(shù)據(jù)存儲。這需要帶來多重挑戰(zhàn)的技術(shù)和工具。這些挑戰(zhàn)包括資源有限以及生產(chǎn)和非生產(chǎn)環(huán)境之間的數(shù)據(jù)不一致;管理不同環(huán)境的不同配置;以及與管理服務(wù)版本控制、發(fā)布和部署周期相關(guān)的困難。
5.重現(xiàn)僅在生產(chǎn)/暫存中發(fā)生的問題
有時,重現(xiàn)在本地生產(chǎn)或暫存中發(fā)生的錯誤可能非常復(fù)雜。此時,您的模擬或現(xiàn)有值是不夠的。
你會想,我怎樣才能真正重現(xiàn)這個問題?我怎樣才能更快地找到問題的根源?好吧,在面對 K8s 調(diào)試挑戰(zhàn)時,一個名為 Telepresence 的開源工具通常是我的首選——該工具允許您訪問遠(yuǎn)程依賴項(xiàng),就像它們在本地運(yùn)行一樣,并將流量從遠(yuǎn)程服務(wù)重新路由到本地服務(wù)。
這意味著您可以實(shí)時調(diào)試它們,重現(xiàn)這些問題,并更快地將修復(fù)推送到您首選的版本控制和CI/CD管道。
結(jié)論
大多數(shù)組織堅持認(rèn)為任何重要的軟件交付都要經(jīng)過多次迭代測試,但重要的是要記住錯誤是不可避免的。能夠有效地調(diào)試應(yīng)用程序是識別、理解和修復(fù)錯誤的最佳技術(shù)之一。Kubernetes 等容器技術(shù)為軟件開發(fā)人員帶來了許多好處,但也帶來了應(yīng)用程序調(diào)試挑戰(zhàn)。幸運(yùn)的是,有多種方法可以輕松應(yīng)對這些挑戰(zhàn)。