Kubernetes/Kubernetes Basics

📌 Kubernetes CI/CD 최적화: GitOps 운영 방식 이해하기

ygtoken 2025. 3. 3. 07:52
728x90

 

1️⃣ Kubernetes에서 CI/CD를 최적화해야 하는 이유?

 

Kubernetes에서 애플리케이션을 배포할 때, 일반적인 CI/CD 파이프라인을 사용하면

복잡한 YAML 파일 관리, 실수로 인한 잘못된 배포, 운영 환경의 비일관성 등의 문제가 발생할 수 있습니다.

 

GitOps를 사용하면 다음과 같은 이점이 있습니다.

배포 과정 자동화 → Git의 변경 사항이 Kubernetes 클러스터에 자동 반영

버전 관리 및 롤백 간편 → Git을 통해 모든 배포 히스토리 관리

배포 환경 일관성 유지 → 운영 환경과 Git 상태를 동기화

 

GitOps는 Kubernetes CI/CD를 최적화하는 가장 효과적인 방식입니다.

 


 

2️⃣ GitOps란?

 

📌 GitOps는 Git을 Kubernetes 배포의 단일 신뢰 원본(Single Source of Truth)으로 활용하는 운영 방식입니다.

📌 Git의 변경 사항이 자동으로 Kubernetes 클러스터에 적용되며, 배포 환경이 항상 일관성을 유지합니다.

 

📌 GitOps 기반 CI/CD 파이프라인 예시

개발자가 코드 변경 → Git PushCI/CD 시스템 (GitHub Actions, GitLab CI/CD)
   ⬇
컨테이너 빌드 & Docker Hub 업로드
   ⬇
GitOps 도구 (ArgoCD, Flux) → Kubernetes 자동 배포
   ⬇
Kubernetes 클러스터에서 새로운 버전 실행

GitOps를 사용하면 Git에서 모든 배포 상태를 관리하고 Kubernetes와 자동 동기화 가능!

 


 

3️⃣ GitOps를 구현하는 대표적인 도구

 

도구설명

ArgoCD Kubernetes 네이티브 GitOps 도구
Flux CNCF에서 지원하는 GitOps 도구
Jenkins X CI/CD 기능을 포함한 GitOps 도구

이제 ArgoCD를 활용하여 GitOps 기반 Kubernetes 배포를 구현해보겠습니다. 🚀

 


 

4️⃣ ArgoCD를 사용한 GitOps 환경 구축하기

 

📌 ArgoCD는 GitOps를 구현하기 위한 Kubernetes 네이티브 배포 도구입니다.

📌 Git에 저장된 Kubernetes 설정 파일을 자동으로 클러스터에 반영합니다.

 


 

✅ Step 1: ArgoCD 설치하기

 

📌 ArgoCD 네임스페이스 생성 및 설치

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

 

📌 ArgoCD 서버 확인

kubectl get pods -n argocd

ArgoCD가 정상적으로 실행되는지 확인!

 


 

✅ Step 2: ArgoCD 로그인 및 초기 설정

 

📌 ArgoCD CLI 설치 (MacOS)

brew install argocd

 

📌 ArgoCD 서버 포트 포워딩

kubectl port-forward svc/argocd-server -n argocd 8080:443

 

📌 ArgoCD 초기 관리자 비밀번호 확인

kubectl get secret -n argocd argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 --decode

이제 웹 UI (https://localhost:8080)에 접속하여 로그인 가능!

 


 

✅ Step 3: GitOps 애플리케이션 등록

 

ArgoCD를 사용하여 Git에 저장된 Kubernetes 애플리케이션을 자동으로 배포할 수 있습니다.

 

📌 ArgoCD CLI로 애플리케이션 생성

argocd app create myapp \
  --repo https://github.com/myrepo/myapp.git \
  --path k8s \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace default

 

📌 배포 동기화

argocd app sync myapp

Git에서 변경 사항이 발생하면 자동으로 Kubernetes에 적용됨!

 


 

✅ Step 4: Git 변경 사항 반영 및 자동 배포

 

이제 Git에 배포 파일을 변경하면 ArgoCD가 자동으로 Kubernetes에 적용합니다.

 

📌 GitOps 기반 배포 예제 (deployment.yaml 수정)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myrepo/myapp:v2  # 새로운 버전

 

📌 Git에 변경 사항 Push

git add .
git commit -m "배포 버전 업데이트"
git push origin main

Git에 변경 사항을 Push하면 자동으로 새로운 버전이 배포됨!

 


 

5️⃣ GitOps를 활용한 배포 전략

 

📌 GitOps는 Canary 배포, Blue-Green 배포 등의 전략과 함께 사용할 수 있습니다.

 

✅ Canary 배포 적용

 

📌 GitOps를 활용하여 Canary 배포를 자동화 가능

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-canary
spec:
  replicas: 1  # Canary 버전은 10%만 배포
  selector:
    matchLabels:
      app: myapp
      version: v2
  template:
    metadata:
      labels:
        app: myapp
        version: v2
    spec:
      containers:
      - name: myapp
        image: myrepo/myapp:v2

📌 트래픽을 조절하며 점진적 배포 가능!

 


 

6️⃣ GitOps 운영 자동화 (Webhook & Sync 설정)

 

ArgoCD는 Git 변경 사항을 자동으로 감지하여 배포할 수 있습니다.

 

📌 자동 동기화 설정

argocd app set myapp --sync-policy automated

 

📌 Webhook을 사용하여 GitHub 이벤트 기반 자동 배포

GitHub Webhook 설정
  - 이벤트: Push
  - 대상 URL: http://argocd-server.default.svc.cluster.local/api/webhook

GitOps 운영을 완전 자동화 가능!

 


 

📌 결론: GitOps 기반 Kubernetes 배포 전략 요약

 

ArgoCD를 활용하면 Git에서 Kubernetes 배포를 자동화 가능

Git 변경 사항을 기반으로 무중단 배포 가능

Canary, Blue-Green 배포 전략과 함께 활용 가능

GitHub Webhook과 함께 사용하면 완전 자동화 가능

 

🔥 GitOps를 도입하면 Kubernetes CI/CD를 더욱 안전하고 효과적으로 운영 가능! 🚀

 

 

728x90