Pod
개념
- Kubernetes에서 배포 가능한 가장 작은 단위
- 하나 이상의 컨테이너가 함께 실행되는 논리적 그룹
- Pod 내부의 컨테이너는 서로 밀접한 작업을 수행
- 동일한 환경(네트워크/스토리지)을 공유
특징
가장 작은 배포 단위
- Kubernetes에서 직접 실행 가능한 최소 객체이며, 모든 애플리케이션은 Pod 형태로 동작
하나 이상의 컨테이너 그룹
- Pod 안에는 하나의 메인 컨테이너 또는 여러 개의 보조 컨테이너(sidecar, init container)가 포함
네트워크 네임스페이스 공유
- Pod내부 컨테이너는 다음을 함께 사용
- 동일한 IP
- localhost 기반 통신
- Port 공간 공유 (포트 충돌 발생 가능)
스토리지 공유 가능
- Pod은 Volumes를 정읳할 수 있으며, 이를 컨테이너에 마운트하여 파일 시스템을 공유
휘발성 객체
- Pod은 재생성 되면 새로운 IP를 받으며 상태가 유지되지 않음 (상태 유지가 필요하면 StatelfulSet 사용)
상위 오브젝트에 의해 관리
- Pod 자체를 직접 생성할 수 있으나, 실제 운영 환경에서는 다음 컨트롤러가 Pod을 자동으로 생성/관리
- Deployment
- StatefulSet
- DaemonSet
구성 요소
apiVersion
kind
- 해당 pod의 metadata 정의
- name: pod의 이름을 정의
spec
- pod의 구성을 정의 (상세 스펙 정의)
- containers
- 파드에 포함될 컨테이너 정의
- name: 컨테이너 이름 정의
- image: 사용될 이미지를 정의
- volumeMounts: 컨테이너에 마운트할 볼륨을 정의
예시
apiVersion: v1
kind: Pod
metadata:
name: hello-pod
spec:
containers:
- name: hello-container
image: nginx
ports:
- containerPort: 8080
적용 명령
kubectl apply -f hello-pod.yaml
상태 확인
kubectl get pods
kubectl describe pod hello-pod
Pod 접근
kubectl port-forward pod/hello-pod 8080:80