ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Argo Workflows와 GitHub Actions 연동 가이드
    CICD 2025. 9. 4. 15:11
    반응형

    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 및 데이터 자동화를 크게 간소화할 수 있습니다.

     

    반응형
Designed by Tistory.