CI-CD

Argo Workflows - (1) Introduction

Operation CWAL 2021. 7. 1. 23:00

Argo Workflows

Workflow 엔진의 필요성

Kubernetes가 웹서버 형태로 동작하는 마이크로서비스를 배포하기에 최적화된 플랫폼인 것은 부정할 수 없는 사실이다. 다만 현실 세계에서 부딪힐 수 있는 문제 중엔 단순 Batch 또는 Machine Learning, ETL(Extract, Transform, Load)과 같이 일회성의 프로세스들이 일련의 흐름으로 묶인 작업을 처리할 경우가 있다. K8s에선 이를 위해 Job, CronJob 등의 Workload를 제공하나, 이것만으로 여러 컨테이너가 유기적으로 연결되도록 구성하기엔 많은 어려움이 있다.

현재 시장엔 K8s의 기능을 확장시켜 복잡한 Workflow를 생성, 실행할 수 있는 다양한 솔루션이 존재하며, 이를 Workflow Engine이라고 한다. 그 중에서 Argo Workflows는 CNCF에서 진행(incubating)하고 있는 오픈소스 프로젝트 중 하나로 이번 시간에 자세히 다뤄보고자 한다.

 

Main Feature

Argo Workflows에서 기본적으로 제공하는 기능은 다음과 같다.

  • 사용자 친화적인 UI
  • Minio, S3, Artifactory 등의 저장소를 통한 Artifact 관리
  • 템플릿 및 Cron 방식의 Workflow
  • Workflow 아카이브
  • REST API 및 자체 CLI

Argo Workflows는 수천개 이상의 Pod과 Workflow를 관리할 수 있으며, 높은 신뢰성을 보장하기 위해 강건한 반복 메커니즘(retry)을 갖고 있다. 또한 별도의 툴 없이 K8s 자체적으로 CI/CD 파이프라인을 구성할 수 있다는 장점이 있다. 보다 자세한 설명은 Argo Workflows 공식 홈페이지를 참고하기 바란다.

 

설치

Argo Workflows는 다양한 설치 방법이 있으나, 이번 시간은 Quick Start 방식을 따르고자 한다. 실제 Product Level에선, 환경에 맞게 Manifest 파일을 수정하기 바란다.

 

우선 Argo Workflows용 Namespace를 생성하자.

kubectl create ns argo

다음은 Quick Start용으로 작성된 Manifest 파일을 인터넷으로부터 가져와서, K8s에 리소스를 생성하는 명령어이다.

kubectl apply -n argo -f https://raw.githubusercontent.com/argoproj/argo-workflows/stable/manifests/quick-start-postgres.yaml

해당 파일엔 Argo Workflow를 구성하는 argo-server, minio, postgres, workflow-controller와 같은 서비스와 RBAC 등의 리소스가 정의되어 있다.

 

기본적으로 argo-server의 Service가 ClusterIP 타입으로 정의되어 있기 때문에, 웹 대시보드에 바로 접근할 수 없는 문제가 있다. 

 

'argo-server' Service를 NodePort로 변경해도 되지만, 자체적인 인증 기능이 없으므로 보안에 취약할 수 있다. 따라서 K8s의 Port Forwarding 기능을 사용하도록 한다.

kubectl -n argo port-forward deployment/argo-server 2746:2746

웹으로 해당 주소 접근시, 다음과 같은 대시보드를 확인할 수 있다.

 

그리고 Argo Workflows 전용 CLI 툴인 argo는 다음과 같이 설치한다.

# Download the binary
curl -sLO https://github.com/argoproj/argo/releases/download/v3.1.1/argo-linux-amd64.gz

# Unzip
gunzip argo-linux-amd64.gz

# Make binary executable
chmod +x argo-linux-amd64

# Move binary to path
mv ./argo-linux-amd64 /usr/local/bin/argo

# Test installation
argo version

 

What comes next?

다음 시간엔 본격적으로 Workflow를 생성하고 실행 결과를 확인하는 방법에 대해 살펴보자.

 

'CI-CD' 카테고리의 다른 글

Argo Workflows - (3) Parameter, Artifact  (0) 2021.07.07
Argo Workflows - (2) Core Concepts  (0) 2021.07.04
Jenkins - Approval Stage 구현  (0) 2021.03.05
Jenkins - Container 기반 Agent  (0) 2021.03.03
Jenkins Pipeline  (0) 2021.03.01