Kubernetes/Kubernetes Basics

📌 Kubernetes CI/CD: GitOps로 자동 배포 환경 구축하기

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

 

1️⃣ Kubernetes에서 CI/CD가 필요한 이유?

 

컨테이너 기반 애플리케이션을 Kubernetes에 배포하려면 보통 다음과 같은 과정이 필요합니다.

1. 코드 작성 → 새로운 기능 개발

2. 빌드 & 테스트 → 컨테이너 이미지 생성 및 테스트

3. 이미지 배포 → Docker Registry(GitHub Container Registry, Docker Hub 등)로 Push

4. Kubernetes 적용kubectl apply 명령으로 Kubernetes에 배포

 

하지만 이 과정을 수동으로 수행하면 실수 발생 가능성이 높고, 배포 속도도 느려질 수 있습니다.

 

CI/CD 파이프라인을 구축하면 코드 변경 시 자동으로 배포할 수 있습니다!

GitOps를 활용하면 배포 과정이 더욱 안전하고 일관되게 유지됩니다!

 


 

2️⃣ CI/CD & GitOps란?

 

✅ CI/CD 개념 정리

 

📌 CI(Continuous Integration, 지속적 통합)

개발자가 코드를 변경할 때마다 자동으로 빌드 및 테스트 수행

코드가 병합될 때 자동으로 검증

 

📌 CD(Continuous Deployment/Delivery, 지속적 배포/전달)

코드가 테스트를 통과하면 자동으로 Kubernetes에 배포

배포를 수동 승인(Continuous Delivery) 또는 자동 배포(Continuous Deployment) 가능

 

CI/CD를 사용하면 변경 사항이 자동으로 테스트 & 배포됨!

✅ GitOps 개념 정리

 

📌 GitOps는 Git을 Kubernetes 배포의 단일 진실(source of truth)로 활용하는 방식입니다.

 

✅ 모든 Kubernetes 배포 설정을 Git에서 관리

✅ Git에 새로운 배포 버전이 올라가면 자동으로 Kubernetes에 반영

✅ 배포 히스토리가 Git에 남아 버전 관리와 롤백이 쉬움

 

📌 GitOps 기반 배포 과정

1. 개발자가 Git에 코드 변경 (Git Push)
   ⬇
2. CI/CD 시스템이 컨테이너 빌드 및 테스트
   ⬇
3. GitOps 도구(ArgoCD, Flux)가 Kubernetes에 자동 배포
   ⬇
4. Kubernetes 클러스터가 새로운 애플리케이션 배포

GitOps를 사용하면 Kubernetes 배포를 Git을 통해 자동으로 관리 가능!

 


 

3️⃣ Kubernetes에서 GitOps 기반 CI/CD 구축하기

 

GitOps 기반의 CI/CD 환경을 구축하기 위해 GitHub Actions + ArgoCD를 사용해보겠습니다.

 

📌 사용 도구

GitHub Actions → CI/CD 자동화 (코드 변경 시 컨테이너 빌드 & 배포)

ArgoCD → GitOps 방식으로 Kubernetes에 자동 배포

 


 

4️⃣ GitHub Actions를 활용한 CI/CD 구축


 

✅ Step 1: GitHub Actions 설정

 

📌 GitHub에서 .github/workflows/cicd.yaml 파일 생성

name: CI/CD Pipeline

on:
  push:
    branches:
      - main  # main 브랜치에 Push될 때 실행

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v2

      - name: Login to Docker Hub
        run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin

      - name: Build and Push Docker Image
        run: |
          IMAGE_TAG=$(date +%s)
          docker build -t myrepo/myapp:$IMAGE_TAG .
          docker push myrepo/myapp:$IMAGE_TAG

      - name: Update Kubernetes Deployment
        run: |
          sed -i "s|image: myrepo/myapp:.*|image: myrepo/myapp:$IMAGE_TAG|g" k8s/deployment.yaml
          git config --global user.email "github-actions@github.com"
          git config --global user.name "GitHub Actions"
          git commit -am "Updated deployment to version $IMAGE_TAG"
          git push

📌 GitHub Secrets 설정 (Settings → Secrets)

DOCKER_USERNAME: Docker Hub 사용자명

DOCKER_PASSWORD: Docker Hub 비밀번호

 

코드가 변경되면 자동으로 Docker 이미지 빌드 & Push!

 


 

5️⃣ ArgoCD를 사용하여 GitOps 배포 자동화

 


 

✅ Step 1: ArgoCD 설치

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

 

📌 ArgoCD CLI 설치

brew install argocd

 

📌 ArgoCD UI 접속

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

✅ 브라우저에서 https://localhost:8080 접속 후 로그인 (초기 비밀번호: kubectl get secrets -n argocd argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 --decode)

 


 

✅ Step 2: ArgoCD를 사용하여 GitOps 배포 설정

 

📌 ArgoCD에 애플리케이션 등록

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

✅ GitHub에 배포 파일이 업데이트되면 자동으로 Kubernetes에 반영됨!

 


 

6️⃣ GitOps 기반 CI/CD 동작 테스트

 

📌 코드 변경 후 Git Push

git add .
git commit -m "Update application"
git push origin main

 

📌 GitHub Actions 실행 확인

1. GitHub → “Actions” 탭에서 실행 상태 확인

2. Docker Hub에 새로운 컨테이너 이미지 생성 확인

3. ArgoCD UI에서 새로운 버전이 자동 배포되는지 확인

 

코드 변경 → 자동 빌드 & 배포 → Kubernetes 적용까지 자동화됨! 🚀

 


 

7️⃣ GitOps 기반 CI/CD를 활용한 운영 최적화

 

버전 관리 → 모든 배포 기록이 Git에 남아 롤백이 쉬움

자동화된 배포 → 사람이 kubectl apply 할 필요 없이 자동 배포

안정성 확보 → 잘못된 배포 시 Git을 기준으로 빠르게 복구 가능

 


 

📌 결론: Kubernetes에서 GitOps 기반 CI/CD 구축은 필수!

기능사용 도구

CI/CD 자동화 GitHub Actions
컨테이너 빌드 & 배포 Docker Hub
자동 Kubernetes 배포 ArgoCD
Git 기반 배포 관리 GitOps

🔥 GitOps를 활용하면 모든 배포가 Git을 통해 자동으로 관리됩니다!

🔥 Kubernetes 배포를 더 안전하고, 빠르고, 효율적으로 운영할 수 있습니다!

 

 

728x90