Terraform 與 Kubernetes 之間有何差異?

Terraform 和 Kubernetes 是用來管理應用程式部署和生命週期的 DevOps 工具。但它們執行的功能各有不同。Terraform 是開發人員使用的基礎設施即程式碼 (IaC) 工具,用來自動建立、佈建和管理雲端 IT 資源。它可讓您專注於雲端基礎架構所需的內容,並為您自動處理設定的必要步驟。相較之下,Kubernetes 是一種容器協同運作工具,可幫助您大規模管理容器。它可管理資源佈建、容器排程、分組和其他協調工作。

為什麼要使用 Kubernetes 和 Terraform?

Kubernetes 和 Terraform 都可協助大規模部署和管理雲端應用程式。

Terraform

IT 環境通常需要多個基礎架構資源、元件和組態。下列因素可能會導致基礎架構佈建變得更加複雜:

  • 組織內的不同團隊可能需要類似的基礎架構,但會對組態略作變更。
  • 基礎架構可能分散於不同的內部部署設定及多家雲端供應商。
  • 應用程式變更可能需要您修改或升級現有基礎架構。

您可以一次手動佈建一個基礎架構元件。但執行起來可能十分困難且費時,尤其當您有很多複雜的資源時更是雪上加霜。Terraform 可協助您使用程式碼佈建和支援受管理的基礎架構,讓難題迎刃而解。基礎架構即程式碼為受管理基礎架構帶來可重複性、透明度和效率。

Kubernetes

現代應用程式由微型服務構成,這些微型服務是獨立元件,以服務的形式執行個別應用程式程序。每項服務執行單一功能,並透過稱作 API 的明確定義介面與其他服務進行通訊。容器將微型服務封裝為不同平台上的可部署程式。但是,某些應用程式可擴展為跨不同伺服器執行個體的數千個微型服務。多容器應用程式帶來全新的管理問題:

  • 應該如何協調多個容器?
  • 應該如何排程容器?
  • 應該如何分組和分類容器?

Kubernetes 可以處理這類複雜操作,以利您擴展工作負載並管理跨多個伺服器執行個體的容器部署。您可以在任何地方執行容器化應用程式,而無需變更操作工具。

運作方式:Terraform 與 Kubernetes 相比

在談論有何相似之處和差異之前,我們先簡單探討這兩種技術的核心概念。

Kubernetes

Kubernetes 的運作方式為管理伺服器執行個體叢集,並排定容器在叢集上執行的時程。其透過有效地管理運算資源來滿足每個容器的資源需求。容器以邏輯群組 (稱為 Pod) 的形式執行,您可以 pod 為單位執行和擴展一或多個容器。

如控制平面軟體之類的 Kubernetes 元件可根據使用率或您定義的其他指標,決定要在何時何地執行 Pod、管理流量路由和擴展 Pod。每個 pod 都有 IP 地址和一個 DNS 名稱,Kubernetes 會使用這些資訊,將服務彼此連接和連接到外部流量。

Terraform

Terraform 使用狀態檔案來儲存基礎架構元件的相關資訊。狀態文件將基礎架構程式碼對應至現實世界資源。Terraform Core 是以兩個 Terraform 文件作為輸入變數的主要元件:

  1. 您的現有資源—或目前的狀態檔案。
  2. 這些資源的所需狀態—或組態檔案。

Terraform Core 會利用這些資訊建立資源圖,可識別任何資源間的相依性,並規劃其需要新增、修改或移除的資源。在您核准計劃後,Core 會與第三方服務進行通訊,以建立和佈建基礎架構元件。

Terraform 和 Kubernetes 之間有什麼相似之處?

兩者的運作和使用方式有其相似之處。

宣告式組態

這兩種工具都使用宣告式方法來定義和管理資源。宣告式組態是定義和管理系統或應用程式所需狀態的方法,不用一步步具體說明要如何達成該狀態。宣告式組態著重於描述最終結果或系統所需狀態,而非描述執行操作的順序。使用這兩種工具,您可以表達您希望系統呈現出的模樣或其行為方式。這些工具會為您處理達到該狀態的必要步驟。

自動變更管理

Kubernetes 和 Terraform 都有提供自動化的基礎架構變更管理機制。它們可以自動偵測組態中的複雜變更,將它們套用到基礎架構並同時管理相依性。兩者都支援版本控制、再現性和協作機制,將雲端環境的定義視為程式碼成品。變更採漸進式管理以減少錯誤,並支援持續整合和部署管道。

多重雲端部署

Terraform 和 Kubernetes 採雲端中立設計,並支援數家雲端供應商。它們可以管理跨多重雲端平台或內部部署環境中的託管基礎架構資源,讓您可以為應用程式選擇最適合的資源。

社群支援

Terraform 和 Kubernetes 這兩種開放原始碼都具有十分活躍的開發人員社群。它們提供各種外掛程式,擴充和集成,可改善功能並支援整合其他工具和服務。這些專案背後的社群會提供文件、教學課程和支援,協助開發人員有效地採用和使用這些工具。

主要差異:Terraform 與 Kubernetes 相比

Terraform 和 Kubernetes 是兩種不同的工具,在雲端運算和基礎架構管理中的目的與範圍也各有不同。

基礎架構佈建

Terraform 和 Kubernetes 都有佈建基礎架構,只是層級不同。Terraform 在雲端環境中提供和管理虛擬機器或雲端執行個體、網路、儲存及其他元件等資源。或者,使用 Kubernetes 進行僅止於容器工作負載的基礎架構佈建。

抽象化層級

Terraform 以更高的抽象化層級運作,管理跨雲端環境的資源及其組態。Kubernetes 以較低的抽象化層級運作,著重於叢集內容器的部署和生命週期。它提供了負載平衡、網路、服務探索和容器擴展的功能。

組態語言

Terraform 使用一種名為 HashiCorp Configuration Language (HCL) 的領域專用語言,或 Terraform v0.12 和更早版本則是使用 JSON。開發人員以 HCL 編寫宣告式組態檔案。相較之下,它們使用 YAML 或 JSON 型清單檔案來定義和設定 Kubernetes 叢集 Pod、服務、部署和其他資源。

故障復原

Terraform 沒有提供自動故障復原。您必須編寫在發生故障時所要執行的指令碼,Terraform 才能復原基礎架構。相較之下,Kubernetes 則可自動偵測並重新啟動故障的容器,確保應用程式維持所需狀態。您必須使用其他 Terraform 工具來部署 Terraform 的故障復原功能。

易於使用

在易用性和入門方面,一般認為 Terraform 比 Kubernetes 容易上手,更適合初學者使用。設定和安裝十分簡單,HCL 學習和使用起來較直覺化。您可以透過統一工作流程輕鬆管理不同環境中的雲端基礎架構。 

Kubernetes 學習起來較為困難,因為您必須了解如何部署 Kubernetes 叢集。它涉及設定主要節點和工作節點、安裝必要的元件,以及確保元件間通訊無礙。跟單純的基礎架構環境相比,叢集設定更加複雜,且需要更多知識。您必須具備容器化原理、網路、負載平衡和擴充策略的知識。

使用時機:Terraform 與 Kubernetes 相比

您可以使用 Terraform 支援多層應用程式的基礎架構,以利因應需求變化進行經常性的縱向擴展或縮減規模。開發人員可使用預先設定的 Terraform 範本快速設定編碼環境,大幅降低對營運團隊支援的依賴程度。網路工程師使用 Terraform 在雲端部署防火牆和路由器等基礎架構。您可以使用 Terraform 建立和部署新的拋棄式環境,然後在使用過後將其棄用。

使用 Kubernetes 大規模管理容器化應用程式。例如,從本機開發機器無縫遷移到生產部署,或在 AWS 上執行具備高度可用性和擴展性的 Kubernetes 叢集,同時與內部部署執行的部署保持完全相容。

差異摘要:Terraform 與 Kubernetes 相比

 

Terraform

Kubernetes

這是什麼?

基礎架構即程式碼工具

容器協同運作工具

為什麼要使用此工具?

為受管理基礎架構帶來可重複性、透明度和效率

減少操作複雜性,方便您輕鬆擴展容器工作負載及多容器應用程式

資源管理

管理所有類型的基礎架構物件,例如運算執行個體、儲存和聯網

僅以 Kubernetes 容器工作負載叢集的形式來管理伺服器資源

抽象化

將跨多個雲端環境的基礎架構佈建抽象化

將單一叢集中的伺服器佈建抽象化

組態語言

HCL

YAML 或 JSON

故障復原

您必須使用工具和指令碼來管理故障復原

自動化和自我管理

易用性

學習起來較為簡單,更容易上手

必須先具備容器化原則、聯網、負載平衡和擴展策略相關知識,才能開始使用

AWS 如何協助滿足 Terraform 和 Kubernetes 的需求?

AWS Terraform 模組是 AWS 上 Terraform 管理資源的建置組塊。模組在開放原始碼授權下發佈,由 AWS 與 HashiCorp 合作開發。捨棄 Terraform,您也可以考慮使用 AWS Cloud Development Kit (AWS CDK),這是一個開源軟體開發架構。使用 AWS CDK,您可以:

  • 使用包括 Terraform HCL 狀態檔案的熟悉程式語言來定義雲端應用程式資源。
  • 加速 AWS 入門,因為這不需要學習太多新事物。 

同樣,Amazon Elastic Kubernetes Service (Amazon EKS) 是一項受管 Kubernetes 服務,用於在 AWS 雲端和內部部署資料中心執行 Kubernetes。在雲端,Amazon EKS 可自動管理 Kubernetes 資源的可用性和可擴展性,以排程容器、管理應用程式可用性、存放叢集資料以及其他重要任務。 

捨棄 Kubernetes,也可以使用 Amazon Elastic Container Service (Amazon ECS),這是一項全面受管的容器協同運作服務,在 AWS 雲端平台上部署、管理和擴展容器化應用程式。使用亞馬遜 ECS,您可以:

  • 描述應用程式和所需資源。
  • 跨靈活運算選項啟動、監控和擴展應用程式,並自動整合到其他支援 AWS 服務。 
  • 執行系統操作,例如建立自訂調整和容量規則,以及觀察和查詢應用程式日誌和遙測。

立即建立帳戶,開始使用 AWS 上的 Terraform 和 Kubernetes。