Argo Workflows 是一个开源的容器原生工作流引擎,用于协调 CI/CD 在 Kubernetes 中的运作。它以 Kubernetes 自定义资源(CRD)的形式实现,使开发人员能够创建自定义 API 对象,以兼容的方式扩展 Kubernetes 的功能。
Argo Workflows 旨在 运行于 Kubernetes 之上,而非虚拟机或云服务等其他平台。让我们用一分钟时间来强调一下使用 Kubernetes 作为 Argo Workflows 运行平台的优点和缺点。
Argo Workflows 是以 Kubernetes 自定义资源定义(CRD)的形式实现的,它使你能够:
如果您有以下需求,Argo Workflows 将满足您的需求:
但若出现以下情况,您则可能需要避免使用 Argo Workflows:
Argo Workflows 的核心概念包括定义和存储实时的 Kubernetes CRD 对象,这些对象将指定在适当状态下执行工作流。
例如
workflow.spec,它包含一个模板列表和一个作为主要功能或第一个要执行的模板的
entrypoint。
模板被定义为函数,可以有多种类型,如
containers,
script或
resource 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) 。RBAC 。ConfigMap。PriorityClass,以确保
Argo Workflow 控制器具有更高的优先级,并拥有在集群中运行所需的资源。
需要注意的是,
Argo Workflows 将使用 YAML 文件定义 CI/CD 工作流程,并指定以下内容:
既然已经了解了
Argo Workflows 的功能,我们就可以开始以代码的形式创建和管理我们的工作流了。让我们用三个步骤(
deploying,
teasing,and
building)创建一个 Python 3 应用程序工作流。首先,在 app 目录下创建名为
python-app.yaml 的文件,并添加工作流定义:
apiVersion: argoproj.io/v1alpha1kind: Workflowmetadata:
name: python-appspec:
entrypoint: python-app
templates:
- name: python-app
steps:
- - name: build
template: build
- - name: test
template: test
- - name: deploy
template: deploy
- name: build
container:
image: python:3.11
command: [python] args: ["-c", "print('build')"] - name: test
container:
image: python:3.11
command: [python] args: ["-m", "unittest", "discover", "-s", "/app/tests"] volumeMounts:
- name: test-volume
mountPath: /app/tests
volumes:
- name: test-volume
hostPath:
path: /path/to/tests
- name: deploy
container:
image: python:3.11
command: [python] args: ["-c", "print('deploy')"]
在这个例子中,Workflow CRD 定义了 CI/CD 流水线,模板中的每个步骤都有特定的目的:
要应用该文件,可以使用
kubectl apply 命令,并在
-f 标志后加上 YAML 文件的路径。下面是一个命令示范:
$ kubectl apply -f python-app.yaml
这将创建一个名称为
python-app 的 Argo Workflows,以及相应的模板和步骤。
现在,让我们执行
argo get 命令来获取有关工作流的信息,包括其状态和日志:
$ argo get python-appName: python-appNamespace: defaultServiceAccount: unset (will run with the default ServiceAccount)Status: SucceededConditions: PodRunning False Completed TrueCreated: 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 secondsProgress: 3/3ResourcesDuration: 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 是一款功能强大的工具, 用于在容器化部署环境中管理和自动化复杂的工作流程。它具有多种优势,包括:
总之,如果您的 DevOps 团队希望简化复杂的容器化工作流程的管理和自动化,那么 Argo Workflows 是一款必不可少的工具。不过,在考虑是否使用它时,您应该先评估好团队的云端和 Kubernetes 经验、规模及增长目标。如果您正在 Kubernetes 上构建平台,Argo Workflows 也可以成为平台工程师构建抽象的好工具,从而缓解开发团队在维护 YAML 文件上的痛苦。
作为一款基于平台工程理念构建的应用部署管理平台, Walrus 已在最新版本中集成 Argo Workflows 作为工作流引擎,借助 Argo Workflows 自动化特性,用户可以在 Walrus 上实现一站式应用编排发布。另外,Walrus 中单一配置、多态运行的应用模型,可以让研发人员无需关注底层基础设施具体实现方式,实现了研发与运维关注点分离和自动化协作,进而屏蔽各类环境中基础设施的复杂度,降低研发人员的认知负担,进一步落地平台工程理念。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70026925/viewspace-3007346/ ,如需转载,请注明出处,否则将追究法律责任。