쿠버네티스(Kubernetes)에서 가장 중요한 기본 단위는 **파드(Pod)**입니다. 파드는 하나 이상의 컨테이너를 실행하고 관리하는 최소 배포 단위이며, 쿠버네티스의 핵심 개념 중 하나입니다.
이 글에서는 파드의 개념, 구성 요소, 동작 방식, 관리 방법, 그리고 실전 예제까지 자세히 설명합니다.
📌 목차
- 쿠버네티스 파드(Pod)란?
- 파드의 주요 특징
- 파드의 구성 요소
- 단일 컨테이너 vs. 다중 컨테이너 파드
- 파드의 라이프사이클 및 동작 방식
- 파드 생성 및 관리 방법 (kubectl 사용)
- 파드의 네트워크 및 서비스 연동
- 파드 모니터링 및 문제 해결
- 결론
1. 쿠버네티스 파드(Pod)란?
**파드(Pod)**는 쿠버네티스에서 컨테이너를 실행하는 최소 배포 단위입니다. 하나의 파드는 하나 이상의 컨테이너를 포함할 수 있으며, 컨테이너 간 네트워크와 스토리지를 공유할 수 있습니다.
✅ 파드는 무엇을 해결하는가?
- 컨테이너 오케스트레이션을 쉽게 관리할 수 있도록 그룹화.
- 여러 컨테이너가 협업할 수 있도록 공유 네트워크 및 볼륨 제공.
- 하나의 단위로 배포, 스케일링, 관리가 가능.
2. 파드의 주요 특징
🔹 1) 하나 이상의 컨테이너를 실행 가능
- 파드는 단일 컨테이너로 구성될 수도 있고, 여러 컨테이너가 협력하여 동작할 수도 있음.
🔹 2) 자체 IP 주소 보유
- 각 파드는 클러스터 내부에서 고유한 IP 주소를 가짐.
- 같은 파드 내 컨테이너들은
localhost
로 서로 통신 가능.
🔹 3) 공유 저장소(Volume) 사용
- 파드 내 컨테이너들은 동일한 볼륨을 공유 가능하여 데이터 유지 가능.
🔹 4) 일시적인 존재 (Ephemeral)
- 파드는 영구적인 존재가 아님 (재시작될 경우 새로운 ID와 IP 할당).
- 지속적인 실행이 필요한 경우 디플로이먼트(Deployment) 또는 스테이트풀셋(StatefulSet) 사용.
3. 파드의 구성 요소
파드는 다음과 같은 요소로 구성됩니다.
구성 요소 | 설명 |
---|---|
컨테이너 | 실행되는 애플리케이션 컨테이너(Docker 등) |
네트워크 | 파드는 고유한 IP를 가지며, 같은 노드의 다른 파드와 격리됨 |
스토리지 (Volume) | 파드 내 컨테이너 간 데이터 공유 가능 |
메타데이터 | 파드의 이름, 네임스페이스, 레이블 등 관리 정보 포함 |
✅ YAML 예제 (단일 컨테이너 파드)
<yaml>apiVersion: v1
kind: Pod
metadata:
name: my-pod
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx
ports:
- containerPort: 80
4. 단일 컨테이너 vs. 다중 컨테이너 파드
🔹 단일 컨테이너 파드
- 대부분의 경우 하나의 컨테이너만 실행.
- 실행 프로세스가 독립적일 때 사용.
🔹 다중 컨테이너 파드
- Sidecar 패턴 (예: 로깅, 프록시 컨테이너 추가).
- Ambassador 패턴 (API 요청을 중계하는 역할).
- Adapter 패턴 (데이터 변환 및 수집).
✅ 다중 컨테이너 파드 예제
<yaml>apiVersion: v1
kind: Pod
metadata:
name: multi-container-pod
spec:
containers:
- name: app-container
image: my-app
- name: sidecar-container
image: logging-agent
5. 파드의 라이프사이클 및 동작 방식
파드는 다음과 같은 상태를 가질 수 있습니다.
상태 | 설명 |
---|---|
Pending | 컨테이너가 실행될 준비 중 |
Running | 컨테이너가 실행 중 |
Succeeded | 컨테이너 실행 완료 후 종료 |
Failed | 컨테이너가 비정상적으로 종료됨 |
Unknown | 네트워크 문제 등으로 상태 확인 불가 |
✅ 파드 상태 확인 명령어
<bash>kubectl get pods
kubectl describe pod my-pod
6. 파드 생성 및 관리 방법 (kubectl 사용)
🔹 파드 생성
<bash>kubectl apply -f my-pod.yaml
🔹 파드 목록 조회
<bash>kubectl get pods
🔹 파드 상세 정보 확인
<bash>kubectl describe pod my-pod
🔹 파드 삭제
<bash>kubectl delete pod my-pod
7. 파드의 네트워크 및 서비스 연동
파드는 클러스터 내에서 서로 독립된 네트워크 공간을 가지며, Service
를 통해 접근할 수 있습니다.
✅ 서비스(Service)로 파드 접근
<yaml>apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
<bash>kubectl apply -f my-service.yaml
8. 파드 모니터링 및 문제 해결
🔹 로그 확인
<bash>kubectl logs my-pod
🔹 실시간 터미널 접속
<bash>kubectl exec -it my-pod -- /bin/sh
🔹 이벤트 확인
<bash>kubectl get events
9. 결론
🎯 쿠버네티스 파드는 컨테이너 실행을 위한 기본 단위
- 단일 컨테이너 또는 다중 컨테이너 형태로 운영 가능.
- IP 주소를 갖고 있으며, 같은 파드 내에서는
localhost
로 통신 가능.
🛠 파드 관리 필수 요소
kubectl
명령어로 생성, 조회, 삭제 가능.- 지속 실행이 필요한 경우
Deployment
나StatefulSet
사용.
쿠버네티스에서 파드는 컨테이너를 실행하는 핵심 개념입니다. 이를 이해하고 활용하면, 효율적인 컨테이너 기반 애플리케이션을 구축할 수 있습니다. 🚀