| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- Spring Container
- 서블릿 컨테이너
- dockerhub
- DLQ
- 페이징
- JdbcTemplate
- securitycontextholderfilter
- Web
- @ComponentScan
- Dead Letter Queue
- JPA
- MSA
- DI
- AWS
- Routing Key
- Spring Data JPA
- JWT
- JPQL
- 스프링 부트
- CORS
- kafka
- docker
- mybatis
- 컨테이너
- 지연 로딩
- 쿠버네티스
- @Transactional
- redis
- docker compose
- Spring
- Today
- Total
look-forest
파드(Pod)를 활용해 서버 띄워보기 본문
파드(Pod)란?
도커에서는 하나의 프로그램을 실행시키는 단위를 컨테이너라고 한다.
쿠버네티스에서는 하나의 프로그램을 실행시키는 단위를 파드(Pod)라고 한다.
일반적으로 하나의 파드가 하나의 (도커)컨테이너를 가진다.(여러 컨테이너 가질 수도 있긴하다)

쿠버네티스도 도커처럼 이미지를 기반으로 파드를 띄워 실행시킨다.

서버를 파드로 띄워보기
파드를 생성할 때, CLI를 활용하는 방법이 있고, yaml 파일을 활용하는 방법이 있다.
보통 현업에서는 일일이 CLI를 치지않고 yaml 파일을 활용하는 경우가 많다.
이러한 yaml 파일을 보고 매니페스트 파일(Manifest File)이라고 부른다.
매니페스트 파일이란, 쿠버네티스에서 다양한 리소스(파드, 서비스, 볼륨 등)를 생성하고 관리하기 위해 사용하는 파일이다.
(Docker로 치면 Dockerfile과 같은 역할)
1. yaml 파일 생성하기
apiVersion: v1 # Pod를 생성할 때는 v1이라고 기재한다. (공식 문서)
kind: Pod # Pod를 생성한다고 명시
metadata:
name: nginx-pod # Pod에 이름 붙이는 기능
spec:
containers:
- name: nginx-container # 생성할 컨테이너의 이름
image: nginx # 컨테이너를 생성할 때 사용할 Docker 이미지
ports:
- containerPort: 80 # 해당 컨테이너가 어떤 포트를 사용하는 지 명시적으로 표현
imagePullPolicy: IfNotPresent
- 주의) YAML 문법상 들여쓰기를 할 때 Tab을 사용하면 안 되고 반드시 띄어쓰기를 활용해야 한다.
- 이미지는 Dockerfile을 바탕으로 빌드하거나, 레지스트리(Dockerhub, ECR과 같은 원격 이미지 저장소)에서 가져온다.
- Image Pull Policy 설정을 안하면, 이미지의 태그가 lastest인 경우 Always, 아닌 경우 IfNotPresent로 설정된다.
- Always: 레지스트리에서 가져온다.
- IfNotPresent: 로컬에 없는 경우에만 레지스트리에서 가져온다.
- Never: 로컬에서만 이미지를 가져온다.
2. 매니페스트 파일을 기반으로 파드 띄우기(생성&실행)하기
$ kubectl apply -f nginx-pod.yaml # yaml 파일(f)에 적혀져있는 리소스(파드)를 생성
3. 파드가 잘 생성되었는지 확인
$ kubectl get pods # 파드(Pod) 조회
4. 포트포워딩으로 서버가 실행됐는 지 확인
방법1) 파드 내부로 들어가서 요청보내기
$ kubectl exec -it spring-pod -- bash
$ curl localhost:8080
방법2) 포트 포워딩 활용하기
- 기본적으로 파드 내부와 외부의 네트워크는 분리되어 있다.
$ kubectl port-forward pod/spring-pod 12345:8080

5. 파드 삭제하기
$ kubectl delete pod spring-pod
[예제] 백엔드(Spring Boot) 서버 3개 띄워보기
실제 서비스를 운영하다보면 트래픽이 증가해서 서버를 수평 확장(서버 개수를 늘리는 방식)을 한다.
이러한 상황을 가정해 springboot 서버를 3대로 늘려보자.
기존에 도커파일을 바탕으로 이미지를 빌드한 후 매니페스트 파일에 작성해두었을 것이다.
그 메니페스트 파일에 파드를 3개로 설정하면 된다. 복붙해서 이름만 다르게하면 된다.
apiVersion: v1
kind: Pod
metadata:
name: spring-pod-1
spec:
containers:
- name: spring-container
image: spring-server
ports:
- containerPort: 8080
imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Pod
metadata:
name: spring-pod-2
spec:
containers:
- name: spring-container
image: spring-server
ports:
- containerPort: 8080
imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Pod
metadata:
name: spring-pod-3
spec:
containers:
- name: spring-container
image: spring-server
ports:
- containerPort: 8080
imagePullPolicy: IfNotPresent
그리고 그 매니페스트 파일을 바탕으로 파드를 띄우면, 아래와 같이 3개의 파드가 생성된 것을 볼 수 있다.

그런데 이러한 방식으로는, 3개가 아니라 100대면 너무 불편할 것이다.
그리고 서비스를 운영하다보면트래픽은 시시각각 변하는데, 그럴 때마다 트래픽에 맞게 서버 대수를 조정하기가 불편할 것이다.
이러한 불편함을 해결해주는 기능이 디플로이먼트(Deployment)이다. 다음 편에 알아보자.
파드(Pod) 디버깅 하는 방법
1. 파드(Pod)가 정상적으로 실행되지 않았을 때 에러 메시지 확인
# kubectl describe pods [파드명]
$ kubectl describe pods nginx-pod # nginx-pod 파드의 세부 정보 조회

2. 파드(Pod)의 로그 확인
파드 내 컨테이너의 표준 출력 로그를 확인하여 애플리케이션 실행 중 문제를 볼 때 사용
# kubectl logs [파드명]
$ kubectl logs nginx-pod # 파드 로그 확인하기

3. 파드에 접속해서 확인
컨테이너 종류에 따라 bash가 아닌 sh이 설치되어 있을 수 있다.
# kubectl exec -it [파드명] -- bash
$ kubectl exec -it nginx-pod -- bash
$ kubectl exec -it nginx-pod -- sh
참고 자료 & 이미지 출처
비전공자도 이해할 수 있는 쿠버네티스 입문/실전
'Infra > Kubernetes' 카테고리의 다른 글
| AWS EC2에서 쿠버네티스를 활용해 서버 배포하기 (0) | 2026.02.02 |
|---|---|
| 볼륨(Volume)을 활용해 DB 띄워보기 (0) | 2026.02.01 |
| 컨피그맵(ConfigMap), 시크릿(Secret)을 활용해 환경변수 관리하기 (0) | 2026.01.31 |
| 디플로이먼트(Deployment), 서비스(Service)를 활용해 서버 띄워보기 (0) | 2026.01.28 |
| 쿠버네티스란? (0) | 2026.01.26 |