为了帮助大家开启 GitOps 之旅,文介绍了 30 多种工具,如果你要想应用 GitOps,建议你使用这些工具。

GitOps 借鉴了 DevOps 方法论的自动化方面,是一种旨在通过软件开发和部署来简化基础设施管理和云操作的方法。虽然许多人认为 GitOps 可以替代 DevOps,但事实并非如此,该方法仅专注于实现 DevOps 方法论中的自动化这一个方面。

具体来说,GitOps 使用 Git 拉取(pull)请求来自动化基础设施配置和软件部署,所有这些都是为了使 CI/CD 变得更加高效。

GitOps 将 Git 作为应用程序开发和云基础设施的唯一事实源;采用声明式语句来简化配置和部署。

GitOps 统一了许多关键任务,比如云集群(特别是运行在云中的容器)的部署、管理和监控,并允许开发人员对他们的应用程序部署管道有更多的控制。由于 Git 可用于基础设施即代码(IaC)和应用程序开发,因此它是该方法的理想事实存储库。

1GitOps 的好处

对于那些使用该方法的人来说,GitOps 提供了一些关键的优势,首先是更精细的 CI/CD 管道本身。该方法充分利用了云原生应用程序和可伸缩云基础设施的优势,而没有引入常见的复杂性。

其他好处还包括:

  • 更高的可靠性,这是由 Git 的原生特性决定的。如果新代码导致了错误,你可以回滚部署并使用 Git 的跟踪机制恢复到该应用程序的任何版本。这也会使云基础设施更加健壮。
  • 提高了稳定性,尤其是在管理 Kubernetes 集群时。一切都是可跟踪的,并且集群配置中的变更也可以在需要时恢复。将以 Git 作为事实源,自动创建审计日志。
  • 更高的生产效率,使得开发人员能够更加关注代码的质量,而不是管道本身。一旦将新的代码提交给 Git,一切都将完全自动化,此外还可以利用其他自动化工具。
  • 最大程度的一致性,特别是在整个流程中使用相同的方法来进行端到端的管理时。GitOps 简化了应用程序、Kubernetes 附属组件以及 Kubernetes 基础设施的所有工作。

许多观点认为,GitOps 将持续交付与云原生优势和 IaC 结合起来,提供了这两个领域的最佳服务。GitOps 最佳实践还标准化了端到端的管道,你可以将该方法与任何现有管道进行集成,而无需进行大的更改。只要使用合适的工具即可完成这项工作。

2GitOps 工具

说到适合这项工作的工具,有无数工具可以帮助你将 GitOps 方法与现有工作流进行集成。一些支持 GitOps 的工具是非常流行的,甚至可以在现有的管道中使用它们。如果你想加入 GitOps,这里有一些我们推荐的工具可以帮助你进行入门学习。

image-20240801151359516

1、 Kubernetes

当然,Kubernetes 是 GitOps 的核心。毕竟,该方法是基于使用 Kubernetes 来管理容器并构建可靠的基础设施的。Kubernetes 现在提供了许多自动化工具,可以简化云基础设施的部署和扩展。我们将在本文的后面部分介绍其中的某些工具。

2、Git

作为一个开源的版本控制平台,Git 非常强大。在 GitOps 中,Git 存储库将成为唯一的事实源。提交给 Git 的每个代码都将被处理和部署。你还可以使用 Git 存储库来进行开发和部署。

image-20240801151413625

\3. Helm

Helm 是用于配置 Kubernetes 资源的最强大的工具之一。是的,你可以使用 Homebrew 或 Yum,但是 Helm 提供的自动化功能是其他同类工具所不具备的。

image-20240801151428627

\4. Flagger

如果你想进一步管理发布,来自 Weaveworks 的 Flagger 是必备的工具。它是一个管理渐进式交付的工具,允许有选择地部署新代码以识别错误。它可以很好地与本列表中的下一个工具配合使用。

image-20240801151440821

5、Prometheus

Prometheus 可以充当 GitOps 的监控工具。如果变更没有通过 Flagger 设置的测试,它将触发报警。除此之外,Prometheus 还弥补了 GitOps 与其他自动化工具之间的差距。

image-20240801151457340

6、Flux

Flux 或 FluxCD 只是 Kubernetes 的 GitOps 操作符。它会使用 Git 库中的配置自动调整 Kubernetes 的集群配置。Flux 是为什么可以轻松地恢复对 Kubernetes 集群所做更改的原因。

image-20240801151510135

7、Quay

对于镜像管理,可以使用 Quay。可以使用该工具对容器镜像进行细致的管理,而所有这些都不会牺牲安全性和可靠性。Quay 使 GitOps 可以使用本地镜像注册表,而不是像 GitHub 那样要使用基于云的镜像注册表。

image-20240801151524120

8、Auto-Assign

为了使你的 Git 拉取请求和更新井井有条,可以使用一些工具。Auto-Assign 就是其中之一。顾名思义,每当发现新的拉取请求时,它都会分配审查者,因此可以密切监控变更。

image-20240801151536077

9、CodeFactor

为了持续维护代码的质量,CodeFactor 是另一个可以集成到 GitOps 管道中的工具。它是一个自动的代码审查工具,当发现新的 Git 提交时,它会根据预定义的标准自动检查代码。

image-20240801151550208

10、DEP

管理依赖关系是关键,特别是当你的应用程序是基于 Go 之类的语言构建的时候。为了应对这种实例,你可以使用 DEP。它是专门为管理 Go 应用程序和服务的依赖关系而创建的,并且它不会减慢 GitOps 管道的速度。

image-20240801151601400

11、Kodiakhq

另一个用于管理代码的 Git 应用程序是 Kodiakhq。但该工具主要专注于自动更新和管理拉取请求,同时减少 CI 的负载。随着 Kodiakhq 的启动和运行,不再需要手动合并请求,这可以节省时间和宝贵的资源来执行其他任务。

image-20240801151617304

12、Atlantis

如果你使用 Terraform 来简化资源配置,那么可以使用 Atlantis 为管道添加其他自动化功能。Atlantis 自动执行对 Terraform 的拉取请求,并在发现新请求时触发进一步的操作。

13、Helm Operator

Helm Operator 还通过将自动化引入到 Helm Charts 发布中,进一步将 Helm 推向了新的高度。它被设计为在 GitOps 管道中从头开始工作,因此集成 Helm Operator 非常简单。

image-20240801151630298

14、Gitkube

Gitkube 更加专注于使用 Git push 构建和部署 Docker 镜像。该工具使用起来非常简单,不需要对单个容器进行复杂的配置。这也是一个可以在部署阶段节省大量时间和精力的工具。

image-20240801151803706

15、Jenkins X

当谈论 GitOps 工具时,我们真的不能不谈 Jenkins X。Jenkins 最初是作为 Kubernetes 的 CI/CD 平台的,但是该平台可以用来无缝地管理你的 GitOps 管道。它甚至具有一个内置的预览环境来最大程度地减少代码和部署错误。

16、Restyled

为了实现更好的标准化,Restyled 会强制执行某种编码样式。由于 GitOps 被设计为一种标准化端到端流程的方法,因此具有自动执行代码审查和重新合并请求的能力是一个巨大的优势。

图片

17、Argo CD

Argo CD 采用了一种更直观的方式来处理 GitOps。它可视化了应用程序和环境的配置,并使用图表和可视化的提示来模拟 GitOps 管道。你也可以将 Argo CD 与 Helm 和其他 GitOps 工具结合使用。

18、Kapp

Kapp 是 Kubernetes 应用程序的衍生名称,专注于管道的部署方面。它将由其他自动化工具创建的软件包集成到 GitOps 工作流中,并基于它们生成 Kubernetes 配置。

19、Kpt

Kpt 或“kept”是用于简化 Kubernetes 资源部署和配置的另一种工具。它使用声明来处理资源配置,从而使开发人员可以更好地控制他们的基础设施。使用 Kpt 完全不需要手动配置。

20、Stale

Stale 能处理一些令许多开发人员都很恼火的事情:悬而未决或被放弃的问题以及拉取请求。使用 Stale,你可以配置何时将拉取请求和问题视为放弃,然后自动管理这些请求和问题。

21、 Kube Backup

Kube Backup 是维护 Kubernetes 集群配置的重要工具。它将集群备份到 Git,特别是集群的资源状态。如果环境发生灾难性故障,可以使用 Kube Backup 来更快地启动和运行应用程序。

22、Untrak

Untrak 是一个用于管理 Kubernetes 集群资源的便捷工具。该工具会自动在集群中查找未跟踪的资源。它还可以处理垃圾回收,并能帮助你保持 Kubernetes 集群的精益。

23、Fluxcloud

Fluxcloud 整合了 Slack 与 GitOps。如果你使用 Flux(FluxCD),那么也一定会喜欢 Fluxcloud。它消除了对 Weave Cloud 的需求,并允许为每个 FluxCD 活动生成 Slack 通知。

image-20240801152144904

24、Stickler CI

代码风格的指南和标准!Sticker CI 在不影响管道本身的情况下简化了编码风格的实现。只要在工作流程中实现 Stickler CI,就可以快速且一致地进行代码检查和标准化。

image-20240801152134808

25、Task List Completed

下一个工具非常简单。Task List Completed 将停止合并具有未完成任务的拉取请求。无需手动检查每个拉取请求的任务,就可以使用该工具来保护部署环境。

image-20240801152124128

26、Slack

我们已经提过了如何使用 Fluxcloud 进行通知,但是如果你决定不使用 FluxCD,那怎么办呢?你仍然可以通过激活本地的 Slack 插件来获取 Git 的变更通知。Slack 支持关闭和打开拉取请求和问题等的任务,以及直接从 Slack 应用程序中与之交互的任务。

27、CI Reporter

即使已经有了最好的 QA,仍可能会发现代码中的错误。这就是 CI Reporter 能派上用场的地方。该工具会收集构建失败的错误报告,然后再将其添加到相关的拉取请求中。

28、PR Label Enforce

想要更精细化地控制拉取请求的合并,可以使用 PR Label Enforce。在合并拉取请求之前,该工具会强制执行某些标签。可以将“ready”或“ checked”之类的标签设置为参数,然后使用其他工具来自动分配这些标签。

image-20240801152109321

29、Git-Secret

想要在 Git 中存储私有数据,可以使用 Git-Secret。当你需要存储敏感的配置文件或密钥时,这非常方便。安全性在 GitOps 中非常重要,因此 Git-Secret 作为一种确保安全性的方法非常宝贵。说到安全性,你还可以使用……。

image-20240801152056694

30、Kamus

Kamus 能自动将零信任加密和解密合并到你的 GitOps 工作流中。与 Git-Secret 结合使用,你可以在不减慢 CI/CD 周期的情况下增强整个管道的安全性。

image-20240801152046671

31、Sealed Secrets

如果你需要采取进一步措施,还可以使用 Sealed Secrets 通过单向加密过程来对密钥进行加密。Sealed Secrets 为 GitOps 管道提供了最大的安全性。

image-20240801152035824

32、Pull Panda

虽然 GitOps 是一种非常敏捷的方法,但是保持生产效率仍然是必须要做的事情。Pull Panda 可以帮忙你实现这一目标,它可以使协作工作变得更轻松、更高效。它向 Slack 发送拉取提醒和分析,甚至可以自动执行拉取请求的分配。

image-20240801152021945

33、Sleeek

Sleek 也是一个管理生产效率和简化流程的机器人,但是它对这个问题的处理方式略有不同。Sleek 基本上是一个机器人,是一个虚拟助手,可以帮助项目经理和开发团队通过一系列问题来保持同步。

老实说,这样的例子不胜枚举;有很多很棒的工具可以帮助我们集成 GitOps 并显著地简化部署管道。作为一种方法,GitOps 确实为开发人员提供了很大的灵活性,并使他们在管理 Kubernetes 集群和云资源配置时能够更加精细。在使用 Kubernetes 时,这确实可以满足云原生的需求,可以实现持续部署。