大家好!本指南专为希望利用 Argo Workflows 和 Argo Rollouts 构建高级云原生环境的用户准备。
Argo 生态系统中存在各种各样的 Template(模板)。每个模板都扮演着独特的角色,例如定义工作流的一个步骤,或者验证部署的安全性。今天,我们将深入剖析其中在实际工作中非常重要的四种模板。🚀
如果您只将 Argo 视为一个“容器执行工具”,那么今天介绍的模板将拓宽您的视野。让我们逐一了解自动化分析、数据处理以及复杂的容器执行吧!💡

1. 📊 ClusterAnalysisTemplate: 集群级别的智能验证器
ClusterAnalysisTemplate 是一个主要用于 Argo Rollouts 的强大模板。顾名思义,它定义了可在“整个集群”级别重用的分析逻辑。
🧐 主要特点
- 可重用性: 不依赖于特定命名空间,可在整个集群的多个 Rollout 资源中共享。
- 基于指标: 查询 Prometheus、Datadog、New Relic 等外部监控系统的数据,以判断部署的成功与否。
- 自动回滚: 如果分析结果被判定为失败(Error/Failure),Argo Rollouts 将自动停止部署并回滚到之前的版本。
💻 YAML 示例及说明
YAML
apiVersion: argoproj.io/v1alpha1
kind: ClusterAnalysisTemplate
metadata:
name: global-error-rate-check # 可在集群中任何地方调用的名称
spec:
metrics:
- name: error-rate
interval: 1m # 每1分钟检查一次指标
successCondition: result[0] < 0.01 # 错误率低于1%才算成功
failureLimit: 3 # 失败3次以上则视为最终失败
provider:
prometheus:
address: http://prometheus.monitoring.svc.cluster.local
query: |
sum(rate(http_requests_total{status=~"5.*"}[1m]))
/
sum(rate(http_requests_total[1m]))
提示:与 AnalysisTemplate 不同,带有 Cluster 前缀的此模板在以管理员权限创建通用监控规则时非常有用。
2. 🔢 Data Template: 数据驱动决策的核心
在 Argo Workflows 中,Data Template 用于从外部源(S3、HTTP 工件等)读取数据,并在工作流中将其用作变量或决定控制流。
🧐 主要特点- 动态生成: 通过读取数据并与
withParam结合,可以根据数据量动态地进行循环。 - 过滤: 擅长从读取的 JSON 数据中提取特定值(例如使用 JSONPath)。
💻 YAML 示例及说明
YAML
- name: data-fetch-example
data:
source:
artifact:
s3:
endpoint: s3.amazonaws.com
bucket: my-bucket
key: user_list.json # 包含待分析数据的文件
transformation:
# 从JSON数据中提取'active'状态的用户ID列表
jsonPath: "{$.users[?(@.status == 'active')].id}"
3. 📜 Script Template: Python、Bash,随心所欲
Script Template 是最流行且功能强大的模板之一。它与普通的 Container 模板相似,但不同之处在于您可以直接在 YAML 内部编写(内联)源代码。
🧐 主要特点
- 简便的逻辑实现: 无需每次都构建单独的 Docker 镜像,只需加载标准镜像并修改内部脚本即可执行逻辑。
- 结果捕获: 将脚本的标准输出 (Stdout) 保存为变量并传递给下一步非常容易。
💻 YAML 示例及说明
YAML
- name: generate-report-script
script:
image: python:3.9-slim # 执行环境镜像
command: [python] # 要使用的解释器
source: | # 要执行的源代码 (内联)
import json
import sys
# 执行复杂的计算逻辑
data = {"status": "success", "score": 95}
# 如果结果输出到Stdout,Argo会将其捕获为返回值
print(json.dumps(data))
注意:如果逻辑过长,YAML 的可读性会降低,因此建议将复杂的代码包含在镜像中。⚠️
4. 📦 Container Set Template (Graph): 复合容器的编排
Container Set Template 允许您在一个 Pod 中运行多个容器,并定义它们之间的依赖关系。
🧐 主要特点
- 超越 Sidecar: 不仅仅是简单地一起运行,您可以创建“Pod 内部工作流”,例如容器 A 完成后容器 B 才运行。
- 资源效率: 在单个 Pod 节点上处理多个任务,可以降低网络延迟并提高资源管理效率。
💻 YAML 示例及说明
YAML
- name: complex-job-set
containerSet:
containers:
- name: setup
image: alpine
command: [sh, -c, "echo 'Initializing...' > /shared/init.txt"]
volumeMounts:
- name: workdir
mountPath: /shared
- name: main-process
image: my-app:latest
dependencies: [setup] # 仅在setup容器成功后执行
volumeMounts:
- name: workdir
mountPath: /shared
- name: reporter
image: curlimages/curl
dependencies: [main-process] # 在main-process之后执行
command: [curl, -X, POST, "http://notify.me"]
💡 总结与选择指南
| 模板类型 | 主要用途 | 一句话评价 |
| — | — | — |
| ClusterAnalysis | 部署稳定性验证 (Rollouts) | “全公司通用部署合格标准表” |
| Data | 动态数据处理和循环生成 | “根据数据行动的大脑” |
| Script | 简单逻辑和脚本执行 | “无需构建即可立即使用的瑞士军刀” |
| Container Set | Pod 内部多容器控制 | “一个屋檐下多个工人的协作” |
—
🏁 总结
Argo 生态系统非常庞大,但通过充分理解和组合这四种模板的特性,您可以实现真正的 GitOps 和工作流自动化。建议您从 Script Template 开始,然后逐步扩展到数据驱动的 Data Template 或用于集群通用分析的 ClusterAnalysisTemplate!🌟
发表回复