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




























