Kubernetes/Kubernetes Best Practices

[Scenario Playbook - 심화편 | Low Level #1] 기본적인 애플리케이션 배포 및 롤백 전략

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

 

쿠버네티스 환경에서 애플리케이션을 배포하고, 운영 중 문제가 발생했을 때 롤백하는 것은 필수적인 작업입니다.

이 글에서는 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
728x90