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 배포를 더 안전하고, 빠르고, 효율적으로 운영할 수 있습니다!
'Kubernetes > Kubernetes Basics' 카테고리의 다른 글
📌 Kubernetes 멀티 테넌시 환경 구축하기 (0) | 2025.03.03 |
---|---|
📌 Kubernetes 멀티 클러스터 운영 전략 알아보기 (0) | 2025.03.03 |
📌 Kubernetes 리소스 관리: Requests & Limits 설정하기 (0) | 2025.03.03 |
📌 Kubernetes HPA: 자동 확장으로 효율적인 리소스 관리하기 (0) | 2025.03.03 |
📌 Kubernetes 모니터링과 로깅: 운영 환경을 안정적으로 유지하기 (0) | 2025.03.03 |