쿠버네티스 환경에서는 배포 자동화가 필수적이며, 문제가 발생했을 때 빠르게 롤백할 수 있는 기능이 필요합니다.
이를 위해 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
✅ 배포 상태를 확인하고, 필요하면 즉시 롤백을 수행할 수 있음