容器化的日益普及引發了對高效管理、調度和控制Kubernetes(K8s或kube)集群的需求。市場提供了各種與 K8s 環境交互的工具,但沒有多少選項提供比 Helm 和 Terraform 更多的功能。
本文是Helm 和 Terraform 的正面比較。我們分析了這兩種配置工具的優缺點,解釋了它們在管理 K8s 設置方面的能力,并幫助您確定適合您的開發團隊的選項。
Terraform:主要功能
Terraform 是一種開源基礎架構即代碼 (IaC)工具,允許團隊管理和自動化基礎架構、平臺和服務。該工具通過代碼幫助構建、更改和版本化基礎架構,使工程師能夠快速輕松地:
- 啟動虛擬機和容器。
- 設置服務器。
- 創建安全方案和控制。
- 添加或刪除用戶并設置權限。
- 管理云資源。
- 安裝和管理Docker 容器。
2017 年,Terraform 的創建者 Hashicorp 宣布發布其 Kubernetes 提供商。因此,該工具能夠根據需要跨多個云提供商管理 K8s 集群。
在配置基礎設施或管理 Kubernetes 時,Terraform 依賴于聲明性語言。工程師不需要定義設置基礎設施的每一步。相反,開發人員提供所需的設置最終狀態,并且該工具計劃如何配置環境。例如,您可以為 VM、K8s 集群、VPC 和特定防火墻編寫一組參數,而無需提供配置說明。
聲明性配置文件很有幫助,因為團隊可以:
- 無需編輯說明即可輕松調整文件以適應基礎架構更改。
- 保持文件干凈和簡短。
- 快速編輯設置。
- 只需查看配置文件即可了解當前配置。
一旦工程師請求配置,命令terraform plan會指示工具比較現有設置(或查看第 0 天不存在任何內容)并計劃如何設置所需的基礎設施。然后該terraform apply命令通過云提供商的 API啟動資源。Terraform 是DevOps 團隊的熱門選擇,因為工程師可以使用該工具快速啟動和編輯CI/CD 管道中的環境。
Terraform 的主要特點
- 一個 Kubernetes 提供商,可以使用單個工具管理基礎架構和部署。
- 使用聲明性語言。
- 一種 IaC 方法,允許工程師像任何其他代碼一樣描述、處理和版本基礎設施。
- 可以使用云提供商的 API 進行設置,以實現順暢、有效和安全的配置。
- Terraform 適用于任何基于云的設置,無論是公共的、內部私有的、混合的還是多云的。
- 具有替換服務器而不是更改服務器的不可變基礎架構(這種方法可以簡化操作并減少錯誤、威脅和配置漂移)。
- 可以changesets自動應用于基礎架構以節省資源并避免錯誤。
- 先進的漂移檢測功能始終顯示當前狀態和所需狀態之間的差異。
- 可插拔設計,因此團隊可以自定義設置和添加功能。
- 該工具了解資源之間的關系,這有助于調度并將錯誤保持在最低限度。您還可以構建所有資源的圖表。
Helm:主要功能
Helm是一個 Kubernetes 包管理器,非常適合將可重復的應用程序和服務部署到集群。該工具允許用戶通過Helm Charts管理應用程序,簡化了 K8s 環境的定義、安裝和升級。Helm Charts是轉換成 Kubernetes 清單文件的文件和模板包。圖表是可重用的,并且可以包含基于 YAML 的模板:
- 不同的部署。
- 配置圖。
- 服務。
此外,您可以將圖表定義為依賴關系或嵌套圖表以獲得更大的靈活性。管理圖表通過單個命令行界面 (CLI) 進行,該功能可簡化操作。雖然大多數圖表對公眾開放,但公司經常編寫自定義圖表供內部使用。
Helm 有一個簡單的架構,它由一個客戶端和一個集群內的 Tiller 服務器組成:
- Helm Client為用戶提供了一個 CLI 來使用 Helm Charts 并與 Tiller 服務器交互。客戶端允許用戶執行各種操作,例如安裝、升級和回滾圖表。
- Tiller Server在集群內部運行,并與 K8s API 服務器交互以安裝、升級和刪除 Kubernetes 資源。
Helm 有很多好處,包括:
- 在不同環境中部署和管理 K8s 清單。
- 將復雜的應用程序打包在一起。
- 一起回滾或升級多個對象。
- 快速更改設置參數。
- 使用單個命令部署到多個環境。
Helm 及其模板引擎非常適合依賴 K8s 資源的CI/CD 流程。工程師無需為每個微服務編輯文件,而是可以定義標準藍圖并使用占位符代替動態值。然后,團隊可以使用一個命令創建圖表并在不同集群上重新部署相同的應用程序。
Helm 的主要特點
- 使用 Helm Charts、可重復使用的模板來快速配置和管理 Kubernetes 資源。
- 簡單的集群管理,可以輕松處理應用程序依賴項和部署實例。
- 安裝在集群中的 Tiller 服務器允許用戶直接與 Kubernetes API 交互。
- 使您能夠跟蹤后續版本。
- 一起回滾或升級多個對象的能力。
- 圖表的簡單升級和卸載過程。
- 允許用戶管理私有云、公共云和混合云上的容器。
Terraform 和 Kubernetes:優點和缺點
Terraform 的 Kubernetes 提供商提供了許多好處,但與 Helm 相比,該功能還相對年輕。偶爾的錯誤和缺少某些功能會帶來一些挑戰。
Terraform 優點
- 您可以使用相同的工具和代碼庫進行基礎架構和集群管理。
- 開發人員可以使用相同的語言來配置Kubernetes 架構并將應用程序部署到集群中。
- 您可以將資源調度程序設置為提供者。
- 有一個計劃階段,允許您在應用更改之前查看操作的結果。
- Terraform 的 Kubernetes 提供商得到了強大社區的支持。解決 K8s 問題通常只需要進行幾次 Google 搜索。
- 已經熟悉 Terraform 的團隊可以輕松快速地學習管理 Kubernetes 集群。
Terraform 缺點
- Terraform 的 Kubernetes 提供者仍然相對較新。
- 缺乏對 beta 對象的支持使得管理 K8s 集群內的應用程序和資源變得復雜。如果您正在使用 beta 資源(daemonset、statefulset等),那么采用 Terraform 可能具有挑戰性。
- 如果多個模塊具有基于提供程序的依賴關系,則難以管理。
- 不完全支持 Google Kubernetes Engine (GKE)。
- 沒有在 K8s 集群內安裝任何組件,因此沒有對運行中的 Pod 進行實時管理。
有關 Terraform 和 Kubernetes 的更多信息以及它們之間的區別。
Helm 和 Kubernetes:優點和缺點
與 Terraform 一樣,Helm 提供了一系列 K8s 優勢,但該工具的 Kubernetes 功能已經很成熟。但是,公司也應該考慮使用 Helm 的一些負面影響。
頭盔專家
- Helm 對?? K8s 的支持成熟且功能豐富,因此采用該工具是一個順利的過程。
- 一個廣泛的預建存儲庫,其中包含適用于各種應用程序和服務的有用圖表。
- 可重復使用的圖表、就地升級和自定義更新掛鉤簡化了復雜應用程序的管理。
- Tiller 服務器在 K8s 集群內通過直接 API 調用運行。
- Tiller 允許您有效地管理運行時資源。
- 回滾簡單且易于處理。
- 高級構造(流控制、管道等)支持靈活的部署模板。
- 允許您定義變量并在不同的環境和集群中部署應用程序。
- Helm Charts 的靈活性使團隊能夠在 Kubernetes 中標準化模板。
- 豐富的用戶社區和來自行業巨頭(微軟、谷歌、Bitnami)的支持。
頭盔缺點
- Helm 比 Terraform 管理起來更復雜,并且在 K8s 設置中成為一個相當大的責任。
- 對于沒有使用 Helm 工具經驗的團隊來說,學習使用 Helm 可能會非常耗時。
- 團隊需要為每個項目組成一個新的圖像,以避免在執行命令時出現混亂。
- VM 容量對于容器可擴展性至關重要。
Helm vs Terraform:比較表
Helm 和 Terraform 有許多相似之處,因為這兩個開源工具都允許工程師:
- 以代碼的形式描述和維護 K8s 對象。
- 在各種級別和環境中使用和覆蓋變量。
- 從多個來源(例如本地目錄和 git 存儲庫)安裝。
- 在運行任何東西之前設置空運行以查看操作的結果(Helm 有–dry-run 標志,而 Terraform 有 plan 子命令)。
- 訪問精選的軟件包列表。
- 向活躍的用戶社區尋求幫助。
- 享受所有主要云提供商的支持。
雖然相似,但這兩種工具的區別使它們更適合不同的用例。下表顯示了 Terraform 和 Helm 之間的主要區別。
地形 | 舵 |
一個相對較新的 Kubernetes 供應商(但進步很快) | 具有久經考驗的 K8s 功能的成熟工具 |
不在 Kubernetes 集群中安裝任何東西 | 在集群內安裝 Tiller 服務器并與 K8s API 連接 |
可以安裝 Kubernetes 集群 | 無法安裝 Kubernetes 集群 |
依靠模塊實現模塊化 | 依賴子圖實現模塊化 |
使用 JSON/HCL 文件格式來描述和維護 Kubernetes 對象 | 使用標準的 K8s 清單和 Go 模板來描述和維護 K8s 對象 |
缺乏對 beta 資源的支持使得在已經設置好的環境中切換到 Terraform 變得復雜 | 對 K8s 的支持更加成熟,因此采用該工具更加直接 |
運行時選項有限 | Tiller 在運行時提供了很多功能 |
支持環境變量 | 環境變量的有限選項 |
注冊表中沒有適用于 Kubernetes 的 Terraform 模塊 | 穩定和孵化器圖表提供了豐富的軟件包 |
Kubernetes 提供者尚未處理自定義資源 | 可以管理自定義資源 |
復雜的回滾,但資源較少 | 回滾更容易,但需要更多資源。 |
Helm 和 Terraform:一起使用它們
Helm 和 Terraform 不是相互排斥的,您可以在同一個 K8s 設置中使用這兩種工具。這兩個平臺都具有廣泛的功能,因此工程師可以:
- 使用 Terraform 創建和管理 Helm 資源。
- 在 Terraform 中使用 Helm 部署與集群相關的應用程序。
- 使用 Terraform 將 Helm 圖表部署到預配置的 Kubernetes 集群。
大多數依賴這兩種工具的團隊傾向于使用 Terraform 來處理 K8s 集群,并使用 Helm 來管理進入集群的資源。但是,同時使用這兩個平臺會使項目復雜化,因此在設置多工具環境之前,請考慮依賴一個平臺。
Helm vs Terraform:K8s 工具鏈中的兩個強大選項
Terraform 和 Helm 都是強大的工具,它們使 Kubernetes 管理更容易、更快、更可靠。但是,我們在上面強調的細微差別使每個平臺更適合不同的用例,因此請選擇更適合您的團隊和項目的平臺。