?
사용자

GitOps와 Argo CD를 활용한 Kubernetes 배포 자동화 가이드

GitOps의 기본 개념을 이해하고, Argo CD를 사용하여 Kubernetes 환경에서 애플리케이션 배포를 자동화하는 방법을 단계별로 안내합니다. CI/CD 파이프라인 구축 및 운영에 필요한 실질적인 가이드입니다.

#gitops#argocd#kubernetes#cicd#devops
recipe.md

GitOps란 무엇인가?

GitOps는 Git을 단일 진실 공급원(Single Source of Truth)으로 사용하여 선언적인 방식으로 인프라 및 애플리케이션을 관리하고 자동화하는 운영 프레임워크입니다. 즉, 원하는 시스템 상태를 Git 리포지토리에 정의하고, GitOps 도구가 이를 실제 인프라에 자동으로 적용하도록 합니다.

왜 GitOps를 사용하는가?
  • 일관성 및 신뢰성: Git의 버전 관리 기능을 통해 시스템 상태의 일관성을 보장하고, 변경 사항 추적 및 롤백을 용이하게 합니다.
  • 자동화: Git 커밋만으로 배포, 업데이트, 롤백이 자동으로 이루어져 수동 작업 오류를 줄이고 배포 속도를 높입니다.
  • 보안: Git 리포지토리에 대한 접근 제어를 통해 누가 무엇을 변경했는지 명확히 알 수 있으며, 민감한 정보 관리에 용이합니다.
  • 가시성: Git 리포지토리는 현재 시스템 상태와 변경 이력을 명확하게 보여줍니다.

Argo CD란 무엇인가?

Argo CD는 Kubernetes 네이티브 GitOps 도구로, Git 리포지토리에 선언된 애플리케이션 상태와 실제 Kubernetes 클러스터의 상태를 지속적으로 동기화합니다.

Argo CD의 주요 기능
  • 자동 동기화: Git 리포지토리의 변경 사항을 감지하여 자동으로 Kubernetes 클러스터에 적용합니다.
  • 애플리케이션 생명주기 관리: 애플리케이션의 생성, 업데이트, 삭제 및 롤백을 지원합니다.
  • 시각화: Git 리포지토리와 Kubernetes 클러스터 간의 동기화 상태를 웹 UI를 통해 쉽게 확인할 수 있습니다.
  • 다양한 매니페스트 지원: Kubernetes YAML, Helm 차트, Kustomize 등 다양한 형식의 매니페스트를 지원합니다.

Argo CD를 활용한 배포 자동화 단계

1. 사전 준비
  • Kubernetes 클러스터: Argo CD를 설치할 Kubernetes 클러스터가 필요합니다. (예: Minikube, Kind, GKE, EKS, AKS)
  • kubectl: Kubernetes 클러스터와 상호작용하기 위한 CLI 도구입니다.
  • Git 리포지토리: 애플리케이션의 Kubernetes 매니페스트(YAML, Helm Chart 등)를 저장할 Git 리포지토리가 필요합니다. (예: GitHub, GitLab, Bitbucket)
2. Argo CD 설치

Kubernetes 클러스터에 Argo CD를 설치합니다. 일반적으로 kubectl 명령어를 사용합니다.

# Argo CD 네임스페이스 생성
kubectl create namespace argocd

# Argo CD 설치
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
3. Argo CD 접근

설치된 Argo CD의 웹 UI에 접근합니다. 기본적으로 argocd 네임스페이스에 배포되며, 서비스 유형을 LoadBalancer 또는 NodePort로 변경하거나 kubectl port-forward를 사용하여 접근할 수 있습니다.

# Argo CD 기본 관리자 비밀번호 확인
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath='{.data.password}' | base64 -d

# 포트 포워딩 (로컬에서 웹 UI 접근 시)
kubectl port-forward svc/argocd-server -n argocd 8080:443

웹 브라우저에서 https://localhost:8080 (포트 포워딩 시) 또는 해당 서비스의 IP/도메인으로 접속하여 관리자 계정(admin)과 위에서 확인한 비밀번호로 로그인합니다.

4. Git 리포지토리 연결

Argo CD UI 또는 CLI를 사용하여 Git 리포지토리를 Argo CD에 연결합니다.

  • UI: 'Settings' -> 'Repositories' -> 'Connect Repo'를 클릭하고 Git 리포지토리 URL, 인증 정보 등을 입력합니다.
  • CLI: argocd repo add <GIT_REPO_URL> --username <USER> --password <PASSWORD>
5. 애플리케이션 생성

Git 리포지토리에 정의된 Kubernetes 매니페스트를 사용하여 새 애플리케이션을 생성합니다. 이 과정에서 Git 리포지토리의 경로, 동기화 방법(자동/수동), 대상 Kubernetes 클러스터 등을 설정합니다.

  • UI: 'Applications' -> 'New App'을 클릭하고 필요한 정보를 입력합니다.
    • Application Name: 애플리케이션의 고유 이름
    • Project: (선택 사항) 애플리케이션을 그룹화하는 프로젝트
    • Sync Policy: 'Automatic' 또는 'Manual'
    • Source: Git 리포지토리 정보 (URL, Path, Revision)
    • Destination: Target Cluster URL (일반적으로 https://kubernetes.default.svc) 및 Namespace
  • CLI: argocd app create <APP_NAME> --repo <GIT_REPO_URL> --path <PATH_IN_REPO> --dest-server <TARGET_CLUSTER_URL> --dest-namespace <NAMESPACE> [--auto-sync]
6. 배포 및 동기화

애플리케이션을 생성하면 Argo CD는 Git 리포지토리와 클러스터의 상태를 비교합니다. 설정된 동기화 정책에 따라 자동으로 동기화되거나, 수동 동기화 버튼을 클릭하여 동기화를 시작할 수 있습니다.

  • UI: 생성된 애플리케이션 목록에서 'Sync' 버튼을 클릭합니다.
  • CLI: argocd app sync <APP_NAME>

동기화가 완료되면 Git 리포지토리에 정의된 애플리케이션이 Kubernetes 클러스터에 배포됩니다. Argo CD UI는 Git 상태와 클러스터 상태의 차이점을 시각적으로 보여줍니다.

7. 롤백

애플리케이션에 문제가 발생하면 이전 버전으로 롤백할 수 있습니다.

  • UI: 애플리케이션 상세 화면에서 'History' 탭으로 이동하여 원하는 버전의 'Rollback' 버튼을 클릭합니다.
  • CLI: argocd app rollback <APP_NAME> <REVISION> (REVISION은 롤백할 대상 커밋 ID)
8. 모니터링 및 관찰
  • Argo CD UI: 동기화 상태, 애플리케이션 상태(Healthy, Degraded 등), 리소스 정보를 직관적으로 확인합니다.
  • kubectl: kubectl get pods, kubectl logs <POD_NAME>, kubectl describe <RESOURCE_TYPE> <RESOURCE_NAME> 등을 사용하여 배포된 애플리케이션의 상태를 상세히 확인합니다.
  • Prometheus/Grafana: Argo CD 자체 및 배포된 애플리케이션의 메트릭을 수집하고 시각화하여 시스템의 전반적인 상태를 모니터링합니다.

주의사항

  • 보안: Git 리포지토리 및 Kubernetes 클러스터에 대한 접근 권한을 신중하게 관리해야 합니다. Argo CD의 RBAC 설정을 활용하여 접근 제어를 강화하세요.
  • 매니페스트 관리: Git 리포지토리에 저장되는 Kubernetes 매니페스트는 항상 최신 상태로 유지하고, 명확한 커밋 메시지를 사용하여 변경 이력을 관리하
10
스크랩
12
좋아요
0
댓글