流水线(Pipeline)是把一个重复的过程分解为若干个子过程,使每个子过程与其他子过程并行进行的技术 。本文主要介绍了诞生于云原生时代的流水线框架 Argo 。
什么是流水线?
在计算机中,流水线是把一个重复的过程分解为若干个子过程,使每个子过程与其他子过程并行进行的技术,也叫 Pipeline 。由于这种 s工作方式与工厂中的生产流水线十分相似,因此也被称为流水线技术 。从本质上讲,流水线技术是一种时间并行技术 。以“构建镜像”过程为例:
文章插图
在每一次构建镜像中,我们都需要拉下代码仓库中的代码,进行代码编译,构建镜像,最后推往镜像仓库 。在每一次代码更改过后,这一过程都是不变的 。使用流水线工具可以极大的提升这一过程的效率,只需要进行简单的配置便可以轻松的完成重复性的工作 。这样的过程也被称之为 CI 。
上图流程中使用的是 Jenkins 。Jenkins 作为老牌流水线框架被大家所熟知 。在云原生时代,Jenkins 推出了 Jenkins X 作为基于 Kubernetes 的新一代流水线,另外云原生时代还诞生了两大流水线框架—— Argo 和 Tekton 。本文就详细介绍了 Argo 的相关内容 。
Argo
Argo Workflows 是一个开源的容器原生的工作流引擎,可以在 Kubernetes 上编排并行作业 。Argo Workflows 实现为 Kubernetes CRD 。
Quick Start
【Kubernetes 原生 CI/CD 构建框架 Argo】Argo 基于 Kubernetes,可以直接使用 kubectl 安装,安装的组件主要包括了一些 CRD 以及对应的 controller 和一个 server 。
文章插图
注意,上述安装只会执行同 namespace 内的 Workflow,cluster install 详见文档 。文档地址:三级定义
https://github.com/argoproj/argo/blob/master/docs/installation.md
要了解 Argo 定义的 CRD,先从其中的三级定义入手 。概念上的从大到小分别为 WorkflowTemplate、Workflow、template,这些资源的命名有些相似,要注意分辨 。
Template
从最简单的 template 说起,一个 template 有多种类型,分别为 container、script、dag、steps、resource 以及 suspend 。对于 template,我们可以简单地将其理解为一个 Pod ——container/script/resource 类型的 template 都会去实际控制一个 Pod,而 dag/steps 类型的 template 则是由多个基础类型的 template (container/script/resource)组成的 。
- container:最常见的模板类型,与 Kubernetes container spec 保持一致 。
- script:该类型基于 Container,支持用户在 template 定义一段脚本,另有一个 Source 字段来表示脚本的运行环境 。
- resource:该类型支持我们在 template 中对 kubernetes 的资源进行操作,有一个 action 字段可以指定操作类型,如 create, Apply, delete 等,并且支持设定相关的成功与失败条件用于判断该 template 的成功与失败 。
- suspend:Suspend template 将在一段时间内或在手动恢复执行之前暂停执行 。可以从 CLI (使用 argo resume)、API 或 UI 恢复执行 。
- steps:Steps Template 允许用户以一系列步骤定义任务 。在 Steps 中,[--] 代表顺序执行,[-] 代表并行执行 。
- dag:DAG template 允许用户将任务定义为带依赖的有向无环图 。在 DAG 中,通过 dependencies设置在特定任务开始之前必须完成的其他任务 。没有任何依赖项的任务将立即运行 。有关 DAG 的详细逻辑可见源码 https://github.com/argoproj/argo/blob/master/workflow/controller/dag.go#L204 。
在一个 Workflow 中,其 spec 中有一个名为 templates 这个字段,在其中至少需要一个 template 作为其组成的任务 。
一个最简单的 hello world 例子如下:
文章插图
在这个例子中,该 Workflow 的 templates 字段中指定了一个类型为 container 的 template,使用了 whalesay 镜像 。
下面是一个稍微复杂的 workflow:
文章插图
WorkflowTemplate
WorkflowTemplate 相当于 Workflow 的模板库,和 Workflow 一样,也由 template 组成 。用户在创建完 WorkflowTemplate 后,可以通过直接提交它们来执行 Workflow 。
推荐阅读
- 使用.NET5、Blazor和Electron.NET构建跨平台桌面应用
- 放弃微服务,构建单体应用
- 如何通过抓包来查看Kubernetes API流量?
- 原生运行安卓App,真的比模拟器更加优越?
- Nginx 推出 Kubernetes 微服务参考架构
- 用Python构建API的八大流行框架
- Python构建代理池,突破IP的封锁爬取海量数据
- NVIDIA|NVIDIA更新GeForce Now:为Apple Silicon处理器提供原生支持
- 原生芦荟图鉴,芦荟价格表
- Prometheus + Granafa 构建MySQL监控平台