Kubernetes/Kubernetes Basics

📌 Kubernetes CI/CD 파이프라인 최적화 (GitHub Actions, ArgoCD 심화)

ygtoken 2025. 3. 4. 12:12
728x90

 

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

 

기본적인 CI/CD 파이프라인을 사용하면 GitHub Actions + ArgoCD를 활용하여 애플리케이션을 배포할 수 있습니다.

하지만 실무에서는 CI/CD를 더욱 최적화하여 배포 속도를 높이고, 안전성을 강화하는 것이 중요합니다.

 

CI/CD 최적화가 필요한 이유

배포 속도 최적화 → 빌드 및 배포 시간을 단축

GitOps 기반 배포 안정성 강화 → Git 상태와 Kubernetes를 동기화

배포 승인 및 롤백 자동화 → 안전한 배포 및 빠른 복구 지원

다중 환경(dev, staging, prod) 배포 자동화

 

이 글에서는 GitHub Actions + ArgoCD를 활용하여 Kubernetes CI/CD 파이프라인을 더욱 최적화하는 방법을 다룹니다.

 


 

2️⃣ GitHub Actions 기반 CI/CD 파이프라인 최적화

 

📌 GitHub Actions를 활용하여 CI/CD를 더욱 효율적으로 구성할 수 있습니다.

 


 

✅ Step 1: GitHub Actions Workflow 설정

 

📌 GitHub Actions에서 환경별 배포를 관리하도록 설정합니다.

 

📌 .github/workflows/deploy.yaml

name: CI/CD Pipeline  # GitHub Actions Workflow 이름

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

jobs:
  build:
    runs-on: ubuntu-latest  # GitHub Actions에서 실행될 OS 환경
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v2  # GitHub 리포지토리 코드 체크아웃

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1  # Docker 빌드를 위한 환경 설정

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

      - name: Build and Push Docker Image
        run: |
          IMAGE_TAG=$(date +%Y%m%d%H%M%S)  # 현재 날짜/시간을 태그로 사용
          docker build -t myrepo/myapp:$IMAGE_TAG .  # Docker 이미지 빌드
          docker push myrepo/myapp:$IMAGE_TAG  # Docker Hub에 푸시

      - name: Update Kubernetes Manifests
        run: |
          sed -i "s|image: myrepo/myapp:.*|image: myrepo/myapp:$IMAGE_TAG|g" k8s/deployment.yaml  # 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 비밀번호

 

CI 단계에서 컨테이너 빌드를 자동화하고 Kubernetes 배포 파일을 업데이트하도록 설정함!

 


 

3️⃣ ArgoCD 고급 설정 및 운영 노하우

 

📌 ArgoCD를 활용하여 GitOps 기반 배포를 최적화할 수 있습니다.

 


 

✅ Step 1: ArgoCD ApplicationSet 활용

 

📌 ApplicationSet을 사용하면 다중 환경(dev, staging, prod) 배포를 자동화할 수 있습니다.

 

📌 applicationset.yaml

apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet  # ArgoCD에서 여러 애플리케이션을 관리하기 위한 ApplicationSet
metadata:
  name: my-app-set
spec:
  generators:  # 다중 환경 배포를 위한 제너레이터 설정
  - list:
      elements:
      - cluster: dev-cluster
        valuesFile: values-dev.yaml  # 개발 환경
      - cluster: staging-cluster
        valuesFile: values-staging.yaml  # 스테이징 환경
      - cluster: prod-cluster
        valuesFile: values-prod.yaml  # 운영 환경
  template:
    metadata:
      name: '{{cluster}}-myapp'
    spec:
      project: default
      source:
        repoURL: https://github.com/myrepo/myapp.git  # Git 리포지토리
        targetRevision: main
        path: k8s  # Kubernetes 매니페스트 경로
        helm:
          valueFiles:
          - '{{valuesFile}}'  # 환경별 values.yaml 적용
      destination:
        server: https://kubernetes.default.svc
        namespace: default  # 배포될 네임스페이스

 

📌 적용 명령어

kubectl apply -f applicationset.yaml

환경별 배포를 자동화하여 더욱 효율적인 운영 가능!

 


 

✅ Step 2: ArgoCD 자동 동기화 및 배포 승인 설정

 

📌 자동 동기화 적용

argocd app set myapp --sync-policy automated

📌 배포 승인 후 적용

argocd app sync myapp

배포 승인 프로세스를 추가하여 안정성 확보 가능!

 


 

✅ Step 3: 배포 실패 시 자동 롤백 설정

 

📌 ArgoCD 자동 롤백 설정

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: myapp
spec:
  syncPolicy:
    automated:
      selfHeal: true  # 배포 상태가 변경되면 자동으로 복구
      prune: true  # 불필요한 리소스 자동 삭제
    retry:
      limit: 3  # 최대 3번 재시도
      backoff:
        duration: 5s  # 재시도 간격

 

📌 적용 명령어

kubectl apply -f myapp-argocd.yaml

배포 실패 시 자동으로 이전 버전으로 롤백 가능!

 


 

4️⃣ CI/CD 배포 상태 알림 (Slack & Email)

 

📌 GitHub Actions & ArgoCD에서 배포 상태를 Slack이나 이메일로 전송할 수 있습니다.

 

📌 GitHub Actions에서 Slack 알림 추가

    - name: Notify Slack
      uses: rtCamp/action-slack-notify@v2
      env:
        SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
        SLACK_MESSAGE: "🚀 Deployment completed: my-app"

배포 완료 후 팀원들에게 즉시 알림 전송 가능!

 


 

📌 결론: Kubernetes CI/CD 최적화 요약

 

GitHub Actions에서 환경별 CI/CD 설정 (dev, staging, prod)

ArgoCD ApplicationSet을 활용하여 다중 환경 배포 자동화

배포 승인 프로세스 추가 및 실패 시 자동 롤백 설정

Slack & Email 알림으로 배포 상태를 실시간 공유

 

🔥 CI/CD 파이프라인을 최적화하면 Kubernetes 배포를 더욱 안정적이고 자동화할 수 있습니다! 🚀

 

 

728x90