Argo CD 与 Flux CD — Kubernetes 集群的正确 GitOps 工具

语言: CN / TW / HK

C T O

   

   

 

Go Rust Python Istio containerd CoreDNS Envoy etcd Fluentd Harbor Helm Jaeger Kubernetes Open Policy Agent Prometheus Rook TiKV TUF Vitess Argo Buildpacks CloudEvents CNI Contour Cortex CRI-O Falco Flux gRPC KubeEdge Linkerd NATS Notary OpenTracing Operator Framework SPIFFE SPIRE     Thanos

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 派生的响应式下拉列表)。然后向下滚动选择集群,可以是你已经注册的任何一个集群。

已经注册: 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-guestbook

live 状态不等于想要的状态(因为我们还没有部署任何东西),因此它显示 OutOfSync 状态。现在单击 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
flux bootstrap git \
  --url=ssh://[email protected]<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 可能很快就会改变这一点!

参考地址 [1]

参考资料

[1]

参考地址: https://rajputvaibhav.medium.com/argo-cd-vs-flux-cd-right-gitops-tool-for-your-kubernetes-cluster-c71cff489d26