argo workflow

argo workflows에서 Workflow 사용

나뭇빛자루 2023. 4. 16. 22:03
반응형

Workflow 란 ...

Workflow는 일련의 작업들이 서로 연결되어 순차적, 병렬, 또는 복잡한 종속성 구조를 가진 형태로 실행되는 프로세스이며, 다음과 같은 특성을 같습니다.

  1. 자동화: 워크플로우는 일련의 작업들을 자동으로 실행할 있도록 구성되어 있습니다. 이를 통해 오류 가능성이 높은 수동 작업을 최소화하고, 작업의 정확성과 일관성을 높일 있습니다.
  2. 재사용성: 워크플로우는 재사용 가능한 작업 또는 작업 그룹을 정의할 있습니다. 이를 통해 코드 중복을 줄이고, 워크플로우 구성의 유지 관리를 용이하게 있습니다.
  3. 모듈화: 워크플로우는 작업을 작은, 독립적인 모듈로 나눌 있습니다. 이를 통해 개발 유지 관리에 드는 시간과 노력을 줄일 있으며, 작업의 책임을 명확하게 구분할 있습니다.
  4. 확장성: 워크플로우는 작업이 병렬로 실행되거나, 다른 작업의 완료에 따라 동적으로 실행될 있도록 구성할 있습니다. 이를 통해 시스템의 확장성을 향상시킬 있습니다.
  5. 모니터링 로깅: 워크플로우는 작업의 상태, 진행률 결과를 모니터링하고 로깅할 있는 기능을 제공합니다. 이를 통해 워크플로우 실행의 성공 여부를 추적하고, 문제가 발생한 경우 적절한 조치를 취할 있습니다.

Hello world 출력하기 !

역시 처음 오픈소스를 접하게 되면 어떤 기능이 어떻게 작동 하는지 눈으로 한번 보고 설명을 읽는게 더 빠르게 학습 되는 것 같다고 생각해서 매번 이런 오픈소스를 접하게 된다면 Hello world를 출력합니다 ㅎㅎ

그래서 이번 포스팅에서는 argo workflow가 어떻게 API 통신을 진행 하는지 알아보고 싶고 또한 어떤 기능들이 있는지에 대해서 Hello world를 통해서 예시를 들며 진행해 보겠습니다. ( 두근 두근 하군요, API 서버를 개발 안하고 이렇게 이용하는 걸 생각하니 )

 

저는 kubernetes에 적용 된 토큰을 사용해 통신을 진행 하고 싶었습니다.

우선 사용중인 토큰이 유효 한지 검사를 진행 해보 겠습니다.

curl -X GET https://argo-workflow.fassto.ai/api/v1/workflows/default \
     -H "Authorization: Bearer $ARGO_BEARER_TOKEN"

위 명령어를 치면 해당 네임스페이스어 어떤 오브젝트들이 있는 지 GET 하는 요청인데 {"code":16,"message":"token not valid for running mode"} 라고 반환을 했습니다...

이유를 생각해 보면 일반적인 k8s 토큰으로 통신 하는게 아닌가 ? sso로 선언 했으니 다르게 해야하나 분명 인증 방식에 token이라고 있던 것 같은데 여러 생각이 드는군요..

쫌 더 찾아보니 google Oauth 로그인 하기 위해서 토큰이 발급이 되어서 인증 되는 방식이였습니다. 해당 토큰을 발급 받아야 사용해야 했고 결국 k8s의 토큰으론 통신은 다른 인증 모드인 server 나 clinet 모드로 사용가능 할 것 같습니다.

 

Argo CLI 설치

설치는 해당 링크를 참조해 주세요 : https://github.com/argoproj/argo-workflows/releases 

 

Releases · argoproj/argo-workflows

Workflow engine for Kubernetes. Contribute to argoproj/argo-workflows development by creating an account on GitHub.

github.com

Argo CLI를 사용하기 위해선 kubectl 의 config에 등록된 context의 정보를 참조하기 때문에 kubectl을 사용하는 서버 혹은 프롬프트에서 실행 하는 것을 권장합니다.

 

아래 yaml 을 저장 해 줍니다.

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: hello-world-
spec:
  entrypoint: hello-world
  templates:
  - name: hello-world
    container:
      image: alpine:3.7
      command: [sh, -c]
      args: ["echo 'Hello, World!'"]

여기서 특이한 점은 hello-word- 접두사 뒤에 임의의 문자가 붙는 것을 볼 수 있는데 이런 이유는 워크플로우의 실행 하고 난 후 확인 해 보겠습니다.

아래 명령을 실행 시켜 줍니다.

argo submit -n $argo-workflow가_설치된_namespace hello_world.yaml

argo workflow 에서 workflows를 확인 해보면 임의의 랜덤한 이름으로 실행이 완료 되어 있습니다. 

확인해 보면 해당 Pod 가 정상적으로 실행 완료 된 것을 확인 할 수 있습니다.

 

사용 후 소감

즉, Task 를 실행 시켜 완료가 되는 느낌을 컨테이너화 하여 작업을 실행시켜 주며 UI로 쉽게 확인이 가능한 툴이라고 생각 하시면 편할 것 같습니다! (idle 의 작업이 없는 컨테이너 들은 작업 완료가 됩니다.)

 

 

참조 

 

Quick Start - Argo Workflows - The workflow engine for Kubernetes

Quick Start To see how Argo Workflows work, you can install it and run examples of simple workflows. Before you start you need a Kubernetes cluster and kubectl set up to be able to access that cluster. For the purposes of getting up and running, a local cl

argoproj.github.io

 

 

반응형