메인 콘텐츠로 건너뛰기

Argo Workflows와 GitHub Actions 연동 가이드

설탕사과
설탕사과
조회수 98
요약

Argo Workflows 소개

Argo Workflows는 쿠버네티스 환경에서 복잡한 작업의 자동화를 돕는 워크플로 엔진입니다. CI/CD 파이프라인이나 데이터 처리, 머신러닝과 같이 여러 단계가 필요한 과정을 효율적으로 관리할 수 있습니다.

GitHub Actions의 역할

GitHub Actions는 코드 변경 시 자동으로 테스트와 배포 과정을 실행하는 도구입니다. 개발자가 직접 GitHub 저장소에서 손쉽게 연동할 수 있어 자동화에 용이합니다.

두 도구 연동의 장점

Argo Workflows와 GitHub Actions을 함께 사용하면 클라우드 환경에서 작업을 크게 확장할 수 있습니다. 작업 병렬 수행(DAG 지원), 재사용 가능한 템플릿, 실시간 모니터링(UI와 CLI 제공), 비용 절감(쿠버네티스 자원 효율 사용) 등의 이점이 있습니다.

활용 사례

  • CI/CD: 여러 환경에 애플리케이션을 자동 빌드, 테스트, 배포

  • 머신러닝: 데이터 전처리부터 모델 학습, 배포까지의 전체 흐름 관리

  • 대용량 데이터 처리: ETL(추출, 변환, 적재) 작업 자동화

  • 백업 및 복구: 주기적인 백업 및 복구 프로세스 자동 실행

  • 이벤트 기반: GitHub 이벤트 또는 클라우드 저장소 변화에 따라 워크플로 자동 실행

준비사항

  • 쿠버네티스 클러스터(로컬 Minikube, AKS, EKS, GKE 등)

  • kubectl 설치 및 설정 완료

  • Argo Workflows 쿠버네티스 클러스터에 설치

  • GitHub 저장소에 워크플로 활성화

Argo Workflows 설치 및 UI 연결 방법

쿠버네티스에서 Argo Workflows를 설치하려면 다음 명령을 사용합니다.

kubectl create namespace argo
kubectl apply -n argo -f https://github.com/argoproj/argo-workflows/releases/download/v3.4.4/install.yaml
kubectl get pods -n argo

운영 환경이 아니거나 디버깅 시 인증 없이 UI에 접근하려면 추가 패치를 적용할 수 있습니다.

kubectl patch deployment argo-server -n argo --type=json -p=[{op: add, path: /spec/template/spec/containers/0/args/-, value: --auth-mode=server}]
kubectl rollout restart deployment argo-server -n argo
kubectl -n argo port-forward deployment/argo-server 8080:2746

이후 브라우저에서 http://localhost:8080 으로 접근하면 UI를 볼 수 있습니다.

간단한 워크플로 정의 예시

워크플로 샘플 파일을 프로젝트 루트에 생성합니다.

# sample_deploy.yml
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: github-triggered-workflow-
  namespace: argo
spec:
  entrypoint: main
  templates:
    - name: main
      container:
        image: python:3.8
        command: [python, -c]
        args: [print(Hello from Argo Workflow...)]

AKS 인증 방식과 GitHub Secrets 활용

쿠버네티스 인증은 간편하게 admin 계정 또는 Azure AD, 서비스 프린시펄, kubeconfig 인증서 등 다양한 방식으로 할 수 있습니다. 예시로 base64 인코딩된 kubeconfig를 Secret으로 저장합니다.

az aks get-credentials --resource-group <RESOURCE_GROUP> --name <CLUSTER_NAME> --admin --file kubeconfig
cat kubeconfig | base64 -w 0

결과 값을 GitHub 저장소의 Settings > Secrets > Actions에 KUBE_CONFIG_DATA로 등록합니다.

GitHub Actions에서 Argo 워크플로 배포 예시

자동 배포를 위한 workflow 파일 예시는 다음과 같습니다.

# .github/workflows/argo-workflow.yml
name: Deploy to AKS without Azure AD
on:
  push:
    branches: [ main ]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v3
      - name: Verify File Exists
        run: |
          if [ ! -f sample_deploy.yml ]; then
            echo Error: sample_deploy.yml not found!
            exit 1
          fi
          echo Found sample_deploy.yml
      - name: Setup Kubeconfig
        run: |
          mkdir -p $HOME/.kube
          echo ${{ secrets.KUBE_CONFIG_DATA }} | base64 --decode > $HOME/.kube/config
          chmod 600 $HOME/.kube/config
          export KUBECONFIG=$HOME/.kube/config
          kubectl config view --minify
          kubectl get nodes
      - name: Deploy Argo Workflow
        run: |
          kubectl create -f sample_deploy.yml -n argo || true
          kubectl get workflows -n argo

이 워크플로는 코드 push 시마다 자동으로 kubectl을 통해 워크플로를 배포합니다.

실행 결과 확인법

워크플로가 실행되면, GitHub Actions 탭에서 로그로 진행 상황을 확인할 수 있습니다. Argo UI에서는 워크플로 이름을 클릭하여 상세한 실행 이력을 조회할 수 있습니다.

확장 활용 및 마무리

이 흐름을 기반으로 멀티 스텝 워크플로, 다양한 변수와 파라미터, 고급 스케줄러 기능 등으로 확장할 수 있습니다. Argo Workflows를 잘 활용하면 클라우드 환경의 DevOps 및 데이터 자동화를 크게 간소화할 수 있습니다.