乐趣区

关于开源:运用-Argo-Workflows-协调-CICD-流水线

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-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: 
      args: ["-c", "print('build')"]
  - name: test
    container:
      image: python:3.11
      command: 
      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: 
      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          False
 Completed           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

退出移动版