🤖

본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.

⚠️

본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.

이미지 로딩 중...

GitOps 완벽 가이드 실전 배포 전략 - 슬라이드 1/13
A

AI Generated

2025. 10. 30. · 32 Views

GitOps 완벽 가이드 실전 배포 전략

GitOps는 Git을 단일 진실 공급원(Single Source of Truth)으로 사용하여 인프라와 애플리케이션을 선언적으로 관리하는 현대적인 배포 방법론입니다. Kubernetes 환경에서 자동화된 배포와 롤백을 구현하는 방법을 배워보세요.


카테고리:TypeScript
언어:TypeScript
메인 태그:#GitOps
서브 태그:
#Kubernetes#ArgoCD#Flux#CI/CD

들어가며

이 글에서는 GitOps 완벽 가이드 실전 배포 전략에 대해 상세히 알아보겠습니다. 총 12가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.

목차

  1. GitOps_기본_매니페스트
  2. Kustomize_환경별_설정
  3. ArgoCD_Application_정의
  4. 자동_동기화_정책
  5. Helm_차트_GitOps
  6. Progressive_Delivery_Rollout
  7. Git_기반_승인_프로세스
  8. 멀티_클러스터_배포
  9. 시크릿_암호화_관리
  10. Health_Check_커스터마이징
  11. Image_Updater_자동화
  12. 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

#GitOps#Kubernetes#ArgoCD#Flux#CI/CD#TypeScript

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.