当前位置: 首页 > 科技观察

当ArgoCD遇上FluxCD,谁才是Kubernetes上真正的GitOps之王?

时间:2023-03-15 10:55:07 科技观察

在我们开始实施Gitops之前,让我为那些不熟悉Gitops及其工具的人提供一些背景知识。GitOps背后的基本思想是拥有一个版本控制的代码,就像在Git存储库中一样,它包含我们在生产中期望的基础设施的声明性定义,以及一个自动化过程来确保我们在那里拥有该状态。这意味着每个拉取请求都可以为您的用户发布一个新功能,并且可以使用简单的gitrevert回滚任何断点。因此,开发人员只需要访问代码,而不需要访问实际环境。请注意,这并不意味着我们限制开发人员;它只是让开发人员更接近环境,以便他们可以使用它。ArgoCD和FluxCD都是众所周知的工具,用于将您的实时环境与Git存储库中的所需状态相匹配。而这篇博客内容将帮助您了解这些工具的核心功能,然后进行公平的比较,以便您做出正确的选择。ArgoCDAArgoCD是用于Kubernetes的声明式GitOps持续交付工具。它具有可扩展性、安全性(和SSO集成)、多集群多租户支持和可扩展性。安装ArgoCD非常简单,可以在入门页面上看到。https://argo-cd.readthedocs.io/en/stable/getting_started/要访问UI,请使用这两种方法来公开ArgoCD服务。如果您打算只使用核心argocd,您可以使用argocdCLI来控制它。要安装命令行,只需运行命令行CoreConcepts在ArgoCD中,所有相关资源都被分组并部署为一个名为Application的单元。每个应用程序都是项目的一部分,项目是ArgoCD的租赁单元。每个租户都可以限制在一个命名空间和集群中。您的应用程序链接到版本控制,例如Git,它确定应用程序的状态。部署后,资源处于活动状态。每当Git中的代码发生更改时,都会创建一个新的Desired状态,可以通过在仪表板上快速刷新来查看。为了使您的活动状态与所需状态相匹配,您可以同步它们。它还允许您监视应用程序的运行状况,并在出现故障时允许您使用历史记录和回滚功能回滚到旧版本。现在演练到仪表板...仪表板看起来非常现代且非常直观。要开始一个新项目,只需单击新应用程序按钮并填写下面的详细信息。在源代码部分,提供Git存储库的URL和文件夹路径(这是从存储库派生的响应式下拉菜单)。然后向下滚动选择集群,可以是你注册的任何集群。已经注册:https://argo-cd.readthedocs.io/en/stable/getting_started/#5-register-a-cluster-to-deploy-apps-to-optional创建后,您将在主仪表板上将会看到一张以您的应用程序命名的卡片。单击它以进入此视图。对于此演示,使用了kustomize-guestbook示例应用程序。kustomize-guestbook:https://github.com/argoproj/argocd-example-apps/tree/master/kustomize-guestbooklive状态不等于想要的状态(因为我们还没有部署任何东西),所以它显示OutOfSync状态.现在单击Sync按钮部署视图显示部署中复制集中的pod的粒度。从这里,您可以单击任何元素来查看它们的事件、日志和状态。现在,每当Git中的代码发生变化时,您都可以单击Refresh来查看新的Sync状态。如果不是同步的,比如需要更改资源,可以点击AppDiff查看这些差异,然后点击sync进行部署。FluxCDFlux最初由Weaveworks开发,现孵化于CNCF,是一套面向Kubernetes的开放、可扩展的持续渐进式交付解决方案。有一种安装Flux的cli-first方法,UI只是一个附加组件。要安装FluxCLI,请使用其中之一。安装FluxCLI:https://fluxcd.io/docs/installation/#HOMEBREWbrewinstallfluxcd/tap/flux#GOFISHgofishinstallflux#BASHcurl-shttps://fluxcd.io/install.sh|sudobash#YAYyay-Sflux-bin#NIXOSnix-env-ifluxcd#CHOCOLATEYchocoinstallflux安装CLI后,使用以下命令在Kubernetes集群上安装Flux。#Forgenericgitserver#Forgenericgitserverfluxbootstrapgit\--url=ssh://git@//\--branch=\--path=clusters/my-cluster#ForGitHuborGitHubenterprisefluxbootstrapgithub\--owner=my-github-username\--repository=my-repository\--path=clusters/my-cluster\--personalfluxbootstrapgit\--url=ssh://git@//<存储库>\--branch=<我的分支>\--path=clusters/my-cluster#ForGitHuborGitHubenterprisefluxbootstrapgithub\--owner=my-github-username\--repository=my-repository\--path=clusters/my-cluster\--个人核心概念Flux是一种更直接的GitOps方法,减少了人为干预。该过程从引导开始。这将在集群上安装flux组件,它将监视Source上的目录。此源上的任何更改都将通过协调过程更新到集群。它可以与Helm发布、Kustomization或保存在存储桶中的工件一起使用。演练让我们从一些预配置开始...导出Git登录详细信息,fluxCLI将使用这些详细信息与您的存储库进行交互。接下来,检查集群是否兼容。你应该看到这样的输出。现在使用gitconfigure将flux安装到你的集群中。这将在您的GitHub帐户中创建一个测试存储库,并将Flux组件清单添加到存储库中。它还将随附的组件部署到集群并配置它们以跟踪集群中的./clusters/my-cluster/目录。如果您克隆它并检查其中的内容,您会发现类似这样的内容。这样,您的设置就准备好了。您可以在test-repo/clusters/my-cluster/中创建任何清单,flux将对其进行轮询并部署更新。您还可以尝试其实验性WebUI。https://github.com/fluxcd/webui那么我应该选择哪一个呢?虽然它们都遵循相同的路径,但工具之间存在差异。让我们看看,然后我会让你决定什么最适合你。代码协作的灵活性Argo允许多个代码库连接到集群,而Flux只能连接到每个操作员的一个代码库。如果多个团队在同一个应用程序上工作并提供不同的清单,这将有利于Argo。清单工具支持Argo和Flux都可以与Helm和Kustomization一起使用。Argo也可以使用ksonnet和jsonnet。此外,这两种工具都支持配置为配置管理插件的自定义配置管理工具。多租户直到几个月前,这可能还在Argo的篮子里,然而,Fluxv2对多租户和服务器端协调的支持现在甚至在这个领域。Flux多租户:https://github.com/fluxcd/flux2-multi-tenancy支持服务器端协调:https://fluxcd.io/blog/2021/09/server-side-reconciliation-is-coming/WebUIArgo提供了强大的UI,有助于可视化不同对象之间的关系并更好地监控它们,而Flux则完全依赖于CLI。您可以将WebUI添加到Flux,但它仍处于试验阶段。WebUI:https://github.com/fluxcd/webuiFlux:https://github.com/fluxcd/webui身份验证Argo可以与SSO集成,并对内置的RBAC提供额外支持。Flux仅适用于服务帐户的RBAC。自动化容器更新Flux在自动化容器更新方面具有优势,而另一方面,在Argo中,需要手动提交和同步。另一个管理点是Flux的简单设计。Flux可以自动部署应用程序,几乎不需要维护。Argo需要你部署,但我个人更喜欢在这里控制它。最终结论Argo和Flux都是出色的工具,可以很好地服务于它们的用例。由于其可扩展的控件和多功能性,我一直倾向于Argo。然而,Fluxv2可能很快就会改变这一点!