Please enable Javascript to view the contents

Argo 核心组件介绍

 ·  ☕ 5 分钟

1. argo 介绍

Argo 是一个开源项目,它在 Kubernetes 上提供了一系列工具,用于构建和运行应用程序。Argo 的核心组件主要包括以下几个:

  • Argo CD

Argo CD 是一个基于 GitOps 的持续交付工具,它允许用户声明式地管理 Kubernetes 集群中的应用部署。Argo CD 通过与 Git 仓库同步,确保集群状态与 Git 仓库中定义的状态保持一致。

  • Argo Workflows

这是一个基于容器的任务编排工具,它允许用户定义、运行和监控复杂的工作流。Argo Workflows 支持多种类型的工作流,包括顺序、并行、条件和循环等。

  • Argo Events

这是一个事件驱动工具,它提供了一种机制来处理来自外部系统的事件,并触发 Kubernetes 集群内的操作。Argo Events 包括事件源(EventSources)、事件总线(EventBus)、传感器(Sensors)和触发器(Triggers)等组件。

  • Argo Rollouts

Argo Rollouts 是一个应用渐进式发布工具,它支持金丝雀发布、蓝绿发布等策略,帮助用户安全地更新和回滚 Kubernetes 集群中的应用。

2. argo-cd

2.1 安装

1
kubectl create namespace argocd
1
kubectl apply -n argocd -f https://raw.githubusercontent.com/shaowenchen/hubimage/main/argoproj/v2.10.1-argo-cd.yaml

2.2 相关 CRD 列表

1
2
3
4
5
6
kubectl get crd |grep argo

applications.argoproj.io               2024-02-23T01:49:08Z
applicationsets.argoproj.io            2024-02-23T01:49:08Z
appprojects.argoproj.io                2024-02-23T01:49:08Z
...
  • applications.argoproj.io

这个 CRD 定义了 Argo CD 中的 Application 资源。Application 是 Argo CD 的核心概念之一,它代表了在 Kubernetes 集群中部署的一组资源(如 Pods、Services 等)的期望状态。Application 资源通常与 Git 仓库中的配置文件关联,允许用户通过 GitOps 的方式管理应用的部署和更新。

  • applicationsets.argoproj.io

ApplicationSet 是 Argo CD 的一个扩展,它提供了自动化和更灵活的管理能力,特别是在处理大量集群和单体仓库(monorepo)时。ApplicationSet 允许用户使用单个 Kubernetes 清单(manifest)来针对多个 Kubernetes 集群部署 Argo CD 应用。它还支持在多租户 Kubernetes 集群中,让单个集群租户使用 Argo CD 部署应用,而无需集群管理员介入。ApplicationSet 通过使用不同的生成器(如列表生成器、集群生成器、Git 生成器等)来生成参数,这些参数随后被用于模板渲染,从而创建或更新 Argo CD 应用。

  • appprojects.argoproj.io

AppProject 资源在 Argo CD 中用于逻辑上组织 Application 资源。它定义了一组应用可以部署到的 Git 仓库、目标集群和命名空间,以及这些应用的访问控制策略。AppProject 允许用户定义源仓库(sourceRepos)、目标集群(destinations)和角色(roles),这些角色定义了用户或服务账户对项目内资源的访问权限。这使得管理员可以更精细地控制谁可以部署哪些应用到哪些集群。

3. argo-workflows

3.1 安装

1
kubectl create namespace argo
1
kubectl apply -n argo -f https://raw.githubusercontent.com/shaowenchen/hubimage/main/argoproj/v3.5.4-argo-workflows.yaml

3.2 相关 CRD

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
kubectl get crd |grep argo

clusterworkflowtemplates.argoproj.io   2024-02-23T01:25:07Z
cronworkflows.argoproj.io              2024-02-23T01:25:07Z
workflowartifactgctasks.argoproj.io    2024-02-23T01:25:07Z
workfloweventbindings.argoproj.io      2024-02-23T01:25:07Z
workflows.argoproj.io                  2024-02-23T01:25:07Z
workflowtaskresults.argoproj.io        2024-02-23T01:25:07Z
workflowtasksets.argoproj.io           2024-02-23T01:25:07Z
workflowtemplates.argoproj.io          2024-02-23T01:25:07Z
...
  • clusterworkflowtemplates.argoproj.io

ClusterWorkflowTemplate 是一种资源,它允许用户定义工作流模板,这些模板可以在集群范围内共享和重用。它类似于 WorkflowTemplate,但具有更高的权限级别,可以在任何命名空间中使用。

  • cronworkflows.argoproj.io

CronWorkflow 资源用于定义按计划执行的工作流。它类似于 Kubernetes 中的 CronJob,允许用户设置定时任务,以便在指定的时间间隔内自动启动工作流。

  • workflowartifactgctasks.argoproj.io

WorkflowArtifactGCTask 是一种用于清理工作流执行后遗留的资源的任务。这有助于维护集群的整洁,避免资源泄露。

  • workfloweventbindings.argoproj.io

WorkflowEventBinding 资源用于定义工作流事件的绑定,它允许用户根据 Kubernetes 事件(如 Pod 完成、ConfigMap 更新等)触发工作流的执行。

  • workflows.argoproj.io

Workflow 是 Argo Workflows 中的核心资源类型,它定义了一个由多个步骤(任务)组成的工作流。每个步骤可以是一个容器、一个脚本或者其他类型的操作,它们按顺序或并行执行。

  • workflowtaskresults.argoproj.io

WorkflowTaskResult 资源用于存储工作流任务的执行结果。这有助于在工作流中传递数据,或者在任务失败时进行调试。

  • workflowtasksets.argoproj.io

WorkflowTasksSet 是一种资源,它允许用户定义一组工作流任务,这些任务可以作为模板在多个工作流中重用。

  • workflowtemplates.argoproj.io

WorkflowTemplate 是一种资源,它定义了一个工作流模板,可以在特定命名空间内共享和重用。它类似于 ClusterWorkflowTemplate,但作用范围限制在单个命名空间内。

4. argo-events

4.1 安装

1
kubectl create namespace argo-events
1
kubectl apply -n argo-events -f https://raw.githubusercontent.com/shaowenchen/hubimage/main/argoproj/v1.9.1-argo-events.yaml

可选安装 validating webhook

1
kubectl apply -n argo-events -f https://raw.githubusercontent.com/shaowenchen/hubimage/main/argoproj/v1.9.1-argo-events-validating-webhook.yaml

4.2 相关 CRD

1
2
3
4
5
6
kubectl get crd |grep argo

eventbus.argoproj.io                   2024-02-23T01:35:46Z
eventsources.argoproj.io               2024-02-23T01:35:46Z
sensors.argoproj.io                    2024-02-23T01:35:46Z
...
  • eventbus.argoproj.io

EventBus 是 Argo Events 中的一个核心资源,它负责在事件源(EventSources)和传感器(Sensors)之间传输事件。EventBus 可以基于 NATS Streaming 或 Kafka 构建,它提供了一种机制来确保事件在集群内可靠地传递。EventBus 资源定义了事件传输的配置,包括使用的后端消息系统、认证策略、持久化设置等。

  • eventsources.argoproj.io

EventSource 资源定义了如何从外部服务(如 Kafka、GitHub、Slack 等)消费事件。它指定了事件源的类型、连接信息、过滤条件等。当观察到匹配过滤条件的事件时,EventSource 会将这些事件写入到 EventBus。EventSource 可以是原生的(如基于 NATS Streaming 的 EventSource)或者是异构的(如连接到现有的 Kafka 集群)。

  • sensors.argoproj.io

Sensor 资源定义了在 EventBus 上监听特定事件的逻辑,并在匹配事件时触发相应的响应。Sensor 运行在由 sensor-controller 管理的 Pod 中,它可以定义触发器(Triggers),这些触发器可以是 HTTP 请求、Kubernetes 对象操作、Slack 消息等。当 Sensor 观察到匹配的事件时,它会执行定义的操作,例如创建或更新 Kubernetes 资源。

5. Argo rollouts

5.1 安装

1
kubectl create namespace argo-rollouts
1
kubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/shaowenchen/hubimage/main/argoproj/v1.6.6-argo-rollouts.yaml

可选安装 dashboard

1
kubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/shaowenchen/hubimage/main/argoproj/v1.6.6-argo-rollouts-dashboard.yaml

5.2 相关 CRD

1
2
3
4
5
6
7
8
kubectl get crd |grep argo

analysisruns.argoproj.io               2024-02-23T02:24:15Z
analysistemplates.argoproj.io          2024-02-23T02:24:15Z
clusteranalysistemplates.argoproj.io   2024-02-23T02:24:15Z
experiments.argoproj.io                2024-02-23T02:24:15Z
rollouts.argoproj.io                   2024-02-23T02:24:15Z
...
  • analysisruns.argoproj.io

AnalysisRun 资源用于定义和管理分析任务的执行。这些分析任务可以在部署过程中运行,以评估新版本的表现,例如通过比较新旧版本的指标。AnalysisRun 可以与 Experiment 资源关联,以在实验过程中执行分析。

  • analysistemplates.argoproj.io

AnalysisTemplate 是一个模板资源,它定义了分析任务的配置,但不立即执行。AnalysisTemplate 可以被 AnalysisRun 引用,以便在需要时创建和执行分析任务。

  • clusteranalysistemplates.argoproj.io

ClusterAnalysisTemplate 类似于 AnalysisTemplate,但它具有集群范围的作用域。这意味着它可以在多个命名空间中被引用和使用,而不仅仅是在定义它的命名空间中。

  • experiments.argoproj.io

Experiment 资源用于定义和管理实验,这些实验通常用于比较新旧版本的应用性能。Experiment 可以包含多个 AnalysisRun,以便在实验过程中执行多个分析任务。实验的结果可以用来决定是否将新版本推广到生产环境。

  • rollouts.argoproj.io

Rollout 是 Argo Rollouts 中的核心资源类型,它用于定义和管理应用的渐进式部署。Rollout 允许用户逐步将新版本的应用推送到生产环境,同时监控部署过程中的指标,以确保新版本的稳定性。Rollout 支持多种策略,如金丝雀发布、蓝绿部署等。


微信公众号
作者
微信公众号