GitOps:Flux 與 Argo CD 的比較

GitOps是一種利用Git作為部署配置的真理來源的軟體開發和運營方法論。它涉及將應用程式或基礎設施的期望狀態保存在Git儲存庫中,並使用基於Git的工作流程來管理和部署變更。兩個幫助組織實施用於管理其Kubernetes應用程式的GitOps的流行開源工具是Flux和Argo CD。在本文中,我們將更深入地了解這些工具,它們的優缺點,以及如何設置它們。閱讀DZone的相關教程,了解如何使用Jenkins和Kubernetes自動化CI/CD管道

Flux和Argo CD的常見用例

Flux

  • 持續交付:Flux可用於自動化部署管道,並確保更改一旦推送到Git儲存庫就立即自動部署。
  • 配置管理:Flux允許您將應用程式的配置作為代碼存儲和管理,使其更容易版本控制和追蹤變更。
  • 不可變基礎設施: Flux 強制執行不可變基礎設施的方法——僅透過 Git 倉庫進行變更,而非透過手動干預集群。
  • 藍綠部署: Flux 支援藍綠部署,在這種部署中,應用程序的新版本與現有版本並行部署,並逐漸將流量轉移到新版本。

Argo CD

  • 持續部署: Argo CD 可用於自動化部署過程,確保應用程序始終與 Git 倉庫中的最新變更保持同步。
  • 應用程序推廣: Argo CD 支援應用程序推廣——應用程序可以從一個環境推廣到另一個環境。例如,從開發到生產。
  • 多集群管理: Argo CD 可用於管理多個集群中的應用程序,確保應用程序的期望狀態在所有集群中保持一致。
  • 回滾管理: Argo CD 提供回滾功能,使得在出現故障時更容易撤銷變更。

兩種工具的選擇取決於組織和應用的具體需求,但兩者均提供GitOps方法以簡化部署流程並降低人為錯誤風險。它們各有優缺點,本文將探討其特點及設置方法。

什麼是Flux?

Flux是一款專為Kubernetes自動部署應用程式的GitOps工具。它持續監控Git儲存庫的狀態,並將任何變更應用於叢集。Flux與GitHub、GitLab、Bitbucket等各種Git供應商整合。當儲存庫發生變更時,Flux自動偵測並相應更新叢集。相關教程:如何使用GitLab CI/CD自動部署Spring Boot應用。

Flux的優點

  • 自動化部署:Flux自動化部署流程,減少手動錯誤,讓開發者專注於其他任務。
  • Git基礎工作流程:Flux利用Git作為事實來源,便於追蹤和回溯變更。
  • 宣告式配置:Flux使用Kubernetes資源定義來描述叢集期望狀態,便於管理和追蹤變更。

Flux的缺點

  • 有限的客製化:Flux僅支持有限的一組客製化,這可能不適用於所有使用案例。
  • 陡峭的學習曲線:對於新用戶來說,Flux的學習曲線較陡峭,需要對Kubernetes和Git有深入的理解。

如何設置Flux

先決條件

  • A running Kubernetes cluster.
  • 在您的本地機器上安裝了Helm。
  • A Git repository for your application’s source code and Kubernetes manifests.
  • Git倉庫的URL和一個SSH金鑰。

步驟1:添加Flux Helm倉庫

第一步是將Flux Helm倉庫添加到您的本地機器。運行以下命令以添加倉庫:

Shell

 

helm repo add fluxcd https://charts.fluxcd.io

步驟2:安裝Flux

現在FluxHelm倉庫已添加,您可以在集群上安裝Flux。運行以下命令以安裝Flux:

Shell

 

helm upgrade -i flux fluxcd/flux \
--set [email protected]:/.git \
--set git.path= \
--set git.pollInterval=1m \
--set git.ssh.secretName=flux-git-ssh

在上述命令中,將佔位符值替換為您自己的Git倉庫信息。git.url參數是Git倉庫的URL,git.path參數是包含Kubernetes清單的目錄路徑,而git.ssh.secretName參數是包含用於倉庫的SSH金鑰的SSH秘密的名稱。

步驟3:驗證安裝

執行上述命令後,您可以透過檢查Flux Pods的狀態來驗證安裝。運行以下命令以查看Pods:

Shell

 

kubectl get pods -n <flux-namespace>

如果Pods正在運行,則表示Flux已成功安裝。

步驟4:將Flux連接到您的Git倉庫

最後一步是將Flux連接到您的Git倉庫。運行以下命令以生成SSH金鑰並創建一個秘密:

Shell

 

ssh-keygen -t rsa -b 4096 -f id_rsa
kubectl create secret generic flux-git-ssh \
--from-file=id_rsa=./id_rsa --namespace=

在上面的命令中,將<flux-namespace>替換為Flux安裝的命名空間。

現在,將生成的公開金鑰作為部署金鑰添加到您的Git倉庫中。

您已成功使用Helm設置Flux。每當Git倉庫中的更改發生時,Flux將檢測到這些更改並相應地更新集群。

總結來說,使用Helm設置Flux是一個相當簡單的過程。通過使用Git作為真相來源並持續監控集群狀態,Flux有助於簡化部署過程並降低手動錯誤的風險。

什麼是Argo CD?

Argo CD是一款開源的GitOps工具,自動化部署應用程式至Kubernetes。它允許開發者以宣告式管理應用程式,並保持應用程式的期望狀態與實際運行狀態同步。Argo CD整合了Git儲存庫,持續監控其變更。一旦偵測到變更,Argo CD便將其應用至集群,確保應用程式始終保持最新。透過Argo CD,組織能自動化部署流程,降低人為錯誤風險,並利用Git的版本控制功能。Argo CD提供圖形用戶介面及命令列介面,使得大規模應用程式的使用與管理更為便捷。

Argo CD的優點

  • 先進的部署功能:Argo CD提供如滾動更新和金絲雀部署等先進部署功能,簡化複雜部署的管理。
  • 用戶友好的介面:Argo CD提供用戶友好的介面,使部署管理更為簡便,尤其適合非技術用戶。
  • 可客製化:Argo CD允許更高程度的客製化,使其更易於適應特定使用案例。

Argo CD的缺點

  • 陡峭的學習曲線:對於新手而言,Argo CD的學習曲線較陡峭,需要深入了解Kubernetes和Git。
  • 複雜性:相較於Flux,Argo CD的架構更為複雜,這可能使其管理和故障排除更為困難。

如何設置Argo CD

Argo CD可以透過Helm,一個Kubernetes的套件管理器,安裝在Kubernetes叢集上。本節將逐步介紹如何使用Helm設置Argo CD。

先決條件

  • A running Kubernetes cluster.
  • 您的本地機器上已安裝Helm。
  • A Git repository for your application’s source code and Kubernetes manifests.

步驟1:添加Argo CD Helm倉庫

首先,需將Argo CD Helm倉庫添加到您的本地機器。運行以下命令添加倉庫:

Shell

 

helm repo add argo https://argoproj.github.io/argo-cd

步驟2:安裝Argo CD

添加了Argo CD Helm倉庫後,即可在叢集上安裝Argo CD。運行以下命令安裝Argo CD:

Shell

 

helm upgrade -i argocd argo/argo-cd --set server.route.enabled=true

步驟3:驗證安裝

運行上述命令後,您可以通過檢查Argo CD Pod的狀態來驗證安裝。運行以下命令查看Pod:

Shell

 

kubectl get pods -n argocd

如果Pod正在運行,則表示Argo CD已成功安裝。

步驟4:將Argo CD連接到您的Git倉庫

最後一步是將Argo CD連接到您的Git倉庫。Argo CD提供了一個圖形用戶界面,您可以利用它來創建應用程序並連接到您的Git倉庫。

要訪問Argo CD界面,運行以下命令獲取URL:

Shell

 

kubectl get routes -n argocd

在網絡瀏覽器中使用該URL訪問Argo CD界面。

進入介面後,您可以透過提供Git儲存庫URL及Kubernetes資源配置檔案的路徑來建立新應用程式。Argo CD將持續監控該儲存庫的變更並將其應用至叢集。

您現已成功使用Helm設置Argo CD。

結論

Kubernetes與DevOps是軟體開發生命週期中的關鍵部分,而GitOps則是自動化部署和管理Kubernetes上應用程式的一種寶貴方法。Flux和Argo CD是兩個廣受歡迎的GitOps工具,提供簡單高效的自動部署流程,強制實施不可變基礎設施,並以一致且可預測的方式管理應用程式。

Flux專注於自動化部署管道及提供程式碼式的配置管理,而Argo CD則提供更全面的GitOps解決方案,包含多叢集管理、應用程式推廣及回滾管理等功能。兩者各有優劣,選擇哪一個取決於組織及應用程式的具體需求。

無論選擇何種工具,GitOps都提供了一種簡化部署流程並降低人為錯誤風險的寶貴方法。透過使應用程式的期望狀態與Git倉庫保持同步,GitOps確保變更以一致且可預測的方式進行,從而帶來更可靠和高效的部署過程。

Source:
https://dzone.com/articles/gitops-flux-vs-argo-cd