Kubernetes/Kubernetes Best Practices

[Scenario Playbook - 심화편 | Medium Level #10] CI/CD 파이프라인을 활용한 배포 자동화 및 롤백 전략

ygtoken 2025. 3. 16. 18:58
728x90

 

쿠버네티스 환경에서는 배포 자동화가 필수적이며, 문제가 발생했을 때 빠르게 롤백할 수 있는 기능이 필요합니다.

이를 위해 CI/CD 파이프라인을 활용하여 애플리케이션을 자동으로 배포하고, 문제가 발생하면 즉시 롤백하는 방법을 다룹니다.

 


📌 글에서 다루는 상황들

 

1. CI/CD 파이프라인을 활용하여 자동 배포 환경 구축

2. 배포 중 장애 발생 시 빠르게 롤백하는 전략

3. kubectl을 활용한 배포 상태 모니터링 및 롤백 실행 방법

 

각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.

 


1️⃣ CI/CD 파이프라인을 활용하여 자동 배포 환경 구축

 

❓ 문제 상황

 

운영팀에서 애플리케이션을 변경할 때마다 수동으로 배포하는 과정에서 많은 시간이 소요되고 있습니다.

이를 해결하기 위해 GitOps 기반의 CI/CD 파이프라인을 구축하여 코드 변경 사항이 자동으로 배포되도록 설정해야 합니다.

사용 도구: GitHub Actions / ArgoCD / Jenkins 중 선택

코드 변경 시 자동으로 Deployment 업데이트

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. CI/CD 파이프라인을 구축하여 코드 변경 시 자동 배포되도록 설정합니다.

 

2. ArgoCD 또는 GitHub Actions를 사용하여 배포를 자동화합니다.

 


✅ GitHub Actions 기반 자동 배포 설정 (예제)

 

🔹 .github/workflows/deploy.yml

name: Deploy to Kubernetes

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout repository
      uses: actions/checkout@v3

    - name: Set up kubectl
      uses: azure/setup-kubectl@v3
      with:
        version: v1.26.0

    - name: Deploy to Kubernetes
      run: |
        kubectl apply -f k8s/deployment.yaml
        kubectl apply -f k8s/service.yaml

이제 main 브랜치에 변경 사항이 push되면 자동으로 쿠버네티스에 배포됨

 


📌 적용 후 예상 결과 값

 

1. GitHub Actions 실행 상태 확인

kubectl get deployments

 

💡 예상 출력 값

NAME         READY   UP-TO-DATE   AVAILABLE   AGE
web-app      3/3     3            3          2m

코드가 변경되면 자동으로 배포가 수행됨

 


2️⃣ 배포 중 장애 발생 시 빠르게 롤백하는 전략

 

❓ 문제 상황

 

운영팀에서 새로운 배포 이후 애플리케이션에서 장애가 발생하여 서비스가 중단되었습니다.

빠르게 이전 버전으로 롤백하여 서비스 중단을 최소화해야 합니다.

현재 배포 버전: v2

롤백할 이전 버전: v1

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. kubectl rollout undo 명령어를 사용하여 이전 버전으로 롤백합니다.

 

2. GitOps를 활용하는 경우, Git에서 롤백(commit revert) 후 자동 배포가 이루어지도록 설정합니다.

 


✅ Deployment 롤백 명령어

 

🔹 롤백 실행

kubectl rollout undo deployment web-app

 

💡 예상 출력 값

deployment.apps/web-app rolled back

 

🔹 롤백 후 배포 상태 확인

kubectl get pods -l app=web-app

 

💡 예상 출력 값 (이전 버전으로 복구됨)

NAME                   READY   STATUS    RESTARTS   AGE
web-app-6df8c4d8d5-x1p9   1/1     Running   0          10s
web-app-6df8c4d8d5-q8r4   1/1     Running   0          10s

애플리케이션이 이전 버전으로 빠르게 롤백됨

 


3️⃣ kubectl을 활용한 배포 상태 모니터링 및 롤백 실행 방법

 

❓ 문제 상황

 

운영팀에서 배포가 진행 중인지, 성공적으로 완료되었는지 또는 롤백이 필요할지를 판단해야 합니다.

kubectl 명령어를 활용하여 현재 배포 상태를 모니터링하고, 필요 시 롤백을 실행해야 합니다.

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. kubectl rollout status 명령어를 사용하여 현재 배포 상태를 확인합니다.

 

2. kubectl describe deployment 명령어를 활용하여 배포 이벤트를 분석합니다.

 


✅ 배포 상태 모니터링 및 롤백 실행 명령어

 

🔹 현재 배포 상태 확인

kubectl rollout status deployment web-app

 

💡 예상 출력 값 (정상 배포 완료)

deployment "web-app" successfully rolled out

 

💡 예상 출력 값 (배포 실패)

error: deployment "web-app" exceeded its progress deadline

 

🔹 배포 상세 정보 확인

kubectl describe deployment web-app

 

💡 예상 출력 값

Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    ReplicaSetUpdated

배포 상태를 확인하고, 필요하면 즉시 롤백을 수행할 수 있음

728x90