GitOps 和 Argo 简介

导航至

在理想的世界中,开发者应该能够极快地将新产品和功能从开发环境发布到生产环境,同时不必担心破坏生产环境。要实现开发速度与软件可靠性的结合,需要合适的工具链和自动化。

有许多不同的理念和工具试图解决这些问题,但在本文中,您将专门了解 GitOps 和 Argo,以及它们如何用于改进您发布软件的方式。大大小小的公司都面临着许多相同的问题,只需看看一些将 Argo 纳入其开发工作流程的公司,Argo 的价值就显而易见了。

  • Adobe
  • 阿里巴巴
  • 字节跳动 (TikTok)
  • Datadog
  • GitHub
  • NVIDIA
  • 红帽
  • IBM

customer-logos

来源

什么是 GitOps?

让我们从 GitOps 在概念层面上究竟是什么开始,以便您了解 Argo 创建的原因以及它试图解决的特定类型的问题。

GitOps 本质上是一个框架或一组最佳实践,用于管理基于云的基础设施。GitOps 从 DevOps 和现代应用程序开发方法中吸取了许多经验教训,并将它们应用于基础设施管理。这包括持续部署和基础设施即代码等概念/工具,以弥合开发和运维团队之间的差距。

正如其名称所示,Git 在 GitOps 中起着关键作用。Git 被用作基础设施和应用程序应基于声明式配置的样子的单一事实来源。这里的关键转变是思维模式,即配置应该是一组关于您的基础设施应该是什么样子的事实,而不是一组逐步执行以创建环境的指令。

然后使用自动化流程来获取此配置,并确保生产或开发环境与存储库中描述的状态匹配。使用 Git 还可以为您提供应用程序的版本历史记录,并使在新提交进入时易于部署或在需要时回滚到以前的提交。

正确实施 GitOps 的好处如下

  • 更快、更频繁的部署 - 自动化加速了推送新功能的整个过程,使开发人员的生活更轻松,压力更小。

  • 更快的错误解决 - 借助像 Argo 这样的工具来处理部署,如果根据定义的指标检测到任何问题,则部署可以自动回滚到以前的工作部署。使用 Argo Rollouts 进行渐进式部署可以更轻松地在问题到达生产环境之前发现问题。

  • 内置审计 - 使用 Git 使您可以获得随时间跟踪软件完整历史记录的好处。

什么是 Argo?

Argo 项目是一组工具,可以一起或独立使用,以使 Kubernetes 应用程序更容易实施和利用 GitOps 最佳实践。该项目最初由 Applatix 创建,旨在帮助管理其云原生软件架构。Applatix 被 Intuit 收购,并于 2018 年 1 月,Argo 项目的第一个组件作为 Argo Workflows 开源。Argo CD 和 Argo Events 随后于 2018 年推出,Argo Rollouts 于 2019 年推出。2020 年,Argo 被 CNCF 接受为孵化项目。

Argo 目前是 CNCF 第 6 个最活跃的项目,并且在构成 Argo 项目的工具中获得了超过 25,000 个 GitHub 星星。

CNCF repo activity

CNCF 仓库活动 - 来源

Argo 功能

现在让我们深入了解构成 Argo 项目的每个不同工具,并了解它们提供的一些功能。

Argo 工作流

Argo Workflows 是一个工作流引擎,旨在在 Kubernetes 上本地运行。工作流实现为 Kubernetes 自定义资源定义,并允许您创建多步骤工作流,其中每个步骤都作为独立的容器运行。这些工作流可以是任务序列,也可以是有向无环图 (DAG),该图依赖于工作流中的其他任务。

Argo Workflows 的主要优势在于它可以运行在任何 Kubernetes 集群上,并且与供应商无关。由于使用容器而不是虚拟机或专用服务器,因此它轻巧高效,并且由于 Kubernetes,可以根据工作负载轻松地向上或向下扩展任务。

Argo Workflows 的一些常见用例是标准 CI/CD 管道,其中工作流可用于将不同的工具粘合在一起。另一个新兴的用例是作为数据处理管道或 MLOps 工具,其中 Kubernetes 的可扩展性是一个巨大的优势,并且所有复杂性都由 Argo 抽象化。根据任务的特定硬件要求,Argo 可以配置为启动 CPU 或内存优化的 pod,从而在硬件成本方面更有效。

Argo Workflows 提供的一些其他有用功能

  • 用于可视化工作流的全功能 UI
  • 本地支持常见的工件,如 HTTP、Git 和流行的云服务
  • 用于审计的工作流存档
  • 模板
  • REST API

Argo CD

Argo CD 的推出是为了为持续部署管道提供专用工具,这是社区成员使用 Argo Workflows 的常见方式。作为一种专门为持续部署而设计的工具,而不是像 Argo Workflows 这样的通用工作流引擎,Argo CD 提供了更多开箱即用的功能来构建 CD 管道。

Argo CD 部署为 Kubernetes 控制器,该控制器不断观察 Kubernetes 集群的状态,并将其与 Git 仓库配置中定义的所需状态进行比较。如果 Argo CD 检测到应用程序与所需的配置不同步,则可以将 Argo CD 设置为自动进行必要的更改以修复 Kubernetes 集群或创建警报以通知开发人员进行手动操作。

Argo CD 的其他功能

  • 支持基于推送和拉取的部署
  • 支持几种不同的 Kubernetes 清单格式——helm charts、jsonnet、YAML、自定义应用程序
  • 用于管理的 UI 和 CLI
  • 管理多个 Kubernetes 集群的能力以及对基于角色的访问控制的支持
  • 资源钩子,可以在 Argo CD 同步操作的不同阶段触发自定义脚本或与外部服务交互——PreSync、Sync、PostSync,以及同步失败时

Argo Rollouts

Argo Rollouts 是一种将新部署安全地移动到生产环境的工具。Rollouts 的工作原理是使开发人员能够实现诸如蓝/绿和金丝雀部署之类的功能,这些部署将一小部分流量路由到应用程序的最新版本。如果监控指标良好且未显示任何错误迹象,Argo Rollouts 将逐渐增加流量,直到应用程序的新版本完全部署到生产环境。

Argo Rollouts

Argo Rollouts 与入口和服务网格工具集成,以管理 Kubernetes 集群中的流量流。Rollouts 还与 Prometheus、Datadog、New Relic 和 InfluxDB 等监控工具集成。您可以定义要监视的指标,如果 Argo Rollouts 看到响应时间或错误率等指标的已定义阈值已被超过,它将回滚部署。

这是一个配置示例,说明如何监控 Istio 报告并与 InfluxDB 一起存储的请求错误百分比;如果错误率超过 successCondition 字段中定义的值,则部署将失败

apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata:
  name: error-rate
spec:
  args:
  - name: application-name
  metrics:
  - name: error-rate
    successCondition: result[0] <= 0.01
    provider:
      influxdb:
        profile: my-influxdb-secret  # optional, defaults to 'influxdb'
        query: |
          from(bucket: "app_istio")
            |> range(start: -15m)
            |> filter(fn: (r) => r["destination_workload"] == "{{ args.application-name }}")
            |> filter(fn: (r) => r["_measurement"] == "istio:istio_requests_errors_percentage:rate1m:5xx")

Argo Events

Argo Events 是一个框架,用于处理事件并在 Kubernetes 中对这些事件采取自动化操作。Argo Events 的工作原理是从事件源接收事件,并且开箱即用地支持 20 多个事件源,其中一些最受欢迎的是

  • GitHub
  • Kafka
  • NATS
  • MQTT
  • Webhooks

也可以配置自定义事件源。一旦 Argo Events 收到事件,它就会将其转换为符合 CloudEvent 的格式。这些事件由传感器处理,传感器可以具有自定义逻辑来确定是否为事件执行定义的触发器。触发器是传感器传递事件时将执行的实际资源或工作负载。

一些常见的触发器

  • 无服务器函数 (AWS Lambda)
  • Argo Rollouts
  • Argo Workflows
  • Kafka 消息
  • Slack 通知
  • 自定义 HTTP 请求

Argo Events 在设计上非常灵活,其目标是提供一个平台,使您可以使用首选工具轻松实现流程自动化。

总结

希望这能帮助您对 Argo 项目的各个组件有一个扎实的了解。虽然它以用于 CI/CD 和 GitOps 用例而闻名,但 Workflows 和 Events 等工具也可以用于各种其他任务。最大的好处之一是,Argo 入门相当容易,因为大多数开发人员已经熟悉用于配置和自定义 Argo 的工具。