Kubernetes/Kubernetes Best Practices

[Scenario Playbook - 심화편 | Low Level #2] ReplicaSet을 활용한 애플리케이션 가용성 보장 및 롤링 업데이트

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

 

쿠버네티스에서 애플리케이션의 가용성을 보장하려면, Pod이 항상 원하는 개수만큼 실행되고 유지되어야 합니다.

이 글에서는 ReplicaSet을 활용하여 애플리케이션의 가용성을 유지하고, 롤링 업데이트를 적용하여 무중단 배포를 수행하는 방법을 다룹니다.

 


📌 글에서 다루는 상황들

1. ReplicaSet을 활용한 애플리케이션의 가용성 유지

2. Pod이 삭제되었을 때 자동으로 복구되도록 설정

3. 롤링 업데이트를 적용하여 무중단 배포 수행

 

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

 


1️⃣ ReplicaSet을 활용한 애플리케이션의 가용성 유지

 

❓ 문제 상황

 

운영팀에서 애플리케이션이 항상 3개의 Pod으로 실행되도록 유지해야 합니다.

특정 Pod이 장애로 인해 삭제되더라도, 자동으로 새로운 Pod이 생성되어 서비스 가용성이 유지되어야 합니다.

ReplicaSet 이름: web-replicaset

Pod 개수: 3개

컨테이너 이미지: nginx:1.21.1

포트: 80

 

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

 


🛠️ 해결 방법

 

1. ReplicaSet을 생성하여 항상 3개의 Pod이 유지되도록 설정합니다.

 

2. kubectl을 사용하여 Pod이 삭제되더라도 자동으로 복구되는지 확인합니다.

 


✅ 정답 Manifest (ReplicaSet 생성)

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: web-replicaset  # ReplicaSet 이름
spec:
  replicas: 3  # 유지할 Pod 개수
  selector:
    matchLabels:
      app: web  # Pod 선택 기준 레이블
  template:
    metadata:
      labels:
        app: web  # Pod에 할당될 레이블
    spec:
      containers:
      - name: nginx
        image: nginx:1.21.1  # 컨테이너 이미지
        ports:
        - containerPort: 80  # 컨테이너에서 사용할 포트

 

 


📌 적용 후 예상 결과 값

 

1. ReplicaSet이 정상적으로 생성되었는지 확인

kubectl get replicasets

 

💡 예상 출력 값

NAME              DESIRED   CURRENT   READY   AGE
web-replicaset    3         3         3       5s

 

2. 배포된 Pod 목록 확인

kubectl get pods -l app=web

 

💡 예상 출력 값

NAME                     READY   STATUS    RESTARTS   AGE
web-replicaset-rp7fd     1/1     Running   0          5s
web-replicaset-m2d8l     1/1     Running   0          5s
web-replicaset-k9c3w     1/1     Running   0          5s

 

 


2️⃣ Pod이 삭제되었을 때 자동으로 복구되도록 설정

 

❓ 문제 상황

 

운영팀에서 실수로 특정 Pod을 삭제했을 때, ReplicaSet이 새로운 Pod을 생성하여 자동으로 복구되는지 확인해야 합니다.

Pod이 삭제되더라도, ReplicaSet이 자동으로 새로운 Pod을 생성해야 합니다.

 

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

 


🛠️ 해결 방법

 

1. kubectl delete pod 명령어로 특정 Pod을 삭제합니다.

 

2. ReplicaSet이 자동으로 새로운 Pod을 생성하는지 확인합니다.

 


✅ Pod 삭제 및 자동 복구 확인

 

🔹 특정 Pod 삭제

kubectl delete pod web-replicaset-m2d8l

 

💡 예상 출력 값

pod "web-replicaset-m2d8l" deleted

 

🔹 새로운 Pod이 자동 생성되었는지 확인

kubectl get pods -l app=web

 

💡 예상 출력 값

NAME                     READY   STATUS    RESTARTS   AGE
web-replicaset-rp7fd     1/1     Running   0          2m
web-replicaset-k9c3w     1/1     Running   0          2m
web-replicaset-x1z2y     1/1     Running   0          5s  # 새로운 Pod 생성됨

 

 


3️⃣ 롤링 업데이트를 적용하여 무중단 배포 수행

 

❓ 문제 상황

 

운영팀에서 애플리케이션을 새로운 버전(1.23.0)으로 업데이트하려고 합니다.

Pod이 한꺼번에 종료되지 않고, 무중단 배포(Rolling Update) 방식으로 점진적으로 업데이트되도록 구성해야 합니다.

업데이트할 Nginx 버전: 1.23.0

Pod을 한 번에 모두 교체하지 않고, 한 개씩 새로운 버전으로 변경해야 함

 

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

 


🛠️ 해결 방법

 

1. kubectl set image 명령어를 사용하여 ReplicaSet의 컨테이너 이미지를 업데이트합니다.

 

2. 롤링 업데이트를 수행하고, 배포 상태를 모니터링합니다.

 


✅ 정답 Manifest (Rolling Update 적용)

 

🔹 Nginx 버전 업데이트

kubectl set image rs/web-replicaset nginx=nginx:1.23.0

 

🔹 배포 상태 확인

kubectl rollout status rs/web-replicaset

 

💡 예상 출력 값

replicaset "web-replicaset" successfully rolled out

 

🔹 업데이트 후 실행 중인 Pod 확인

kubectl get pods -l app=web

 

💡 예상 출력 값

NAME                     READY   STATUS    RESTARTS   AGE
web-replicaset-vp8fd     1/1     Running   0          10s  # 새로운 버전의 Pod
web-replicaset-xy2k3     1/1     Running   0          8s
web-replicaset-m3n5q     1/1     Running   0          5s
728x90