Argo CD와 GitOps

Argo CD와 GitOps

1️⃣ GitOps 개념 및 Argo CD의 역할


GitOps는 Git을 단일 진리의 원천으로 사용하여 애플리케이션 및 인프라의 배포 및 관리를 자동화하는 방법론입니다. GitOps는 개발자가 코드를 Git에 푸시하고, 이 변경 사항을 통해 배포가 자동으로 이루어지도록 합니다. 이 과정에서 Argo CD는 GitOps의 핵심 툴로서, Git 저장소와 Kubernetes 클러스터 간의 동기화를 책임집니다.

1. GitOps의 주요 개념

  • Git 저장소: 애플리케이션의 코드와 배포 설정이 저장된 Git 저장소.
  • 자동화: Git에 대한 변경 사항이 자동으로 클러스터에 반영되며, Kubernetes 리소스가 자동으로 배포됨.
  • 동기화: GitOps는 Git과 클러스터의 상태를 일치시키는 작업을 자동화합니다.

2. Argo CD의 역할

Argo CD는 GitOps 워크플로우에서 Git 저장소와 Kubernetes 클러스터 사이의 자동화된 동기화를 관리하는 툴입니다. 이를 통해 사용자는 코드 변경을 Git에서만 관리하고, 클러스터는 Git 상태를 반영하여 자동으로 배포가 이루어집니다.


2️⃣ GitOps Workflow 이해 (PR 기반 배포)

GitOps에서 가장 중요한 워크플로우는 Pull Request (PR) 기반 배포입니다. 개발자는 애플리케이션 변경 사항을 PR로 제출하고, 이를 승인한 후 자동으로 배포가 이루어집니다.

1. PR 기반 배포 과정

  1. PR 제출: 개발자가 기능을 추가하거나 버그를 수정한 후 GitHub, GitLab 등의 Git 저장소에 PR을 제출합니다.
  2. 자동화된 검토: PR을 제출하면, CI/CD 파이프라인이 자동으로 테스트를 실행하고, 검토가 완료되면 배포가 준비됩니다.
  3. 배포 승인: PR이 승인되면 GitOps 툴(Argo CD)이 자동으로 Kubernetes 클러스터에 배포를 시작합니다.
  4. 배포 후 검증: 배포가 완료되면 Argo CD는 상태를 Git과 비교하여 실제 클러스터와 동기화됩니다.

2. PR 기반 배포 예시

# PR 제출 후 CI/CD 파이프라인이 실행됩니다.
# CI 파이프라인에서는 테스트와 빌드를 자동으로 실행합니다.
# 이후 PR이 승인되면 Argo CD가 자동으로 배포를 진행합니다.

3️⃣ Git 브랜치 및 태그를 활용한 배포 전략

GitOps에서는 Git 브랜치태그를 활용하여 배포 전략을 세울 수 있습니다. 이를 통해 다양한 환경(개발, 테스트, 프로덕션)에서 배포를 제어할 수 있습니다.

1. 브랜치 기반 배포 전략

  • dev 브랜치: 개발 중인 기능을 포함하는 브랜치, 개발 환경에 배포
  • staging 브랜치: 테스트 환경에 배포되는 브랜치
  • main/master 브랜치: 프로덕션 환경에 배포되는 브랜치

2. 태그 기반 배포 전략

태그를 사용하여 버전을 명확히 관리하고, 특정 버전을 프로덕션 환경에 배포할 수 있습니다.

3. 브랜치 및 태그 예시

# 각 환경에 맞는 Git 브랜치를 사용하여 배포 환경을 구분합니다.
argocd app set my-app --repo https://github.com/my-org/my-app.git --branch dev

4️⃣ Git Repository 구조 설계 (Mono Repo vs Multi Repo)

GitOps에서는 Git 저장소 구조를 어떻게 설계하느냐가 중요합니다. 주로 Mono RepoMulti Repo 방식이 사용됩니다.

1. Mono Repo

  • 설명: 모든 애플리케이션과 인프라 코드를 하나의 Git 저장소에 관리하는 방식.
  • 장점: 모든 리소스를 하나의 저장소에서 관리하므로 코드의 일관성을 유지하기 용이.
  • 단점: 저장소가 커지면서 관리가 어려울 수 있음.

2. Multi Repo

  • 설명: 각 애플리케이션과 인프라 코드를 별도의 Git 저장소에서 관리하는 방식.
  • 장점: 각 애플리케이션의 리소스를 독립적으로 관리할 수 있어 유연함.
  • 단점: 저장소 간 의존성 관리가 어려울 수 있음.

3. Git Repository 구조 예시

  • Mono Repo: 모든 서비스 및 인프라 코드를 하나의 저장소에 관리
my-app-repo/
├── app1/
├── app2/
└── infrastructure/
  • Multi Repo: 각 서비스마다 별도의 Git 저장소 관리
app1-repo/
app2-repo/
infrastructure-repo/

5️⃣ GitOps 기반 CI/CD 파이프라인 구성

GitOps는 CI/CD 파이프라인과 결합하여 자동화된 배포 및 테스트 흐름을 만들어냅니다. GitOps 기반 CI/CD 파이프라인은 애플리케이션을 테스트하고 빌드한 후, Git에 반영된 변경 사항에 따라 자동으로 배포를 진행합니다.

1. CI 파이프라인

  • 테스트: 코드를 빌드하고, 유닛 테스트 및 통합 테스트를 실행
  • 빌드: 도커 이미지를 빌드하고 레지스트리에 푸시

2. CD 파이프라인

  • 배포: Git 저장소에서 자동으로 배포가 이루어집니다. Argo CD는 Git 저장소와 Kubernetes 클러스터 간의 상태를 동기화합니다.
  • 모니터링: 배포 후 애플리케이션 상태를 모니터링하고, 문제가 있을 경우 롤백

3. CI/CD 파이프라인 예시

# CI 파이프라인 (GitHub Actions 예시)
name: CI/CD Pipeline
on:
  push:
    branches:
      - main
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Build Docker image
        run: |
          docker build -t my-app .
          docker push my-app:latest
  deploy:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to Kubernetes using Argo CD
        run: |
          argocd app sync my-app
RSS Feed
마지막 수정일자