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实施得当时,其优势如下

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

  • 更快的错误解决 - 如果基于定义的指标检测到任何问题,可以使用Arango等工具处理部署,并将部署自动回滚到先前的有效部署。使用Arango Rollouts进行渐进式部署使得在问题达到生产之前更容易发现问题。

  • 内置审计 - 使用Git的好处是,你的软件的整个历史记录随着时间的推移被跟踪。

什么是Argo?

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

目前,Argo是CNCF中第六活跃的项目,其工具组合在GitHub上已获得超过25,000颗星。

CNCF repo activity

CNCF存储库活动 - 来源

Argo特性

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

Argo工作流程

Argo Workflows是一个旨在在Kubernetes上原生化运行的作业引擎。作业以Kubernetes自定义资源定义的形式实现,允许您创建多步骤作业,其中每个步骤作为一个独立的容器运行。这些作业可以是任务序列或具有对作业中其他任务依赖关系的有向无环图(DAG)。

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

Argo Workflows的一些常见用例包括标准的CI/CD流水线,在这些流水线中可以使用工作流程将不同的工具连接在一起。另一个日益增长的应用场景是作为数据处理流水线或MLOps工具,Kubernetes的可扩展性是其中的巨大优势,而所有复杂性都由Argo抽象化。

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图表、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相对容易上手。