개발 창고/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에 라벨을 붙이고, 데이터를 저장하고, 외부에서 접근하고, 건강 상태를 모니터링하는 다양한 기술들이 함께 필요합니다.

반응형