比较 GitOps 工具


如果您想从经典 CI/CD 环境切换到 GitOps,那么您可以从大量可用工具中进行选择。
术语 GitOps 是源代码管理系统 Git 的名称和操作中的缩写 Ops 的组合。将这个附加工具添加到 DevOps 工具箱的想法来自 Kubernetes 环境,它承诺将 IT 自动化提升到一个新的水平。与持续交付方法一样,GitOps 依赖于维护源代码管理中的所有信息。但是,不同之处在于部署环境直接从 Git 同步其状态,而 CI 服务器不负责推出。因此,必须在 Git 中对配置进行版本控制。由于这被视为代码,因此被称为“基础设施即代码”。
说到 GitOps 工具,通常首先想到的是 Kubernetes 的 Operator。一般而言,Operator操作员(通常也称为“自定义控制器”)是在 Kubernetes 集群中运行并在那里自动执行操作任务的应用程序(参见图 1)。此操作符模式也用于实现 GitOps。
GitOps operator用于运行协调循环,它将 Git 存储库中声明的目标状态与集群的实际状态同步。如果出现差异(例如,由于 Git 中的新提交),操作员通过将 Kubernetes 资源应用到 API 服务器来负责收敛到目标状态。经验表明,为了高效运行,需要超出核心功能集的附加功能。这些包括可观察性和命令行界面 (CLI) 或用户界面 (UI)。
 
比较两个最著名的 GitOps operator ArgoCD 和 Flux v2 是有意义的。由于这两个项目都在继续快速发展,所以这里的比较只能作为一个快照。
Flux v2 和 ArgoCD 都具有以下功能:

  • RBAC
  • 多租户
  • 可观察性(健康状态、通知和指标)
  • 用于自动化和 CI 集成的 CLI
  • 通过网络钩子开始同步
  • 使用事件调用 webhook(ArgoCD:钩子,Flux:通知)
  • 对于 Git 存储库中的某些提交进行回滚/随处回滚
  • 支持 Helm 和 Kustomize
  • 多集群支持
  • 以非特权用户身份执行容器
  • 安全上下文是可配置的

仅在 ArgoCD 中的功能:
  • 通过插件机制支持 Ksonnet、Jsonnet 等
  • 用于实时管理和监控应用程序的 Web 界面
  • UI 和 CLI 的 SSO 集成

仅在 Flux v2 中的功能:
  • Helm 和 Kustomize 应用程序中的依赖关系定义
  • 支持 SOPS
  • 自动更新 Git 存储库中的映像版本
  • 通过 Kubeconfig 对 CLI 进行身份验证

 
结论
Flux v2 和 ArgoCD 都提供了许多功能,这些功能也反映了多年的 GitOps 实践经验。两者都非常关注 GitOps 核心功能,这使得它们很容易集成到现有的 CI/CD 基础架构中。但是,如果您从绿地方法开始,则必须单独构建它。
总的来说,ArgoCD 提供了更多的配置选项(例如,授权)并提供了图形用户界面。但是,此 UI 必须进行配置和操作,并且还提供了更大的攻击面。这取决于是否需要 UI 的用例,因此这证明了更高的努力是合理的。OpenShift 的用户可能会遇到更少的工作,因为ArgoCD 作为 OpenShift GitOps 集成到平台中
Flux 有一些 ArgoCD 没有的小功能,比如支持 SOPS 和自动更新新的镜像版本。但是,后者是 Flux v2 尚未出现稳定版本的原因。当它是供应链中的核心组件时,可能很难选择版本号为 0.x 的产品。但是,我们确实希望很快在这里发布稳定版本。看到 ArgoCD 和 Flux v2 运行并比较它们的功能的一种可能性是作者启动的GitOps Playground项目。