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