當 Argo CD 遇上 Flux CD,誰才是 Kubernetes 上 GitOps 的真王者?
在我們開始實現Gitops之前,讓我為那些不熟悉 GitOps 及其工具的人提供一些背景。
GitOps 背后的基本思想是擁有一個版本控制的代碼,就像在 Git 存儲庫中一樣,它包含我們在生產中期望的基礎設施的聲明性定義,以及一個確保我們在那里擁有該狀態的自動化過程。
這意味著每個pull請求都可以為您的用戶發布一個新特性,任何斷點都可以通過簡單的git revert來回滾。因此,開發人員只需要訪問代碼,而不需要訪問實際環境。請注意,這并不意味著我們在限制開發人員;這只會讓開發人員更接近環境,從而使他們能夠使用。
Argo CD 和 Flux CD 都是著名的工具,可以將您的實時環境與 Git 存儲庫中的所需狀態相匹配。而這個博客內容將幫助您了解這些工具的核心功能,然后進行公平的比較,以便您做出正確的選擇。
ArgoCD
Argo CD是Kubernetes的聲明式GitOps持續交付工具。它具有可伸縮性、安全性(以及SSO集成)、多集群多租戶支持和可擴展性。
安裝
Argo CD的安裝非常簡單,可以在入門頁面上看到。
https://argo-cd.readthedocs.io/en/stable/getting_started/
要訪問UI,使用這兩種方法暴露Argo CD服務
如果你計劃只使用核心的argocd,你可以用argocd CLI來控制它。要安裝命令行,只需運行命令行
核心概念
在Argo CD中,所有相關資源都被分組并部署為一個名為Application的單元。每個申請都是Project的一部分,Project是Argo CD的租賃單位。每個租戶可以被限制在一個名稱空間和集群中。
您的應用程序鏈接到一個版本控制,比如Git,它決定應用程序的狀態。一旦部署,資源就處于Live狀態。每當在Git中更改代碼時,就會創建一個新的Desired狀態,可以通過儀表板上的快速刷新查看該狀態。為了使您的活動狀態與期望的狀態相匹配,您可以同步它們。
它還允許您監視應用程序的運行狀況,并在出現故障時,允許使用歷史記錄和回滾功能回滾到舊版本。
預排
現在到儀表板上… 儀表盤看起來非常現代,非常直觀。要開始一個新項目,只需單擊new App按鈕并填寫以下細節。
在源代碼部分,提供Git repo的URL和文件夾的路徑(這是從repo派生的響應式下拉列表)。然后向下滾動選擇集群,可以是你已經注冊的任何一個集群。
創建完成后,你會在主儀表板上看到一個以你的應用名稱命名的卡片。點擊它到達這個視圖。對于本演示,使用了kustomize-guestbook示例應用程序。
kustomize-guestbook: https://github.com/argoproj/argocd-example-apps/tree/master/kustomize-guestbook
live狀態不等于想要的狀態(因為我們還沒有部署任何東西),因此它顯示OutOfSync狀態?,F在單擊Sync按鈕進行部署
該視圖顯示了部署中復制集中的pod的粒度。在這里,您可以單擊任何元素來查看它們的事件、日志和狀態。
現在,每當Git中的代碼發生變化時,您都可以單擊Refresh以查看新的Sync狀態。如果不同步,比如需要改變資源,你可以點擊App Diff查看這些差異,然后點擊sync部署它們。
Flux CD
Flux最初由Weaveworks開發,現在在CNCF下孵化,是一套針對Kubernetes的持續和進步的交付解決方案,是開放和可擴展的。
安裝
Flux有一個cli優先的方法,UI只是一個附加組件。要安裝Flux CLI,請使用其中之一。
安裝Flux CLI: https://fluxcd.io/docs/installation/
- # HOMEBREW
- brew install fluxcd/tap/flux
- # GOFISH
- gofish install flux
- # BASH
- curl -s https://fluxcd.io/install.sh | sudo bash
- # YAY
- yay -S flux-bin
- # NIX OS
- nix-env -i fluxcd
- # CHOCOLATEY
- choco install flux
安裝CLI后,使用以下命令在Kubernetes集群上安裝Flux 。
- # For generic git server# For generic git server
- flux bootstrap git \
- --url=ssh://git@<host>/<org>/<repository> \
- --branch=<my-branch> \
- --path=clusters/my-cluster
- # For GitHub or GitHub enterprise
- flux bootstrap github \
- --owner=my-github-username \
- --repository=my-repository \
- --path=clusters/my-cluster \
- --personal
- flux bootstrap git \
- --url=ssh://git@<host>/<org>/<repository> \
- --branch=<my-branch> \
- --path=clusters/my-cluster
- # For GitHub or GitHub enterprise
- flux bootstrap github \
- --owner=my-github-username \
- --repository=my-repository \
- --path=clusters/my-cluster \
- --personal
核心概念
Flux是一種更直接的GitOps方法,更少的人為干擾。這個過程從Bootstrapping開始。這將在集群上安裝flux組件,該組件將監視Source上的一個目錄。這個源上的任何更改都將通過Reconciliation過程更新到集群上。它可以與Helm釋放,Kustomization或保存在桶中的文物一起使用。
預排
讓我們從一些預先配置開始… 導出將被flux CLI用于與你的repo交互的Git登錄細節。
接下來,檢查集群是否兼容。您應該看到這樣的輸出。
現在使用git配置將flux安裝到你的集群中。
這將在你的GitHub帳戶中創建一個test-repo,并在repo中添加Flux組件清單。它還將附帶組件部署到集群,并將它們配置跟蹤集群中的./clusters/my-cluster/目錄。如果你克隆這個和檢查內容,你會發現類似的東西。
這樣,您的設置就準備好了。您可以在test-repo/clusters/my-cluster/中創建任何清單,flux將輪詢它并部署更新。
你也可以試試它實驗性的web UI。
https://github.com/fluxcd/webui
那我該選哪個呢?
雖然它們都遵循相同的路徑,但這些工具之間存在差異。讓我們看看,然后我會讓你決定什么最適合你。
代碼協作中的靈活性
Argo允許將多個代碼庫連接到集群,而Flux每個operator只能連接一個代碼庫。如果多個團隊在同一個應用程序上工作,并提供不同的清單,這將有利于Argo。
Manifest工具支持
Argo和Flux都與Helm和Kustomization合作。Argo還可以使用ksonnet和jsonnet。此外,這兩種工具都支持作為配置管理插件配置的自定義配置管理工具。
多租戶
直到幾個月前,這可能還在Argo的籃子里,然而,Flux v2對多租戶和服務器端協調的支持現在甚至在這個領域。
Flux多租戶:https://github.com/fluxcd/flux2-multi-tenancy
服務器端協調的支持: https://fluxcd.io/blog/2021/09/server-side-reconciliation-is-coming/
Web UI
Argo提供了一個強大的UI,可以幫助可視化不同對象之間的關系,并更好地監控它們,而Flux則完全依賴于CLI。你可以添加web UI到Flux,但它仍然是實驗性的。
web UI: https://github.com/fluxcd/webui
Flux: https://github.com/fluxcd/webui
身份驗證
Argo可以與SSO集成,并且內置了對RBAC的額外支持。Flux只與服務帳戶的RBAC一起工作。
自動化容器更新
Flux在自動化容器更新方面占了上風,而另一方面,在Argo中需要手動提交和同步。
管理
另一點是Flux的簡單設計。Flux可以自動部署應用程序,幾乎無需維護。Argo需要你來部署但我個人更喜歡在這里控制。
最后的判決
Argo和Flux都是非常棒的工具,為它們的用例提供了很好的服務。由于Argo的可擴展控制和多功能性,我總是傾向于使用Argo。然而,Flux v2可能很快就會改變這一點!