本文已超過一年。較舊的文章可能包含過時的內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

比較本地 Kubernetes 開發工具:Telepresence、Gefyra 和 mirrord

Kubernetes 開發週期是一個不斷演進的領域,其中有許多工具旨在簡化流程。每個工具都有其獨特的方法,而選擇通常取決於個別專案需求、團隊的專業知識和偏好的工作流程。

在各種解決方案中,我們將一個類別稱為「本地 K8S 開發工具」已然興起,該類別旨在透過將本地執行的組件連接到 Kubernetes 叢集來增強 Kubernetes 開發體驗。這有助於在雲端條件下快速測試新程式碼,避開傳統的 Docker 化、CI 和部署週期。

在這篇文章中,我們比較此類別中的三種解決方案:Telepresence、Gefyra 和我們自己的競爭者 mirrord。

Telepresence

作為該類別中最古老且最完善的解決方案,Telepresence 使用 VPN(或更具體地說,是 tun 裝置)來連接使用者的機器(或本地執行的容器)和叢集的網路。然後,它支援攔截傳入叢集中特定服務的流量,並將其重新導向到本地連接埠。重新導向的流量也可以進行篩選,以避免完全中斷遠端服務。它還提供互補功能來支援檔案存取(透過本地掛載到 Pod 的磁碟區)和匯入環境變數。Telepresence 需要在使用者機器上安裝本地守護程式(這需要 root 權限)和叢集上的 Traffic Manager 組件。此外,它會在 Pod 上以 Sidecar 形式執行 Agent,以攔截所需的流量。

Gefyra

Gefyra 與 Telepresence 類似,採用 VPN 連接到叢集。但是,它僅支援將本地執行的 Docker 容器連接到叢集。這種方法增強了跨不同作業系統和本地設定的可攜性。但是,缺點是它不支援在本機執行未容器化的程式碼。

Gefyra 主要專注於網路流量,不支援檔案存取和環境變數。與 Telepresence 不同,它不會更改叢集中的工作負載,確保在出現問題時可以輕鬆地清理。

mirrord

作為這三種工具中最新的工具,mirrord 採用不同的方法,將自身注入到本地二進位檔案中(在 Linux 上使用 LD_PRELOAD 或在 macOS 上使用 DYLD_INSERT_LIBRARIES),並覆寫 libc 函數呼叫,然後將其代理到它在叢集中執行的臨時 Agent。例如,當本地程序嘗試讀取檔案時,mirrord 會攔截該呼叫並將其發送到 Agent,然後 Agent 從遠端 Pod 讀取檔案。這種方法使 mirrord 能夠統一涵蓋程序的全部輸入和輸出 - 涵蓋網路存取、檔案存取和環境變數。

透過在程序層級運作,mirrord 支援同時執行多個本地程序,每個程序都在其在叢集中的各自 Pod 的上下文中,而無需將它們容器化,也無需使用者機器上的 root 權限。

摘要

Telepresence、Gefyra 和 mirrord 的比較
TelepresenceGefyramirrord
叢集連線範圍整部機器或容器容器程序
開發人員作業系統支援Linux、macOS、WindowsLinux、macOS、WindowsLinux、macOS、Windows (WSL)
傳入流量功能攔截攔截攔截或鏡像
檔案存取支援不支援支援
環境變數支援不支援支援
需要本地 root 權限
如何使用
  • CLI
  • Docker Desktop 擴充功能
  • CLI
  • Docker Desktop 擴充功能
  • CLI
  • Visual Studio Code 擴充功能
  • IntelliJ 外掛程式

結論

Telepresence、Gefyra 和 mirrord 各自提供獨特的方法來簡化 Kubernetes 開發週期,每種方法都有其優點和缺點。Telepresence 功能豐富,但帶有複雜性,mirrord 提供無縫體驗並支援各種功能,而 Gefyra 則旨在簡潔性和穩健性。

您們之間的選擇應取決於您專案的具體需求、您的團隊對工具的熟悉程度以及所需開發工作流程。無論您選擇哪種工具,我們都相信本地 Kubernetes 開發方法都可以為 Kubernetes 開發週期的瓶頸提供簡單、有效且經濟的解決方案,並且隨著這些工具持續創新和發展,將變得更加普及。