运用 Argo Workflows 协调 CI/CD 流水线

2024-02-26 13:52

本文主要是介绍运用 Argo Workflows 协调 CI/CD 流水线,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Argo Workflows 是一个开源的容器原生工作流引擎,用于协调 CI/CD 在 Kubernetes 中的运作。它以 Kubernetes 自定义资源(CRD)的形式实现,使开发人员能够创建自定义 API 对象,以兼容的方式扩展 Kubernetes 的功能。

 

选择 Argo Workflows 的原因

Argo Workflows 旨在运行于 Kubernetes 之上,而非虚拟机或云服务等其他平台。让我们用一分钟时间来强调一下使用 Kubernetes 作为 Argo Workflows 运行平台的优点和缺点。

 

Argo Workflows 是以 Kubernetes 自定义资源定义(CRD)的形式实现的,它使你能够:

 

  • 为工作流中的每个步骤使用单独的容器来定义 Kubernetes 工作流。
  • 使用有向无环图 (DAG) 建立工作流模型,捕捉多个步骤之间的依赖关系
  • 快速轻松地运行计算密集型数据处理或机器学习任务。
  • 无需配置复杂的应用程序开发解决方案,即可在 Kubernetes 上以本地方式运行 CI/CD 流水线。

 

使用 Argo Workflows 进行 CI/CD

如果您有以下需求,Argo Workflows 将满足您的需求:

 

  • 灵活处理容器崩溃和故障
  • 同时管理大量工作流的自动扩展选项。
  • 全面的企业功能,如基于角色的访问控制(RBAC)和单点登录(SSO)。

 

但若出现以下情况,您则可能需要避免使用 Argo Workflows:

 

  • 随着工作流数量和基础设施需求的增长,YAML 文件维护的复杂性可能会增加,尽管 Argo 提供了管理这方面的技巧和模板功能。
  • 您的团队没有容器和 Kubernetes 方面的经验。
  • 您需要维护完整的企业设置,这涉及到管理大量的配置选项。

 

了解 Argo Workflows 的关键组成部分

Argo Workflows 的核心概念包括定义和存储实时的 Kubernetes CRD 对象,这些对象将指定在适当状态下执行工作流。

 

例如 workflow.spec,它包含一个模板列表和一个作为主要功能或第一个要执行的模板的 entrypoint

 

模板被定义为函数,可以有多种类型,如 containers, scriptresource templates

 

容器模板是最常用的模板。脚本模板允许定义脚本,然后执行脚本。资源模板可处理请求,而暂停模板可在规定时间内暂停工作流程的执行,并可使用 Argo UI 恢复执行。模板本身使用嵌套列表依次或并行运行,可根据不同设置进行自定义。

 

安装

为了开始安装,我们需要在机器上下载 Argo Workflows 二进制文件并保存:

 

$ curl -sLO https://github.com/argoproj/argo-workflows/releases/download/v3.4.5/argo-darwin-amd64.gz

 

接下来,我们需要解压从上述命令下载的文件:

 

$ gunzip argo-darwin-amd64.gz

 

完成所有步骤后,我们需要修改该文件的权限,使其可以作为程序运行。这样就可以直接从命令行执行 argo 命令:

 

$ chmod +x argo-darwin-amd64

 

完成上述操作后,我们需要将该文件从当前目录移至/usr/local/bin 目录:

 

mv ./argo-darwin-amd64 /usr/local/bin/argo

 

这样就可以在终端的任意位置执行 argo 命令。若要验证 Argo Workflows 是否安装成功,请运行以下命令:

 

$ argo version

 

输出结果将显示已安装的版本号,表明一切正常。

 

运行示例应用程序

在本节中,我们将使用 Argo Workflows 部署一个带有简单 Python 应用程序的工作流。我们将首先定义构建步骤,然后创建一个工作流来部署和测试应用程序。我们将在本地 minikube 集群上完成所有这些工作,在本地计算机上运行以下命令即可:

 

$ minikube start

 

我们现在应该可以应用下面的 Kubernetes 清单文件,该文件将创建 Argo Workflows 所需的各种 Kubernetes 资源:

 

$ kubectl apply -n argo -f https://github.com/argoproj/argo-workflows/releases/download/v3.4.5/install.yaml

 

我们已经拥有了开始工作所需的一切,我们的集群现在已经拥有了:

 

  • 创建和运行工作流所需的(CRD) 。
  • 用于安全、受控地访问 Kubernetes 资源的 RBAC
  • 负责执行工作流的 ConfigMap
  • 我们还设置了一个优先级类别 PriorityClass,以确保 Argo Workflow 控制器具有更高的优先级,并拥有在集群中运行所需的资源。

 

需要注意的是,Argo Workflows 将使用 YAML 文件定义 CI/CD 工作流程,并指定以下内容:

 

  • 步骤:您可以添加各种构建步骤,可以是一个,也可以是多个。
  • 依赖项:可以添加运行工作流程所需的任何依赖项。
  • 参数:使您能够自定义工作流程的行为,您可以使用输入参数并将其传入以触发工作流程。为您提供所需的灵活性,并使其可重复使用。

 

既然已经了解了 Argo Workflows 的功能,我们就可以开始以代码的形式创建和管理我们的工作流了。让我们用三个步骤(deployingteasing,and building)创建一个 Python 3 应用程序工作流。首先,在 app 目录下创建名为 python-app.yaml 的文件,并添加工作流定义:

 

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:name: python-app
spec:entrypoint: python-apptemplates:- name: python-appsteps:- - name: buildtemplate: build- - name: testtemplate: test- - name: deploytemplate: deploy- name: buildcontainer:image: python:3.11command: [python]args: ["-c", "print('build')"]- name: testcontainer:image: python:3.11command: [python]args: ["-m", "unittest", "discover", "-s", "/app/tests"]volumeMounts:- name: test-volumemountPath: /app/testsvolumes:- name: test-volumehostPath:path: /path/to/tests- name: deploycontainer:image: python:3.11command: [python]args: ["-c", "print('deploy')"]

 

在这个例子中,Workflow CRD 定义了 CI/CD 流水线,模板中的每个步骤都有特定的目的:

 

  • 构建步骤使用最新更改构建镜像,本演示使用的是 Python 3.11 镜像。
  • 测试步骤挂载包含测试文件的卷,并使用 Python unittest 库运行单元测试。
  • 部署步骤运行 Python 容器并打印部署。通常,这一步需要将测试代码推送到容器注册中心,如 AWS ECR 或 Harbor,然后部署到生产环境。

 

要应用该文件,可以使用 kubectl apply 命令,并在 -f 标志后加上 YAML 文件的路径。下面是一个命令示范:

 

$ kubectl apply -f python-app.yaml

 

这将创建一个名称为 python-app 的 Argo Workflows,以及相应的模板和步骤。

 

现在,让我们执行 argo get 命令来获取有关工作流的信息,包括其状态和日志:

 

$ argo get python-app
Name:                python-app
Namespace:           default
ServiceAccount:      unset (will run with the default ServiceAccount)
Status:              Succeeded
Conditions:          PodRunning          FalseCompleted           True
Created:             Mon Mar 20 16:23:06 -0500 (37 seconds ago)
Started:             Mon Mar 20 16:23:06 -0500 (37 seconds ago)
Finished:            Mon Mar 20 16:23:36 -0500 (7 seconds ago)
Duration:            30 seconds
Progress:            3/3
ResourcesDuration:   10s*(1 cpu),10s*(100Mi memory)STEP           TEMPLATE    PODNAME                      DURATION  MESSAGE✔ python-app  python-app                                           ├───✔ build   build       python-app-build-3831382643  4s          ├───✔ test    test        python-app-test-461837862    4s          └───✔ deploy  deploy      python-app-deploy-988129288  4s

 

Argo Workflows 的优势

Argo Workflows 是一款功能强大的工具,用于在容器化部署环境中管理和自动化复杂的工作流程。它具有多种优势,包括:

 

  • 轻松进行版本控制,并以代码形式修改工作流程。
  • 与 Argo Events 集成,可根据事件触发工作流程。
  • 自动重试和错误处理,实现可靠、稳健的工作流执行。
  • 与 Kubernetes 和其他容器协调平台无缝集成。
  • 支持并行和顺序工作流,从而实现更快、更高效的执行。
  • 广泛的监控和日志功能,包括与 Prometheus 和 Grafana 的集成。

 

结论

总之,如果您的 DevOps 团队希望简化复杂的容器化工作流程的管理和自动化,那么 Argo Workflows 是一款必不可少的工具。不过,在考虑是否使用它时,您应该先评估好团队的云端和 Kubernetes 经验、规模及增长目标。如果您正在 Kubernetes 上构建平台,Argo Workflows 也可以成为平台工程师构建抽象的好工具,从而缓解开发团队在维护 YAML 文件上的痛苦。

 

作为一款基于平台工程理念构建的应用部署管理平台,Walrus 已在最新版本中集成 Argo Workflows 作为工作流引擎,借助 Argo Workflows 自动化特性,用户可以在 Walrus 上实现一站式应用编排发布。另外,Walrus 中单一配置、多态运行的应用模型,可以让研发人员无需关注底层基础设施具体实现方式,实现了研发与运维关注点分离和自动化协作,进而屏蔽各类环境中基础设施的复杂度,降低研发人员的认知负担,进一步落地平台工程理念。

 

更多 Walrus 项目信息请参考:https://github.com/seal-io/walrus

这篇关于运用 Argo Workflows 协调 CI/CD 流水线的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/749088

相关文章

poj 2431 poj 3253 优先队列的运用

poj 2431: 题意: 一条路起点为0, 终点为l。 卡车初始时在0点,并且有p升油,假设油箱无限大。 给n个加油站,每个加油站距离终点 l 距离为 x[i],可以加的油量为fuel[i]。 问最少加几次油可以到达终点,若不能到达,输出-1。 解析: 《挑战程序设计竞赛》: “在卡车开往终点的途中,只有在加油站才可以加油。但是,如果认为“在到达加油站i时,就获得了一

如何使用Ansible实现CI/CD流水线的自动化

如何使用Ansible实现CI/CD流水线的自动化 持续集成(CI)和持续交付(CD)是现代软件开发过程中的核心实践,它们帮助团队更快地交付高质量的软件。Ansible,作为一个强大的自动化工具,可以在CI/CD流水线中发挥关键作用。本文将详细介绍如何使用Ansible实现CI/CD流水线的自动化,包括设计流水线的结构、配置管理、自动化测试、部署、以及集成Ansible与CI/CD工具(如Jen

Go并发模型:流水线模型

Go作为一个实用主义的编程语言,非常注重性能,在语言特性上天然支持并发,Go并发模型有多种模式,通过流水线模型系列文章,你会更好的使用Go的并发特性,提高的程序性能。 这篇文章主要介绍流水线模型的流水线概念,后面文章介绍流水线模型的FAN-IN和FAN-OUT,最后介绍下如何合理的关闭流水线的协程。 Golang的并发核心思路 Golang并发核心思路是关注数据流动。数据流动的过程交给cha

ElasticSearch 6.1.1运用代码添加索引及其添加,修改,删除文档

1、新建一个MAVEN项目:ElasticSearchTest 2、修改pom.xml文件内容: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.or

巧妙的运用Floyd算法

题目大概意思:输入n,m,n代表n个点,接着输入n个点之间的距离(n*n的矩阵),接下来m次询问,输入a,b,c如果a,b之间的最短路径中存在c点则输出Yes,否则输出No 比赛的时候没有做出来,赛后帆哥一点播就知道了。。。。我写的时候直接用floy算法求距离并记录路径。。然后TLE到死。。。我就奇怪了数据n,m都小于100,怎么会TLE啊。。。坑爹啊。。。我一直怀疑是不是用别的算法。。。。。帆

【kubernetes】配置管理中心Configmap运用

一,介绍 Configmap(简写 cm)是k8s中的资源对象,用于保存非机密性的配置的,数据可以用key/value键值对的形式保存,也可通过文件的形式保存。 【局限性】:在ConfigMap不是用来保存大量数据的,其数据量不可超过1 MiB。 kubectl get cm 二,功能 Configmap资源对象,可以有一个或者多个Configmap,通过 volume 形式映射到容器

运用WPS快速整理中英混排的网页文字的方法

朋友从网上下载了一篇技术文档,发现文档中每一行的行末都有一个段落符号,而真正要分段的段首则有4个半角空格,还有许多空段。   想重新编排一下,由于文档比较长,手工操作肯定不行,我向他推荐用WPS文字的“智能格式整理”功能。在该文档处于打开状态时,用鼠标点开“工具”菜单下的“文字工具→智能格式整理”,几秒钟后,所有的段首空格全部消失,段与段之间的空段也全部消除,但每一行行末的段落标记却依然

智能匹配新高度:相亲交友系统如何运用AI技术提升用户体验

在数字化时代,相亲交友系统正逐渐融入人工智能(AI)技术,以提升用户体验和匹配效率。AI的引入不仅改变了传统的交友方式,还为用户带来了更加个性化和精准的交友体验。以下是一篇关于如何运用AI技术提升相亲交友系统用户体验的文章。 智能匹配新高度:相亲交友系统如何运用AI技术提升用户体验 随着人工智能技术的飞速发展,相亲交友系统正迎来一场革命。AI的引入不仅提高了匹配的精准度,还极大地丰富了

编程技巧--位运算的巧妙运用(1)

作者:yunyu5120                这是我的这一系列文章的第一篇,主要讲述我学习过程中积累的一些编程技巧,由于我也是一个初学者,高手莫笑。这一篇主要讲解位运算的基础知识鱼与其简单应用,我主要以C/C++语言讲述,其他语言可以类推。如果你已经对位运算基础和应用十分熟悉,那么本文并不适合你。              我相信还是有一部分人对位运算还不是很了解,我希望你在

【Java】实体类Javabean的运用案例

文章目录 前言一、定义一个操作类专门处理数据二、代码总结 前言 实体类Javabean的运用案例,现在需要把数据与业务串联起来。 一、定义一个操作类专门处理数据 这里定义了一个叫DogOperator的类,专门用来处理Dog类里面的数据。 解析: 要把Dog类里面的数据拿到DogOperator类当做运用,那么首先要有个关联关系,那么用什么去关联呢?我们要获取一