설명 (Description): 쿠버네티스(Kubernetes)의 가장 기본이 되는 배포 단위인 파드(Pod)의 정의와 핵심 개념을 알아봅니다. 컨테이너와의 관계, 작동 방식, 생명주기 및 실제 YAML 예제를 통해 초급자도 쉽게 이해할 수 있도록 설명합니다.
TL;DR: 쿠버네티스 파드(Pod)는 클러스터에서 실행되는 가장 작은 배포 단위입니다. 파드는 하나 이상의 컨테이너 그룹을 감싸는 논리적인 호스트 역할을 하며, 이 컨테이너들은 스토리지와 네트워크 같은 리소스를 공유합니다. 일반적으로 파드 하나에 컨테이너 하나를 실행하는 모델이 가장 흔하지만, 밀접하게 연관된 프로세스를 위해 여러 컨테이너를 함께 실행할 수도 있습니다. 파드는 컨트롤러(예: Deployment)에 의해 관리되며, 자체적으로 복구 기능이 없어 일시적인(ephemeral) 존재로 간주됩니다.
H2: 쿠버네티스 파드(Pod)의 정의와 역할
쿠버네티스 환경에서 파드(Pod)는 생성하고 관리할 수 있는 가장 작은 컴퓨팅 단위입니다. 애플리케이션의 단일 인스턴스를 나타내며, 하나 이상의 컨테이너 그룹과 이들이 공유하는 리소스(스토리지, 네트워크)에 대한 명세를 포함합니다.
컨테이너 기술(예: Docker)이 애플리케이션을 격리하는 데 중점을 둔다면, 파드는 이 컨테이너들을 감싸고 쿠버네티스 클러스터 내에서 함께 관리하고 배포하는 단위를 제공합니다. 각 파드는 클러스터 내에서 고유한 IP 주소를 할당받으며, 파드 내의 모든 컨테이너는 이 IP 주소와 포트 공간을 공유합니다. 이 덕분에 같은 파드 안에 있는 컨테이너들은 localhost를 통해 서로 통신할 수 있습니다.
Why it matters: 파드는 쿠버네티스의 기본 블록입니다. 컨테이너를 직접 배포하는 것이 아니라 파드라는 추상화된 계층을 통해 배포함으로써, 쿠버네티스는 컨테이너들을 더 유연하고 확장성 있게 관리할 수 있습니다.
H2: 파드와 컨테이너: 무엇이 다른가?
파드와 컨테이너는 종종 혼동되지만, 명확한 차이가 있습니다.
구분 | 컨테이너 (Container) | 파드 (Pod) |
---|---|---|
정의 | 애플리케이션과 그 종속성을 패키징한 실행 가능한 소프트웨어 단위 | 하나 이상의 컨테이너 그룹과 공유 리소스를 캡슐화한 쿠버네티스의 최소 배포 단위 |
범위 | 단일 프로세스 실행 (권장) | 단일 또는 다중 프로세스(컨테이너) 실행 |
네트워크 | 자체 네트워크 스택을 가질 수 있음 | 파드 내 모든 컨테이너가 네트워크 네임스페이스(IP, 포트)를 공유 |
스토리지 | 독립적이지만, 외부 볼륨 마운트 가능 | 파드 내 모든 컨테이너가 동일한 스토리지 볼륨을 공유 가능 |
생성 주체 | 컨테이너 런타임 (예: Docker) | 쿠버네티스 컨트롤 플레인 |
가장 핵심적인 차이는 '공유'와 '관리 단위'에 있습니다. 컨테이너는 개별적으로 격리된 환경이지만, 파드는 이 격리 수준을 한 단계 낮춰 컨테이너들이 특정 리소스를 공유하며 하나의 단위처럼 동작하게 만듭니다.
H3: 단일 컨테이너 파드 vs. 다중 컨테이너 파드
- 단일 컨테이너 파드: 가장 일반적인 사용 사례입니다. 파드가 단일 컨테이너를 위한 '래퍼(wrapper)' 역할을 하며, 쿠버네티스의 스케일링과 관리 기능을 활용하기 위해 이 모델을 사용합니다.
- 다중 컨테이너 파드: 두 개 이상의 컨테이너가 하나의 파드에서 실행되는 경우입니다. 이 컨테이너들은 매우 밀접하게 연결되어 함께 실행되어야 할 때 사용됩니다. 대표적인 예로 메인 애플리케이션 컨테이너의 로그를 수집하여 전달하는 '사이드카(Sidecar)' 컨테이너 패턴이 있습니다.
Why it matters: 파드는 컨테이너를 직접 다루는 대신, 애플리케이션의 논리적 단위를 기준으로 배포 모델을 설계할 수 있게 해줍니다. 이를 통해 마이크로서비스 아키텍처에서 서비스 간의 결합도를 낮추고 유연성을 높일 수 있습니다.
H2: 파드의 생명주기 (Pod Lifecycle)
파드는 영구적이지 않고, 생성부터 소멸까지 명확한 생명주기를 가집니다. 파드의 상태는 주로 5가지 단계(Phase)로 요약할 수 있습니다.
- Pending (대기): 파드 생성이 쿠버네티스 클러스터에 의해 승인되었지만, 아직 하나 이상의 컨테이너가 생성되지 않은 상태입니다. 보통 스케줄링 대기 중이거나 컨테이너 이미지를 다운로드하는 시간에 이 상태에 머뭅니다.
- Running (실행 중): 파드가 노드에 성공적으로 할당되었고, 모든 컨테이너가 생성되었습니다. 최소 하나 이상의 컨테이너가 실행 중이거나, 시작 또는 재시작 과정에 있습니다.
- Succeeded (성공): 파드 내의 모든 컨테이너가 성공적으로 실행을 마치고 종료된 상태입니다. 이 상태의 파드는 재시작되지 않습니다. 주로 배치(Batch) 작업이나 잡(Job)에서 볼 수 있습니다.
- Failed (실패): 파드 내 모든 컨테이너가 종료되었고, 그중 최소 하나 이상의 컨테이너가 실패(non-zero exit code로 종료)한 상태입니다.
- Unknown (알 수 없음): 파드의 상태를 확인할 수 없는 경우입니다. 보통 파드가 실행 중인 노드와의 통신 문제로 인해 발생합니다.
Why it matters: 파드의 생명주기를 이해하는 것은 애플리케이션의 상태를 모니터링하고 문제를 진단(디버깅)하는 데 필수적입니다. kubectl describe pod
명령어를 통해 파드의 현재 상태와 이벤트를 상세히 확인할 수 있습니다.
H2: 파드 생성을 위한 기본 YAML 예제
쿠버네티스에서는 보통 명령형 커맨드보다 선언적인 YAML 파일을 사용하여 리소스를 관리합니다. 다음은 NGINX 웹서버 컨테이너 하나를 실행하는 가장 간단한 파드의 YAML 정의 예시입니다.
YAML
# pod-definition.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod-example
labels:
app: web
spec:
containers:
- name: nginx-container
image: nginx:1.25
ports:
- containerPort: 80
- apiVersion: 이 오브젝트를 생성하기 위해 사용하는 쿠버네티스 API 버전을 명시합니다. 파드는 v1에 속합니다.
- kind: 생성하려는 리소스의 종류를 명시합니다. 여기서는 Pod입니다.
- metadata: 이름(name), 레이블(labels) 등 리소스를 식별하기 위한 데이터입니다.
- spec: 파드의 원하는 상태(desired state)를 정의하는 핵심 부분입니다.
- containers: 파드에서 실행할 컨테이너 목록을 정의합니다. 컨테이너의 이름, 사용할 이미지, 개방할 포트 등을 지정합니다.
이 YAML 파일을 pod-definition.yaml로 저장한 후, 다음 명령어로 클러스터에 파드를 생성할 수 있습니다.
Bash
kubectl apply -f pod-definition.yaml
Why it matters: YAML은 쿠버네티스 오브젝트의 '설계도'와 같습니다. 코드로서 인프라(Infrastructure as Code)를 관리할 수 있게 해주어, 배포의 일관성과 재현성을 보장하고 버전 관리를 용이하게 합니다.
H2: 결론
쿠버네티스 파드는 컨테이너화된 애플리케이션을 배포하고 관리하기 위한 가장 근본적인 구성 요소입니다. 컨테이너를 직접 다루는 대신 파드라는 추상화 계층을 도입함으로써, 쿠버네티스는 공유 리소스 관리, 스케일링, 고가용성 확보 등 복잡한 오케스트레이션 작업을 효과적으로 수행합니다. 초급 개발자나 운영자라면 파드의 개념과 생명주기를 명확히 이해하는 것이 쿠버네티스 생태계를 탐험하는 첫걸음이 될 것입니다.
References:
- 파드 (Pod) | Kubernetes Documentation | 2025-08-11 | https://kubernetes.io/ko/docs/concepts/workloads/pods/
- Understanding Pod Lifecycle in Kubernetes | Baeldung on Ops | 2024-01-07 | https://www.baeldung.com/ops/kubernetes-pod-lifecycle
- 파드와 컨테이너: 주요 차이점은 무엇인가요? | Couchbase Blog | N/A | https://www.couchbase.com/blog/ko/pod-vs-container/
- Kubernetes pod vs container: Multi-container pods and container communication | Mirantis | 2022-05-01 | https://www.mirantis.com/blog/kubernetes-pod-vs-container-multi-container-pods-and-container-communication/
- What is Kubernetes Pod? Explained With Practical Examples | DevOpsCube | N/A | https://devopscube.com/kubernetes-pod/