쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 배포와 관리를 간소화하는 강력한 오케스트레이션 플랫폼입니다. 하지만 복잡한 배포 환경에서는 애플리케이션과 인프라의 상태를 일관되게 유지하는 것이 도전 과제입니다. 여기서 ArgoCD가 등장합니다. ArgoCD는 GitOps 원칙을 기반으로 쿠버네티스 애플리케이션의 지속적 전달(CD)을 자동화하는 오픈 소스 도구입니다. 이 글에서는 ArgoCD의 개념, 필요성, 그리고 실제 사용 예시를 자세히 살펴보겠습니다.

ArgoCD란?

정의

ArgoCD는 쿠버네티스를 위한 선언적 GitOps 지속적 전달 도구입니다. 이는 애플리케이션의 정의, 구성, 환경이 선언적이고 버전 관리되어야 하며, 배포 및 수명 주기 관리가 자동화되고, 감사 가능하며, 이해하기 쉬워야 한다는 철학을 따릅니다.

ArgoCD는 Git 저장소를 애플리케이션의 원하는 상태를 정의하는 단일 진실 원천(SSOT, Single Source of Truth)으로 사용합니다. 쿠버네티스 매니페스트는 다양한 형식으로 지정할 수 있습니다:

  • Kustomize
  • Helm
  • Jsonnet
  • Plain YAML/JSON
  • 사용자 정의 구성 관리 플러그인

작동 원리

ArgoCD는 쿠버네티스 컨트롤러로 구현되어, 실행 중인 애플리케이션의 현재 상태(라이브 상태)를 Git 저장소에 정의된 목표 상태와 지속적으로 비교합니다. 만약 라이브 상태가 목표 상태와 다르면, 이를 OutOfSync 상태로 표시하고, 자동 또는 수동으로 동기화하여 일치시킵니다.

주요 컴포넌트

ArgoCD는 여러 컴포넌트로 구성되어 있습니다:

  • argocd-application-controller: 애플리케이션 상태를 모니터링하고 동기화.
  • argocd-applicationset-controller: 다중 애플리케이션 관리를 위한 확장 기능.
  • argocd-dex-server: 인증 및 SSO 지원.
  • argocd-notifications-controller: 알림 관리.
  • argocd-redis: 캐싱 및 데이터 저장.
  • argocd-repo-server: Git 저장소와의 상호작용.
  • argocd-server: API 및 웹 UI 제공.

이러한 컴포넌트는 ArgoCD가 쿠버네티스 클러스터 내에서 독립적인 네임스페이스(기본적으로 argocd)에서 작동하도록 돕습니다.

ArgoCD의 필요성

ArgoCD는 현대적인 클라우드 네이티브 환경에서 필수적인 도구로 자리 잡았습니다. 그 이유는 다음과 같습니다:

1. 인프라와 소프트웨어 불일치 문제 해결

전통적인 배포 방식에서는 인프라와 소프트웨어를 별도로 관리하는 경우가 많았습니다. 이로 인해 클러스터의 실제 상태와 원하는 상태 간의 불일치가 발생할 가능성이 높았습니다. ArgoCD는 GitOps 방식을 통해 모든 구성과 애플리케이션 상태를 Git 저장소에 저장하여 이러한 문제를 해결합니다.

2. 변경 추적 및 롤백 용이성

모든 코드와 인프라 변경 사항이 Git 저장소에 기록되므로, 변경 내역을 쉽게 추적할 수 있습니다. 문제가 발생할 경우, 이전 버전으로 롤백하는 것도 간단합니다. 이는 특히 대규모 팀에서 협업할 때 유용합니다.

3. 배포 자동화

ArgoCD는 배포 프로세스를 자동화하여 수동 작업으로 인한 오류를 줄입니다. Git 저장소에 새로운 커밋이 푸시되면, ArgoCD가 이를 감지하고 클러스터에 자동으로 적용할 수 있습니다.

4. 보안 강화

ArgoCD는 pull-based 모델을 사용합니다. 이는 외부 CI 도구가 클러스터에 직접 푸시하는 대신, ArgoCD가 Git 저장소에서 코드를 가져와 배포하는 방식입니다. 이로 인해 보안 취약점이 줄어들고, 클러스터의 무결성이 유지됩니다.

5. 편리한 사용자 인터페이스

ArgoCD는 웹 기반 UI와 CLI를 제공하여 애플리케이션 상태를 시각적으로 확인하고 관리할 수 있습니다. 이는 DevOps 팀이 배포 상태를 쉽게 모니터링하고 문제를 빠르게 해결하는 데 도움을 줍니다.

장점 설명
일관성 유지 GitOps를 통해 클러스터와 Git 저장소 간 상태 일치 보장
변경 추적 Git을 통해 모든 변경 사항 기록, 롤백 용이
자동화 배포 프로세스 자동화로 수동 오류 감소
보안 Pull-based 모델로 보안 취약점 감소
사용자 친화적 인터페이스 웹 UI와 CLI로 쉬운 모니터링 및 관리

사용 예시

ArgoCD를 실제로 사용하는 방법을 간단한 예시를 통해 알아보겠습니다. 여기서는 ArgoCD를 설치하고, 샘플 애플리케이션을 배포하는 과정을 다룹니다.

1. ArgoCD 설치

ArgoCD는 쿠버네티스 클러스터에 쉽게 설치할 수 있습니다. 다음 명령어를 사용합니다:

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

이 명령어는 argocd 네임스페이스를 생성하고, ArgoCD의 모든 컴포넌트를 설치합니다. 설치된 ArgoCD는 기본적으로 내부 서비스로 실행되며, 외부 접근을 위해 추가 설정이 필요할 수 있습니다.

2. ArgoCD UI 접근

ArgoCD의 웹 UI에 접근하려면 포트 포워딩을 설정합니다:

kubectl port-forward svc/argocd-server -n argocd 8080:443

그 후, 웹 브라우저에서 http://localhost:8080에 접속하면 ArgoCD UI를 볼 수 있습니다. 초기 로그인 정보는 공식 문서(ArgoCD 공식 문서)에서 확인할 수 있습니다.

3. 애플리케이션 생성

ArgoCD CLI를 사용하여 샘플 애플리케이션을 생성합니다. 예를 들어, ArgoCD에서 제공하는 guestbook 애플리케이션을 배포하려면:

argocd app create guestbook \
  --repo https://github.com/argoproj/argocd-example-apps.git \
  --path guestbook \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace default

이 명령어는:

  • Git 저장소: https://github.com/argoproj/argocd-example-apps.git
  • 경로: guestbook
  • 대상 클러스터: 로컬 쿠버네티스 클러스터
  • 네임스페이스: default

를 지정하여 애플리케이션을 정의합니다.

4. 애플리케이션 동기화

애플리케이션을 클러스터에 배포하려면 동기화 명령어를 실행합니다:

argocd app sync guestbook

이 명령어는 Git 저장소에 정의된 상태를 클러스터에 적용합니다. 자동 동기화를 활성화하면, Git 저장소의 변경 사항이 자동으로 클러스터에 반영됩니다.

5. 모니터링 및 관리

ArgoCD UI를 통해 애플리케이션의 상태를 실시간으로 모니터링할 수 있습니다. UI에서는 다음과 같은 정보를 확인할 수 있습니다:

  • 애플리케이션의 동ರ
상태 설명
Synced Git 저장소와 클러스터 상태가 일치함
OutOfSync Git 저장소와 클러스터 상태가 불일치함, 동기화 필요

문제가 발생하면, UI를 통해 이전 버전으로 롤백하거나, 수동으로 동기화를 트리거할 수 있습니다.

추가 예시: Helm 차트 배포

ArgoCD는 Helm 차트를 사용하여 애플리케이션을 배포할 수도 있습니다. 예를 들어, Nginx Helm 차트를 배포하려면:

  1. Helm 차트를 생성합니다:

     helm create my-app
    
  2. 생성된 차트를 Git 저장소에 푸시합니다:

     git add .
     git commit -m "Add Nginx Helm chart"
     git push origin main
    
  3. ArgoCD에서 Git 저장소를 등록합니다:

    • UI에서 Settings > Repositories > Connect Repo로 이동.
    • Git 저장소 URL(예: https://github.com/username/my-repo.git) 입력.
  4. 애플리케이션을 생성합니다:

    • UI에서 Applications > New App으로 이동.
    • 애플리케이션 이름, 프로젝트, Git 저장소 URL, Helm 차트 경로, 대상 네임스페이스 등을 설정.
    • Auto-Create Namespace 옵션을 활성화하여 네임스페이스가 없으면 자동 생성.
  5. 배포를 확인합니다:

     kubectl get all -n my-namespace
    

이 명령어는 배포된 pod, service, deployment 등의 상태를 보여줍니다.

결론

ArgoCD는 쿠버네티스 환경에서 GitOps를 구현하는 강력한 도구입니다. 선언적 구성, 자동화된 배포, 그리고 사용자 친화적인 인터페이스를 통해 애플리케이션 관리의 효율성과 안정성을 크게 향상시킵니다. 소규모 프로젝트부터 대규모 엔터프라이즈 환경까지, ArgoCD는 DevOps 팀에게 필수적인 도구로 자리 잡았습니다.

ArgoCD를 시작하려면 공식 문서를 참고하거나, ArgoCD 개념부터 설치 배포까지와 같은 한국어 자료를 활용해 보세요. GitOps의 세계로 첫걸음을 내딛어 보세요!

참고 문헌

댓글남기기