
디플로이먼트란 파드(Pod)를 묶음으로 쉽게 관리할 수 있는 쿠버네티스 리소스입니다.
현업에서는 서버를 작동할 때, 파드(Pod)를 수동으로 관리하지 않고, 쿠버네티스의 디플로이먼트를 활용해 파드를 자동으로 배포하고 관리합니다.
즉, 디플로이먼트는 파드를 효율적으로 배포하고 관리할 수 있는 도구입니다.
원하는 개수만큼 파드를 자동으로 생성할 수 있습니다.
파드가 비정상적으로 종료되면 디플로이먼트가 이를 감지하여 새로운 파드를 자동으로 생성해줍니다. 이를 통해 파드 수를 유지할 수 있습니다.
동일한 설정의 여러 파드에 대해 일괄적인 일시 중지, 삭제, 업데이트 등이 가능합니다.

디플로이먼트는 다음과 같은 계층 구조를 가집니다.
디플로이먼트 → 레플리카셋 → 파드
파드의 수, 템플릿(구성 정보), 업데이트 정책 등을 관리합니다.
레플리카(복제본)를 그룹으로 묶어 관리하며, 디플로이먼트의 명령에 따라 파드 수를 조정합니다.
레플리카(Replica): 복제본
레플리카셋(ReplicaSet): 복제본끼리의 묶음
레플리카란 복제된 파드를 의미하며, 서버 증설과 같은 개념으로 이해할 수 있습니다. 쿠버네티스에서 레플리카는 하나의 애플리케이션을 여러 파드로 복제하여 실행하는 방식을 의미합니다.
레플리카는 실제로 애플리케이션의 서버 인스턴스를 증설하는 효과를 냅니다.
디플로이먼트를 사용하면 서버를 몇 개 증설할지 쉽게 정의할 수 있습니다.
레플리카셋이 생성하고 관리하는 기본 실행 단위입니다.
실제 운영 환경에서는 트래픽 증가로 인해 서버가 과부하 상태가 되는 경우가 발생합니다.
이러한 문제를 해결하기 위해 서버를 수평적 확장(서버의 개수를 늘리는 방식)하여 트래픽을 분산 처리할 수 있습니다. 이와 관련하여 이번에는 디플로이먼트를 활용해 스프링 부트 백엔드 서버를 3대로 늘리는 방법을 알아보겠습니다.
파드(Pod)를 사용하는 기존 매니페스트 파일의 문제점:
아래처럼 디플로이먼트를 활용한 매니페스트 파일(Spring-deployment.yaml)을 작성합니다.
apiVersion: apps/v1
kind: Deployment
# Deployment 기본 정보
metadata:
name: spring-deployment # Deployment 이름
# Deployment 세부 정보
spec:
replicas: 3 # 생성할 Pod의 복제본 개수
selector:
matchLabels:
app: backend-app # 'app: backend-app' 라벨을 가진 Pod를 관리
template:
metadata:
labels:
app: backend-app # 생성된 Pod에 추가될 라벨
spec:
containers:
- name: spring-container # 컨테이너 이름
image: spring-server # 컨테이너 이미지
imagePullPolicy: IfNotPresent # 로컬에서 먼저 이미지를 찾고, 없으면 레지스트리에서 가져옴
ports:
- containerPort: 8080 # 컨테이너가 사용하는 포트(문서화)
기존에 생성된 Pod를 삭제합니다.
$ kubectl delete pod spring-pod-1 spring-pod-2 spring-pod-3
$ kubectl get pods # 삭제 결과 확인
새로운 매니페스트 파일을 기반으로 디플로이먼트를 생성합니다.
$ kubectl apply -f spring-deployment.yaml

디플로이먼트, 레플리카셋 그리고 Pod가 잘 생성되었는지 확인합니다.
$ kubectl get deployment # 디플로이먼트 확인
$ kubectl get replicaset # 레플리카셋 확인
$ kubectl get pods # 생성된 Pod 확인

위 과정을 통해 백엔드 서버 3개를 각각의 Pod에 띄웠습니다. 하지만 실제로 요청을 보낼 때 각 서버에 균등하게 트래픽을 분배해야 합니다. 사용자가 직접 서버를 골라 요청을 보낼 수 없으므로, 이를 해결하기 위해 쿠버네티스의 서비스(Service)가 필요합니다.
서비스(Service)는 트래픽을 여러 파드(Pod)에 균등하게 분배해주는 역할을 합니다.