개발 창고/Server
핵심 리소스, Pod: 쿠버네티스 기본 단위 이해하기
로이제로
2025. 7. 19. 22:00
반응형
들어가며
쿠버네티스를 구성하는 리소스 중에서 가장 핵심적인 단위를 꼽으라면 Pod(파드)입니다.
“Pod는 컨테이너가 담긴 상자”라는 비유를 많이 들어보셨을 텐데요.
이 글에서는 그 상자가 정확히 어떤 구조로 생겼는지, 왜 필요한지, 그리고 어떻게 사용하는지를 예제와 함께 하나씩 풀어보겠습니다.
1. Pod란 무엇인가?
Pod는 하나 이상의 컨테이너를 감싸는 최소 실행 단위입니다.
- 쿠버네티스는 컨테이너를 직접 관리하지 않고, 항상 Pod 단위로 관리합니다.
- 하나의 Pod에는 보통 하나의 컨테이너만 포함하지만, 특별한 경우 여러 개의 컨테이너를 담기도 합니다.
- Pod 내의 컨테이너들은 같은 네트워크(IP, 포트)를 공유합니다.
2. 왜 Pod가 필요한가?
단순히 컨테이너를 돌리면 되지, 왜 Pod라는 개념이 따로 필요할까요?
이유 1: 관리 단위 추상화
- Pod는 쿠버네티스 입장에서 스케일링, 배포, 모니터링, 로깅 등의 대상이 됩니다.
- 컨테이너는 그저 Pod 내부의 실행 요소일 뿐, 쿠버네티스는 Pod 중심으로 행동합니다.
이유 2: Sidecar 패턴을 위한 구조
- 예를 들어 웹 서버 + 로그 수집기 같이 기능을 분리한 2개의 컨테이너를 같은 네트워크 안에서 실행하고 싶을 때 유용합니다.
3. Pod의 내부 구조
Pod 내부에는 다음과 같은 요소가 포함됩니다:
구성 요소 | 설명 |
---|---|
컨테이너 목록 | 실행될 애플리케이션 컨테이너 |
공유 네트워크 | Pod 전체에 하나의 IP 부여 |
공유 스토리지 | Volume을 통해 컨테이너 간 데이터 공유 |
메타데이터 | 라벨, 어노테이션, UID 등 |
상태 관리 | RestartPolicy, ReadinessProbe 등 |
예시 구조 (YAML):
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx-container
image: nginx:latest
ports:
- containerPort: 80
4. Pod 직접 생성해보기
아래 명령어로 단일 컨테이너를 담은 Pod를 생성할 수 있습니다:
kubectl run nginx-pod --image=nginx
확인:
kubectl get pods
kubectl describe pod nginx-pod
삭제:
kubectl delete pod nginx-pod
5. 단일 vs 멀티 컨테이너 Pod
단일 컨테이너 Pod 예시
대부분의 경우 이렇게 사용합니다:
spec:
containers:
- name: app
image: myapp:latest
멀티 컨테이너 Pod 예시 (sidecar)
spec:
containers:
- name: app
image: myapp
- name: log-agent
image: fluentd
- 두 컨테이너는 127.0.0.1 기반으로 서로 통신 가능
- 같은 디렉토리에 접근하려면 Volume 공유 필요
6. Pod의 상태 (Phase)
kubectl get pods
명령어로 볼 수 있는 주요 상태:
상태 | 의미 |
---|---|
Pending | 스케줄되었지만 아직 컨테이너 시작 전 |
Running | 정상 실행 중 |
Succeeded | 정상 종료됨 (Job의 경우) |
Failed | 비정상 종료됨 |
Unknown | 상태 확인 불가 |
7. Pod은 일회성 리소스
- Pod는 단일 생명주기를 가집니다. 즉, 죽으면 다시 살아나지 않습니다.
- 이를 보완하기 위해 ReplicaSet, Deployment 등의 상위 리소스를 활용하게 됩니다. (후속 포스트에서 다룸)
8. 예시: 실전 Pod YAML 만들기
아래는 직접 실행 가능한 YAML입니다:
apiVersion: v1
kind: Pod
metadata:
name: demo-pod
labels:
app: demo
spec:
containers:
- name: web
image: nginx
ports:
- containerPort: 80
저장 후:
kubectl apply -f demo-pod.yaml
확인:
kubectl get pods
9. Pod의 핵심 요약
항목 | 설명 |
---|---|
Pod이란? | 쿠버네티스의 최소 실행 단위 |
포함 내용 | 컨테이너, 네트워크, 볼륨, 메타데이터 |
단일 vs 멀티 컨테이너 | 대부분 단일, 필요시 사이드카 구조 사용 |
일회성 리소스 | 자체 복구 불가 → 상위 리소스 필요 |
생성 방식 | kubectl run , kubectl apply -f |
마무리
Pod는 쿠버네티스를 이해하기 위한 기본 중의 기본입니다.
하지만 이것이 끝은 아닙니다. Pod에 라벨을 붙이고, 데이터를 저장하고, 외부에서 접근하고, 건강 상태를 모니터링하는 다양한 기술들이 함께 필요합니다.
반응형