본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 10. 30. · 32 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)
함께 보면 좋은 카드 뉴스
Istio 보안 완벽 가이드
마이크로서비스 환경에서 필수적인 Istio 보안 기능을 실무 중심으로 설명합니다. mTLS부터 인증, 인가까지 단계별로 학습하여 안전한 서비스 메시를 구축할 수 있습니다.
Istio 트래픽 관리 완벽 가이드
Istio의 트래픽 관리 기능을 마스터하는 완벽 가이드입니다. VirtualService와 DestinationRule을 활용한 라우팅부터 트래픽 분할, 헤더 기반 라우팅까지 실무에 필요한 모든 내용을 다룹니다.
Istio 설치와 구성 완벽 가이드
Kubernetes 환경에서 Istio 서비스 메시를 설치하고 구성하는 방법을 초급 개발자도 쉽게 이해할 수 있도록 실무 스토리와 비유로 풀어낸 가이드입니다. istioctl 설치부터 사이드카 주입까지 단계별로 학습합니다.
서비스 메시 완벽 가이드
마이크로서비스 간 통신을 안전하고 효율적으로 관리하는 서비스 메시의 핵심 개념부터 실전 도입까지, 초급 개발자를 위한 완벽한 입문서입니다. Istio와 Linkerd 비교, 사이드카 패턴, 실무 적용 노하우를 담았습니다.
Helm 마이크로서비스 패키징 완벽 가이드
Kubernetes 환경에서 마이크로서비스를 효율적으로 패키징하고 배포하는 Helm의 핵심 기능을 실무 중심으로 학습합니다. Chart 생성부터 릴리스 관리까지 체계적으로 다룹니다.