본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 10. 30. · 61 Views
GitOps 완벽 가이드 실전 배포 전략
GitOps는 Git을 단일 진실 공급원(Single Source of Truth)으로 사용하여 인프라와 애플리케이션을 선언적으로 관리하는 현대적인 배포 방법론입니다. Kubernetes 환경에서 자동화된 배포와 롤백을 구현하는 방법을 배워보세요.
들어가며
이 글에서는 GitOps 완벽 가이드 실전 배포 전략에 대해 상세히 알아보겠습니다. 총 12가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- GitOps_기본_매니페스트
- Kustomize_환경별_설정
- ArgoCD_Application_정의
- 자동_동기화_정책
- Helm_차트_GitOps
- Progressive_Delivery_Rollout
- Git_기반_승인_프로세스
- 멀티_클러스터_배포
- 시크릿_암호화_관리
- Health_Check_커스터마이징
- Image_Updater_자동화
- Flux_GitRepository_소스
1. GitOps 기본 매니페스트
개요
GitOps의 핵심은 선언적 매니페스트입니다. Git 저장소에 저장된 YAML 파일로 애플리케이션의 원하는 상태를 정의합니다.
코드 예제
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
template:
spec:
containers:
- name: app
image: myapp:v1.0.0
설명
Kubernetes Deployment 매니페스트로 애플리케이션의 원하는 상태(replica 수, 이미지 버전)를 선언적으로 정의합니다. Git에 커밋하면 자동으로 클러스터에 반영됩니다.
2. Kustomize 환경별 설정
개요
Kustomize를 사용하면 base 매니페스트를 재사용하고 환경별(dev, staging, prod)로 다른 설정을 오버레이할 수 있습니다.
코드 예제
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
replicas:
- name: my-app
count: 5
images:
- name: myapp
newTag: v2.0.0
설명
base 디렉토리의 공통 매니페스트를 참조하고, production 환경에서는 replica를 5개로, 이미지 태그를 v2.0.0으로 오버라이드합니다.
3. ArgoCD Application 정의
개요
ArgoCD Application 리소스는 Git 저장소와 Kubernetes 클러스터를 연결하여 자동 동기화를 설정합니다.
코드 예제
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
spec:
source:
repoURL: https://github.com/org/repo
path: k8s/prod
targetRevision: main
destination:
server: https://kubernetes.default.svc
namespace: production
설명
Git 저장소의 k8s/prod 경로를 모니터링하여 변경사항이 있으면 자동으로 production 네임스페이스에 배포합니다.
4. 자동 동기화 정책
개요
ArgoCD의 syncPolicy를 설정하면 Git 커밋 시 자동으로 배포하고, 필요시 리소스를 자동 생성하거나 정리할 수 있습니다.
코드 예제
spec:
syncPolicy:
automated:
prune: true
selfHeal: true
allowEmpty: false
syncOptions:
- CreateNamespace=true
retry:
limit: 5
backoff:
duration: 5s
설명
prune으로 삭제된 리소스 정리, selfHeal로 수동 변경 복구, retry로 실패 시 재시도를 자동화합니다. Git이 항상 진실 공급원이 됩니다.
5. Helm 차트 GitOps
개요
Helm 차트도 GitOps로 관리할 수 있습니다. values 파일을 Git에 저장하고 버전 관리합니다.
코드 예제
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
source:
chart: nginx-ingress
repoURL: https://charts.helm.sh/stable
targetRevision: 1.41.3
helm:
values: |
controller:
replicaCount: 3
설명
Helm 차트 저장소에서 nginx-ingress 차트를 가져오고, values를 오버라이드하여 replica를 3개로 설정합니다. values 변경은 Git으로 관리됩니다.
6. Progressive Delivery Rollout
개요
Argo Rollouts을 사용하면 카나리 배포, 블루-그린 배포 등 점진적 배포 전략을 선언적으로 구현할 수 있습니다.
코드 예제
apiVersion: argoproj.io/v1alpha1
kind: Rollout
spec:
strategy:
canary:
steps:
- setWeight: 20
- pause: {duration: 1m}
- setWeight: 50
- pause: {duration: 2m}
- setWeight: 100
설명
새 버전을 20% 트래픽부터 시작하여 1분 대기 후 50%, 다시 2분 대기 후 100%로 점진적으로 배포합니다. 문제 발생 시 자동 롤백 가능합니다.
7. Git 기반 승인 프로세스
개요
GitOps는 Pull Request를 통한 코드 리뷰와 승인 프로세스를 배포에 적용할 수 있습니다.
코드 예제
# .github/workflows/deploy.yaml
name: Deploy
on:
pull_request:
branches: [main]
paths: ['k8s/**']
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: kubectl apply --dry-run=client -f k8s/
설명
k8s/ 디렉토리 변경 시 PR에서 자동으로 매니페스트 유효성을 검증합니다. 승인 후 merge하면 ArgoCD가 자동 배포합니다.
8. 멀티 클러스터 배포
개요
ApplicationSet을 사용하면 여러 클러스터에 동일한 애플리케이션을 한 번에 배포할 수 있습니다.
코드 예제
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
spec:
generators:
- list:
elements:
- cluster: prod-us
url: https://k8s-us.example.com
- cluster: prod-eu
url: https://k8s-eu.example.com
template:
spec:
destination:
server: '{{url}}'
설명
prod-us와 prod-eu 두 클러스터에 동일한 애플리케이션을 자동으로 생성합니다. 새 클러스터 추가는 list에 항목만 추가하면 됩니다.
9. 시크릿 암호화 관리
개요
Sealed Secrets를 사용하면 암호화된 시크릿을 안전하게 Git에 저장할 수 있습니다.
코드 예제
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
name: my-secret
spec:
encryptedData:
password: AgBxK8n...encrypted...
apiKey: AgCyM2p...encrypted...
template:
type: Opaque
설명
kubeseal로 암호화된 시크릿은 Git에 안전하게 저장되며, 클러스터에 배포되면 Sealed Secrets 컨트롤러가 자동으로 복호화하여 일반 Secret을 생성합니다.
10. Health Check 커스터마이징
개요
ArgoCD의 health check를 커스터마이징하여 애플리케이션별 상태를 정확히 판단할 수 있습니다.
코드 예제
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
data:
resource.customizations: |
apps/Deployment:
health.lua: |
if obj.status.availableReplicas == obj.spec.replicas then
return {status = "Healthy"}
end
return {status = "Progressing"}
설명
Lua 스크립트로 Deployment의 상태를 판단합니다. 모든 replica가 available하면 Healthy, 아니면 Progressing으로 표시됩니다.
11. Image Updater 자동화
개요
ArgoCD Image Updater는 컨테이너 레지스트리를 모니터링하여 새 이미지 태그가 나오면 자동으로 매니페스트를 업데이트합니다.
코드 예제
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
argocd-image-updater.argoproj.io/image-list: myapp=myregistry/myapp
argocd-image-updater.argoproj.io/myapp.update-strategy: latest
argocd-image-updater.argoproj.io/write-back-method: git
spec:
template:
spec:
containers:
- name: app
image: myregistry/myapp:v1.0.0
설명
레지스트리에 새 latest 태그가 푸시되면 Image Updater가 자동으로 Git에 새 이미지 태그를 커밋하고, ArgoCD가 배포합니다. 완전 자동화된 CD 파이프라인입니다.
12. Flux GitRepository 소스
개요
Flux는 Git 저장소를 소스로 정의하고, Kustomization으로 배포를 관리합니다.
코드 예제
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: my-app
spec:
interval: 1m
url: https://github.com/org/repo
ref:
branch: main
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: my-app
spec:
interval: 5m
sourceRef:
kind: GitRepository
name: my-app
path: ./k8s
prune: true
설명
GitRepository는 1분마다 Git을 폴링하고, Kustomization은 5분마다 k8s/ 경로의 매니페스트를 클러스터에 동기화합니다. Git이 항상 우선입니다.
마치며
이번 글에서는 GitOps 완벽 가이드 실전 배포 전략에 대해 알아보았습니다. 총 12가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.
관련 태그
#GitOps #Kubernetes #ArgoCD #Flux #CI/CD
댓글 (0)
함께 보면 좋은 카드 뉴스
UX와 협업 패턴 완벽 가이드
AI 에이전트와 사용자 간의 효과적인 협업을 위한 UX 패턴을 다룹니다. 프롬프트 핸드오프부터 인터럽트 처리까지, 현대적인 에이전트 시스템 설계의 핵심을 배웁니다.
빌드와 배포 자동화 완벽 가이드
Flutter 앱 개발에서 GitHub Actions를 활용한 CI/CD 파이프라인 구축부터 앱 스토어 자동 배포까지, 초급 개발자도 쉽게 따라할 수 있는 빌드 자동화의 모든 것을 다룹니다.
CI/CD 파이프라인 통합 완벽 가이드
Jenkins, GitLab CI와 Ansible을 연동하여 자동화된 배포 파이프라인을 구축하는 방법을 다룹니다. Ansible Tower/AWX의 활용법과 실무에서 바로 적용 가능한 워크플로우 설계 패턴을 단계별로 설명합니다.
자가 치유 및 재시도 패턴 완벽 가이드
AI 에이전트와 분산 시스템에서 필수적인 자가 치유 패턴을 다룹니다. 에러 감지부터 서킷 브레이커까지, 시스템을 스스로 복구하는 탄력적인 코드 작성법을 배워봅니다.
Feedback Loops 컴파일러와 CI/CD 완벽 가이드
컴파일러 피드백 루프부터 CI/CD 파이프라인, 테스트 자동화, 자가 치유 빌드까지 현대 개발 워크플로우의 핵심을 다룹니다. 초급 개발자도 쉽게 이해할 수 있도록 실무 예제와 함께 설명합니다.