- Published on
Kubernetes - Pod
쿠버네티스에서의 Pod
쿠버네티스(Kubernetes)에서 Pod(파드)는 가장 작은 배포 단위로, 하나 이상의 컨테이너를 포함하는 논리적인 그룹이다. 쿠버네티스에서 애플리케이션을 실행할 때 컨테이너를 직접 실행하는 것이 아니라 Pod을 통해 실행합니다.
Pod
- 컨테이너를 감싸는 추상화 계층
- 하나 이상의 컨테이너를 포함할 수 있음
- 동일한 네트워크 네임스페이스, 저장소 볼륨을 공유
- 쿠버네티스에서의 기본 배포 단위
- 컨테이너를 개별적으로 배포하는 것이 아니라 Pod단위로 배포
- Pod가 생성되면 특정 노드(Node)ㅇ에 스케줄링 됨
- 생명 주기가 관리됨
- Pod은 일시적인 존재이며, 죽으면 다시 생성되거나 제거됨
Pod 내부 구조
Pod는 여러 개의 컨테이너를 포함할 수 있으며, 내부적으로 다음과 같은 리소스를 공유한다.
- 네트워크
- 같은 Pod 내의 컨테이너들은 동일한 네트워크 네임스페이스를 공유
- 같은 localhost를 사용할 수 있음
- Pod 내 컨테이너 간에는 localhost:port로 통신 가능
- 스토리지
- Pod 내 컨테이너들이 공유할 수 있는 볼륨을 제공
- 컨테이너가 재시작되더라도 데이터를 유지할 수 있음
- emptyDir, hostPath, persistentVolumeClaim 등의 스토리지 타입을 사용할 수 있음
- 라이브사이클 & 상태관리
- Pod의 상태를 kubectlget pods 명령어로 확인 가능
- Pod가 비정상적인 상태가 되면 다시 시작되거나, 새로운 Pod로 생성될 수 있음(Deployment에서 관리하는 경우)
Pod 종류
쿠버네티스에서는 다양한 방식으로 Pod를 관리 할 수 있다.
- Standalone Pod - 독립 실행되는 Pod, 하지만 쿠버네티스에서는 잘 사용되지 않음
- ReplicaSet 관리 Pod - 동일한 Pod을 여러 개 복제하여 관리 (자동 복구 가능)
- Deployment 관리 Pod - 배포 및 롤링 업데이트를 지원하는 일반적인 Pod 배포 방식
- StatefulSet 관리 Pod - 상태를 유지해야 하는 애플리케이션 (예: 데이터베이스)
- DaemonSet관리 Pod - 모든 노드에서 하나씩 실행되는 Pod (예: 로그 수집, 모니터링 에이전트)
- Job / CronJob 관리 Pod - 특정 작업을 실행한 후 종료되는 일회성 또는 반복 실행되는 작업
간단한 Pod 생성 예제
# Example
# sample-nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: my-nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
kubectl apply -f sample-nginx-pod.yaml
Pod가 중요한 이유
- 컨테이너를 그룹화하여 관리할 수 있음
- 동일한 네트워크 및 볼륨을 공유하여 효율적인 애플리케이션 실행 가능
- 다른 쿠버네티스 오브젝트(Deployment, StatefulSet 등)의 기반이 됨
- 장애 발생 시 자동으로 새로운 Pod을 생성할 수 있도록 설계 가능
- Pod은 쿠버네티스에서 컨테이너를 실행하는 기본 단위
- 하나 이상의 컨테이너를 포함할 수 있으며 네트워크와 스토리지를 공유
- 직접 관리하기보다는 Deployment, ReplicaSet 등을 활용하여 운영하는 것이 일반적
실제 운영 환경에서는 단순 Pod이 아니라 Deployment, ReplicaSet 등을 사용하여 Pod을 관리하는 것이 일반적인가가가가가가각