이전에 백엔드 서버 1개를 파드로 띄어보았다.
실제 서비스를 운영하다보면 트래픽이 증가해서 서버가 버벅거리는 경우 서버를 수평적 확장(서버의 개수를 늘리는 방식)을 통해 해결할 수 있다.
기존 방법으로 3개의 서버를 띄우려면 아래와 같이 작성해야한다.
apiVersion: v1
kind: Pod
metadata:
name: spring-pod-1
spec:
containers:
- name: spring-container
image: spring-server
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Pod
metadata:
name: spring-pod-2
spec:
containers:
- name: spring-container
image: spring-server
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Pod
metadata:
name: spring-pod-3
spec:
containers:
- name: spring-container
image: spring-server
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
3개의 서버를 띄우는데 성공했지만, 만약 100개의 서버를 띄워야하면 이렇게 매번 반복적인 코드를 작성해야하는 문제가 있다. 또한 트래픽은 계속해서 변하기 때문에 트래픽에 맞게 서버의 대수를 바꿀때도 불편하다.
이런 불편함을 해결해주는 쿠버네티스 기능이 디플로이먼트(Deployment)이다.

실제 디플로이먼트를 이용해서 위의 문제를 해결해보자
apiVersion: v1
kind: Pod
metadata:
name: spring-pod-1
spec:
containers:
- name: spring-container
image: spring-server
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Pod
metadata:
name: spring-pod-2
spec:
containers:
- name: spring-container
image: spring-server
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Pod
metadata:
name: spring-pod-3
spec:
containers:
- name: spring-container
image: spring-server
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
apiVersion: apps/v1
kind: Deployment
# Deployment 기본 정보
metadata:
name: spring-deployment # Deployment 이름
# Deployment 세부 정보
spec:
replicas: 3 # 생성할 Pod 개수
selector:
matchLabels:
app: backend-app # 아래에서 정의한 Pod 중 'app: backend-app' 라벨을 가진 Pod'
# 배포할 Pod 정의
template:
metadata:
labels: # 레이블
app: backend-app
spec:
containers:
- name: spring-container # 컨테이너 이름
image: spring-server # 컨테이너 이미지
imagePullPolicy: IfNotPresent # 로컬에서 이미지를 먼저 가져온다. 이미지가 없을 때만 pull
ports:
- containerPort: 8080 # 컨테이너에서 사용할 포트를 명시적으로 작성
kubectl delete pod spring-pod-1 spring-pod-2 spring-pod-3
kubectl get pods # 잘 삭제됐는 지 확인하기
kubectl apply -f spring-deployment.yaml



📌 백엔드 서버 3개를 디플로이먼트를 통해 띄우는데 성공했다. 실제 요청을 보낼 때는 각 서버에 균등하게 트랙픽이 분배되어야한다. 그런데 사용자가 균등하게 서버에 요청할 수 없기때문에 파드 앞단에 알아서 여러 파드에 균등하게 요청을 분배해줄 어떤것이 필요하다. 이를 쿠버네티스에서 서비스(Service)가 수행한다. 서비스는 다음 포스트에서 다룰 예정이다.