Kubernetes/Kubernetes Best Practices

[Scenario Playbook Ep.6] 🚀 Deployment 편 #1 | 배포 전략 및 롤링 업데이트

ygtoken 2025. 3. 15. 13:37
728x90

 

 

쿠버네티스에서 Deployment는 애플리케이션의 배포 및 관리를 담당하는 핵심 리소스입니다.

이번 글에서는 Deployment를 활용한 배포 전략과 롤링 업데이트 방식을 다룹니다.

 


📌 글에서 다루는 상황들

 

1️⃣ 기본적인 Deployment 배포

2️⃣ 롤링 업데이트 전략 적용

 

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

 


1️⃣ 기본적인 Deployment 배포

 

📍 상황 설명

 

운영팀에서 웹 애플리케이션을 안정적으로 배포할 수 있도록 Deployment를 활용하려 합니다.

이 애플리케이션은 여러 개의 Replica(복제본)를 실행해야 하며, 트래픽을 분산시켜야 합니다.

Deployment의 이름은 web-deployment이어야 합니다.

nginx:latest 이미지를 사용하여 웹 서버를 실행해야 합니다.

3개의 Replica를 생성하여 부하를 분산시켜야 합니다.

 


🛠️ 해결 방법

 

1. Deployment를 생성하고 여러 개의 Replica를 설정해야 합니다.

spec.replicas를 사용하여 원하는 개수(3개) 설정

2. Pod이 동일한 애플리케이션을 실행하도록 정의해야 합니다.

spec.template.spec.containers에 Nginx 컨테이너를 설정

 


✅ 정답 Manifest (기본 Deployment 배포)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deployment  # Deployment의 이름
spec:
  replicas: 3  # 실행할 Pod 개수
  selector:
    matchLabels:
      app: web  # 이 레이블이 있는 Pod을 관리
  template:
    metadata:
      labels:
        app: web  # Pod 레이블 설정
    spec:
      containers:
      - name: nginx
        image: nginx:latest  # Nginx 웹 서버 컨테이너
        ports:
        - containerPort: 80  # 80번 포트에서 서비스 제공

 

 


📌 적용 후 예상 결과 값

 

1. Deployment 생성 확인

kubectl get deployments

 

💡 예상 출력 값

NAME              READY   UP-TO-DATE   AVAILABLE   AGE
web-deployment    3/3     3            3          5s

 

2. Pod 상태 확인

kubectl get pods -l app=web

 

💡 예상 출력 값

NAME                              READY   STATUS    RESTARTS   AGE
web-deployment-5d9f8bff8c-abc12   1/1     Running   0          5s
web-deployment-5d9f8bff8c-def34   1/1     Running   0          5s
web-deployment-5d9f8bff8c-ghi56   1/1     Running   0          5s

 

 


2️⃣ 롤링 업데이트 전략 적용

 

📍 상황 설명

 

운영 중인 애플리케이션의 새로운 버전을 무중단으로 배포해야 합니다.

이를 위해 롤링 업데이트(Rolling Update) 전략을 적용해야 합니다.

Deployment의 이름은 web-deployment이어야 합니다.

기존 nginx:latest 이미지를 nginx:1.21.6으로 업데이트해야 합니다.

무중단 배포를 보장하기 위해 최대 1개의 Pod만 다운되고, 2개의 새로운 Pod이 동시에 배포되도록 설정해야 합니다.

 


🛠️ 해결 방법

 

1. Deployment의 업데이트 전략을 정의해야 합니다.

strategy.typeRollingUpdate로 설정

maxUnavailable을 1로 설정하여 최대 1개의 Pod만 다운되도록 제한

maxSurge를 2로 설정하여 동시에 2개의 새로운 Pod을 배포하도록 구성

 


✅ 정답 Manifest (롤링 업데이트 적용된 Deployment)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deployment  # Deployment의 이름
spec:
  replicas: 3  # 실행할 Pod 개수
  strategy:
    type: RollingUpdate  # 롤링 업데이트 전략 적용
    rollingUpdate:
      maxUnavailable: 1  # 최대 1개의 Pod만 다운될 수 있음
      maxSurge: 2  # 최대 2개의 새로운 Pod을 동시에 배포 가능
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: nginx
        image: nginx:1.21.6  # 업데이트할 새 버전
        ports:
        - containerPort: 80

 

 


📌 적용 후 예상 결과 값

 

1. 롤링 업데이트 적용

kubectl apply -f web-deployment.yaml

 

💡 예상 출력 값

deployment.apps/web-deployment configured

 

2. 업데이트 진행 상태 확인

kubectl rollout status deployment web-deployment

 

💡 예상 출력 값

deployment "web-deployment" successfully rolled out

 

3. 새로운 버전의 Pod이 배포되었는지 확인

kubectl get pods -l app=web

 

💡 예상 출력 값

NAME                              READY   STATUS    RESTARTS   AGE
web-deployment-6f8d9bff8c-xyz12   1/1     Running   0          5s
web-deployment-6f8d9bff8c-xyz34   1/1     Running   0          5s
web-deployment-6f8d9bff8c-xyz56   1/1     Running   0          5s

 

728x90