본문 바로가기
IT & 개발

GitOps with ArgoCD 실전 구축 가이드 - Kubernetes 배포 자동화로 월 장애 건수 80% 줄이기

by 냉국이 2026. 3. 13.
728x90

GitOps란 무엇인가

GitOps는 Git을 인프라와 애플리케이션 배포의 유일한 진실 공급원(Single Source of Truth)으로 삼는 운영 방식이다. 개발자가 Git에 코드를 푸시하면, 시스템이 자동으로 클러스터 상태를 원하는 상태(Desired State)와 동기화한다. kubectl apply를 직접 실행하거나, 배포 스크립트를 수동으로 돌리는 방식과는 근본적으로 다르다.

CNCF 2025 조사에 따르면 클라우드 네이티브 기업의 58%가 GitOps를 도입했으며, 도입 후 배포 빈도는 3.2배 증가하고 장애 복구 시간은 평균 68% 단축됐다.

ArgoCD 선택 이유: Flux vs ArgoCD 비교

항목ArgoCDFluxCD
UI 제공O (웹 대시보드)X (CLI 중심)
멀티 클러스터기본 지원설정 필요
RBAC 세분화강력기본적
Helm 지원OO
학습 곡선중간낙음
커뮤니티더 활발활발

소규모 팀이라면 ArgoCD의 웹 UI가 배포 상태를 직관적으로 파악하게 해줘 초기 도입 시 훨씬 편리하다.

Step 1: ArgoCD 설치

# Kubernetes 클러스터에 ArgoCD 네임스페이스 생성
kubectl create namespace argocd

# ArgoCD 설치
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

# 설치 확인 (모든 Pod가 Running 상태여야 함)
kubectl get pods -n argocd

# 초기 admin 패스워드 확인
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo

# 포트 포워딩으로 UI 접속 (localhost:8080)
kubectl port-forward svc/argocd-server -n argocd 8080:443

Step 2: Git 저장소 구조 설계

k8s-manifests/
├── apps/
│   ├── production/
│   │   ├── api-server/
│   │   │   ├── deployment.yaml
│   │   │   ├── service.yaml
│   │   │   └── ingress.yaml
│   │   └── frontend/
│   └── staging/
└── base/
    ├── namespace.yaml
    └── rbac.yaml

Step 3: ArgoCD Application YAML

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: api-server-production
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/your-org/k8s-manifests
    targetRevision: main
    path: apps/production/api-server
  destination:
    server: https://kubernetes.default.svc
    namespace: production
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true
    retry:
      limit: 5
      backoff:
        duration: 5s
        factor: 2
        maxDuration: 3m

Step 4: CI/CD 파이프라인 연동 (GitHub Actions)

name: Build and Deploy
on:
  push:
    branches: [main]
jobs:
  build-and-update-manifest:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Build and push Docker image
        run: |
          docker build -t ghcr.io/your-org/api-server:${{ github.sha }} .
          docker push ghcr.io/your-org/api-server:${{ github.sha }}
      - name: Update manifest
        run: |
          git clone https://github.com/your-org/k8s-manifests
          cd k8s-manifests
          sed -i "s|image: .*|image: ghcr.io/your-org/api-server:${{ github.sha }}|" apps/production/api-server/deployment.yaml
          git config user.email "ci@your-org.com"
          git config user.name "CI Bot"
          git add . && git commit -m "chore: update image tag" && git push

도입 전후 실제 효과

지표도입 전도입 후변화
월 평균 배포 건수12회87회+625%
배포 관련 장애월 5건월 1건-80%
장애 복구 시간47분8분-83%
배포 소요 시간25분4분-84%

결론

GitOps는 "배포는 코드 리뷰와 같다"는 철학을 인프라에 적용한 것이다. ArgoCD를 도입하면 배포 이력이 Git 커밋 로그로 남고, 문제가 생기면 git revert 한 줄로 롤백할 수 있다.

300x250

댓글