argo workflow

argo workflow의 WorkflowTemplate 이용

나뭇빛자루 2023. 4. 20. 15:09
반응형

WorkflowTemplate 란? 

Template 이 뭔지 이해를 돕기 위한 사진 입니다.

WorkflowTemplate은 Argo Workflow에서 재사용 가능한 워크플로우 정의의 모음입니다. 일반 워크플로우와 비슷하지만, WorkflowTemplate은 독립적으로 실행할 수 없으며 다른 워크플로우에서 참조되어 사용됩니다. WorkflowTemplate의 주요 목적은 코드 재사용 및 모듈화로, 여러 워크플로우에서 공통적으로 사용되는 템플릿을 중앙 집중식으로 관리할 수 있습니다.

WorkflowTemplate 사용의 장점은 다음과 같습니다.

  1. 코드 재사용: 워크플로우 간에 중복되는 작업을 줄이고 공통 템플릿을 통합하여 관리할 수 있습니다. 이로 인해 워크플로우 정의를 간소화하고 유지 관리를 용이하게 할 수 있습니다.
  2. 모듈화: 각 WorkflowTemplate은 독립적인 모듈로 취급되어 다양한 워크플로우에서 사용될 수 있습니다. 이를 통해 워크플로우를 작은, 관리 가능한 단위로 나눌 수 있으며, 개발 및 유지 관리에 드는 시간과 노력을 줄일 수 있습니다.
  3. 일관성: 중앙 집중식으로 관리되는 WorkflowTemplate을 사용하면, 여러 워크플로우에 걸쳐 일관된 작업 정의와 실행 방식을 보장할 수 있습니다. 이로 인해 팀 전체의 생산성 향상과 에러 발생 가능성을 줄일 수 있습니다.

WorkflowTemplate 사용하는 예시로, 여러 워크플로우에서 공통으로 사용되는 데이터 전처리, 학습, 평가 등의 과정을 WorkflowTemplate으로 정의하고, 워크플로우에서 필요한 부분만 참조하여 사용할 있습니다. 이를 통해 공통 작업을 곳에서 관리하고, 워크플로우 정의를 간결하게 유지할 있습니다.

 

hello worlds 출력하기

WorkflowTemplate 템플릿 예시

apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
  name: echo-workflow-template
spec:
  templates:
  - name: echo-inputs
    inputs:
      parameters:
      - name: input-string-1
      - name: input-string-2
    container:
      image: alpine:3.14
      command: [sh, -c]
      args: ["echo '{{inputs.parameters.input-string-1}}' && echo '{{inputs.parameters.input-string-2}}'"]

보통 deployment와 비슷하게 보이지만 여기서 중요하게 볼 점은 inputs이란 섹션입니다.

inputs:
  parameters:
  - name: input-string-1
  - name: input-string-2

inputs 섹션은 워크플로우 템플릿 또는 워크플로우 작업에 필요한 입력 값을 정의하는 데 사용됩니다. 이러한 입력 값은 parameters 형태로 외부에서 전달되거나 워크플로우 내에서 다른 작업의 출력 결과로부터 전달될 수 있습니다.

container:
  image: alpine:3.14
  command: [sh, -c]
  args: ["echo '{{inputs.parameters.input-string-1}}' && echo '{{inputs.parameters.input-string-2}}'"]

 개의 매개변수 input-string-1 input-string-2 정의되어 있습니다.  이러한 매개변수는 워크플로우에서 사용될 있으며, 워크플로우 실행 외부에서 전달되는 값으로 설정할 있습니다. 매개변수를 워크플로우 내에서 사용하려면, '{{inputs.parameters.parameter-name}}' 구문 사용하여 해당 매개변수를 참조할 있습니다

 

아래 명령어 혹은 UI 들어가셔서 추가를 해줍니다.
추 후에는 해당 템플릿들을 argocd 에서 관리 & 배포 하면 좋겠다 란 생각이 듦니다 ㅎㅎ ( crd 가 생성 된 덕분에 쿠버네티스 API 도 이용 가능해 졌습니다 좋군요 )

kubectl create -f echo-workflow-template.yaml

 

등록 된 argo workflow Template 확인

등록이 완료 되면 수동으로 사용할 수도 있습니다. 저는 CI 를 진행할 때 github action이 장애가 있어도 수동으로 실행 시켜줄 무언가를 원했는데 이런 기능이 있다니 너무 잘 만들어진 것 같습니다.

예를 들어 github 의 주소와 버전만 기입하면 바로 빌드가 되게끔 만들어 주는 것을 원햇는데 정말 좋은 기능인 것 같습니다.

 


workflow 를 이용해  workflowTemplate 사용하기

자 그럼 이제 이 workflowTemplate 사용할 트리거 즉 workflow 을 만들어 보겠습니다.

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: workflow-using-template-
spec:
  entrypoint: echo-inputs
  templates:
  - name: echo-inputs
    steps:
    - - name: call-template
        templateRef:
          name: echo-workflow-template
          template: echo-inputs
        arguments:
          parameters:
          - name: input-string-1
            value: "Hello, Argo Workflow!"
          - name: input-string-2
            value: "This is another message."

여기서 중요하게 볼 점은 아래와 같습니다.

  1. entrypoint: 워크플로우가 시작되는 번째 템플릿의 이름을 나타냅니다. 경우, echo-inputs 템플릿이 시작 템플릿입니다.
  2. steps: 워크플로우의 실행 순서에 따라 정의된 작업들을 포함합니다. 예제에서는 단계만 있는데, 단계에서 echo-workflow-template 호출합니다.
  3. templateRef: 참조하려는 워크플로우 템플릿의 이름과 템플릿 이름을 나타냅니다. 예제에서는 echo-workflow-template echo-inputs 템플릿을 참조합니다.
  4. arguments: 워크플로우 템플릿에 전달되는 매개변수를 정의합니다. 예제에서는 개의 매개변수, input-string-1 input-string-2 정의되어 있으며, 각각 "Hello, Argo Workflow!" "This is another message."라는 값을 가지고 있습니다.

즉, 요약하자면 한 Workflow에서 여러 템플릿을 사용할 수 있습니다! !!

 

해당 Workflow 을 바로 실행 시켜 보겠습니다.

$ argo submit  workflow-using-template.yaml

Name:                workflow-using-template-tdpb4
Namespace:           argo
ServiceAccount:      unset (will run with the default ServiceAccount)
Status:              Pending
Created:             Thu Apr 20 07:32:13 +0000 (now)
Progress:

결과는 아래와 같이 나왔습니다.

$ k logs workflow-using-template-tdpb4-echo-inputs-548616206

Hello, Argo Workflow!
This is another message.
time="2023-04-20T07:32:16.413Z" level=info msg="sub-process exited" argo=true error="<nil>"

올바르게 인자 값들이 전달 된 모습이 나온걸 확인 할 수있습니다.

그리고 UI 에선 보기 편하게 어떻게 진행 되었는 지 나옵니다.

반응형