WorkflowTemplate 란?
WorkflowTemplate은 Argo Workflow에서 재사용 가능한 워크플로우 정의의 모음입니다. 일반 워크플로우와 비슷하지만, WorkflowTemplate은 독립적으로 실행할 수 없으며 다른 워크플로우에서 참조되어 사용됩니다. WorkflowTemplate의 주요 목적은 코드 재사용 및 모듈화로, 여러 워크플로우에서 공통적으로 사용되는 템플릿을 중앙 집중식으로 관리할 수 있습니다.
WorkflowTemplate 사용의 장점은 다음과 같습니다.
- 코드 재사용: 워크플로우 간에 중복되는 작업을 줄이고 공통 템플릿을 통합하여 관리할 수 있습니다. 이로 인해 워크플로우 정의를 간소화하고 유지 관리를 용이하게 할 수 있습니다.
- 모듈화: 각 WorkflowTemplate은 독립적인 모듈로 취급되어 다양한 워크플로우에서 사용될 수 있습니다. 이를 통해 워크플로우를 작은, 관리 가능한 단위로 나눌 수 있으며, 개발 및 유지 관리에 드는 시간과 노력을 줄일 수 있습니다.
- 일관성: 중앙 집중식으로 관리되는 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."
여기서 중요하게 볼 점은 아래와 같습니다.
- entrypoint: 워크플로우가 시작되는 첫 번째 템플릿의 이름을 나타냅니다. 이 경우, echo-inputs 템플릿이 시작 템플릿입니다.
- steps: 워크플로우의 실행 순서에 따라 정의된 작업들을 포함합니다. 이 예제에서는 한 단계만 있는데, 그 단계에서 echo-workflow-template을 호출합니다.
- templateRef: 참조하려는 워크플로우 템플릿의 이름과 템플릿 이름을 나타냅니다. 이 예제에서는 echo-workflow-template의 echo-inputs 템플릿을 참조합니다.
- 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 에선 보기 편하게 어떻게 진행 되었는 지 나옵니다.
'argo workflow' 카테고리의 다른 글
argo workflow 배포 ( distribution ) (0) | 2023.07.22 |
---|---|
argo workflow 로 어떤 걸 만들었을까? (0) | 2023.07.22 |
argo workflows에서 Workflow 사용 (0) | 2023.04.16 |
argo workflows 설치 및 인증 (1) | 2023.04.14 |
argo workflows 의 도입 여정의 시작 (0) | 2023.04.14 |