쿠버네티스 환경에서 애플리케이션을 배포하고, 운영 중 문제가 발생했을 때 롤백하는 것은 필수적인 작업입니다.
이 글에서는 Deployment를 활용한 애플리케이션 배포 및 롤백 전략을 다루며, 실무에서 자주 발생하는 시나리오를 기반으로 해결 방법을 제시합니다.
📌 글에서 다루는 상황들
1️⃣ Deployment를 활용한 애플리케이션 배포
2️⃣ 새로운 버전으로 업데이트 및 롤백 수행
3️⃣ 배포 중 오류 발생 시 롤백 및 배포 전략 선택
각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.
1️⃣ Deployment를 활용한 애플리케이션 배포
❓ 문제 상황
운영팀에서 애플리케이션을 처음으로 쿠버네티스에 배포하려고 합니다.
Nginx 웹 서버를 Pod으로 실행하는 기본적인 Deployment를 생성해야 합니다.
• Deployment 이름: nginx-deployment
• Pod 레플리카 개수: 3개
• 컨테이너 이미지: nginx:1.19.10
• 포트: 80
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. Deployment를 생성하여 애플리케이션을 배포합니다.
2. kubectl을 사용하여 배포된 Pod 상태를 확인합니다.
✅ 정답 Manifest (Nginx Deployment 생성)
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment # Deployment 이름
spec:
replicas: 3 # Pod 개수
selector:
matchLabels:
app: nginx # Pod 선택을 위한 레이블
template:
metadata:
labels:
app: nginx # Pod에 할당될 레이블
spec:
containers:
- name: nginx
image: nginx:1.19.10 # 컨테이너 이미지
ports:
- containerPort: 80 # 컨테이너에서 사용할 포트
📌 적용 후 예상 결과 값
1. Deployment가 정상적으로 생성되었는지 확인
kubectl get deployments
💡 예상 출력 값
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 5s
2. 배포된 Pod 목록 확인
kubectl get pods -l app=nginx
💡 예상 출력 값
NAME READY STATUS RESTARTS AGE
nginx-deployment-74f6d7b6f5-bf7pz 1/1 Running 0 5s
nginx-deployment-74f6d7b6f5-lx8qw 1/1 Running 0 5s
nginx-deployment-74f6d7b6f5-mn9tk 1/1 Running 0 5s
2️⃣ 새로운 버전으로 업데이트 및 롤백 수행
❓ 문제 상황
운영팀에서 Nginx의 새로운 버전(1.21.1)으로 업데이트하려고 합니다.
하지만 배포 후 문제가 발생할 가능성이 있어, 이전 버전(1.19.10)으로 빠르게 롤백할 수 있도록 설정해야 합니다.
• 업데이트할 Nginx 버전: 1.21.1
• 문제가 발생하면 이전 버전(1.19.10)으로 롤백해야 함
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. kubectl set image 명령어를 사용하여 Deployment를 새로운 이미지로 업데이트합니다.
2. 배포 상태를 확인하고, 문제가 발생하면 롤백을 수행합니다.
✅ 정답 Manifest (Nginx 버전 업데이트 및 롤백)
🔹 Nginx 버전 업데이트
kubectl set image deployment/nginx-deployment nginx=nginx:1.21.1
🔹 배포 상태 확인
kubectl rollout status deployment/nginx-deployment
💡 예상 출력 값
deployment "nginx-deployment" successfully rolled out
🔹 롤백 수행 (문제 발생 시)
kubectl rollout undo deployment/nginx-deployment
💡 예상 출력 값
deployment "nginx-deployment" rolled back
3️⃣ 배포 중 오류 발생 시 롤백 및 배포 전략 선택
❓ 문제 상황
운영팀에서 잘못된 컨테이너 이미지를 배포하여 애플리케이션이 정상적으로 실행되지 않는 문제가 발생했습니다.
이러한 경우 자동 롤백이 필요하거나, 배포 전략을 조정하여 영향을 최소화해야 합니다.
• 잘못된 이미지 (nginx:invalid ) 배포 시 Pod이 CrashLoopBackOff 상태가 됨
• 배포 중 문제가 발생하면 자동으로 롤백하도록 설정해야 함
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. kubectl rollout pause를 사용하여 배포를 중단하고 문제를 분석합니다.
2. 배포 전략을 설정하여 무중단 배포를 보장합니다.
3. 배포가 실패하면 자동 롤백되도록 설정합니다.
✅ 정답 Manifest (배포 전략 추가 및 자동 롤백 설정)
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
strategy:
type: RollingUpdate # 롤링 업데이트 방식 적용
rollingUpdate:
maxUnavailable: 1 # 최대 1개의 Pod이 비활성 상태 가능
maxSurge: 1 # 새로운 Pod을 1개씩 추가
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.19.10
ports:
- containerPort: 80
🔹 배포 중 오류 발생 시 자동 롤백 설정
kubectl apply -f nginx-deployment.yaml
kubectl rollout status deployment/nginx-deployment
💡 예상 출력 값
error: deployment "nginx-deployment" has failed progressing
🔹 자동 롤백 수행
kubectl rollout undo deployment/nginx-deployment
💡 예상 출력 값
deployment "nginx-deployment" rolled back