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

比較本地 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 開發週期的瓶頸提供一個簡單、有效且經濟的解決方案,並且隨著這些工具的不斷創新和發展,這種方法將變得更加普遍。