본문 바로가기
클라우드/쿠버네티스

Kubernetes의 심장, 파드(Pod)의 모든 것: 개념부터 생명주기까지

by gasbugs 2025. 9. 2.

안녕하세요! 👋 오늘은 쿠버네티스(Kubernetes) 세계의 가장 기본적이면서도 핵심적인 단위, 바로 파드(Pod)에 대해 깊이 있게 알아보는 시간을 갖겠습니다.

 

쿠버네티스를 처음 접하면 '컨테이너는 알겠는데, 파드는 대체 왜 필요한 거지?'라는 의문을 갖게 되는데요. 오늘 이 글을 통해 파드의 개념부터 탄생과 소멸에 이르는 생명주기(Lifecycle)까지 완벽하게 이해하실 수 있도록 쉽고 상세하게 설명해 드릴게요! 😊

 

 


🤔 파드(Pod)란 무엇일까요? 완두콩 꼬투리를 떠올려보세요!

파드(Pod)는 단어 뜻 그대로 '완두콩 꼬투리'를 의미합니다. 꼬투리 안에 여러 개의 완두콩이 함께 들어있는 것처럼, 쿠버네티스의 파드는 하나 이상의 컨테이너 그룹을 나타내는 단위입니다.

"파드는 쿠버네티스에서 생성하고 관리할 수 있는 가장 작은 배포 단위입니다."

여기서 핵심은 컨테이너를 그냥 쓰지 않고 굳이 파드라는 단위로 감싸서 사용할까요? 그 이유는 파드 안에 속한 컨테이너들이 아주 특별한 관계를 맺기 때문입니다.

 

파드의 특징: 리소스 공유 🤝

파드 안에 있는 컨테이너들은 하나의 완벽한 애플리케이션처럼 함께 움직이며, 다음과 같은 자원을 공유합니다.

  • 🌐 네트워크(Network): 파드는 자신만의 고유한 IP 주소를 할당받습니다. 파드 안의 모든 컨테이너는 이 IP 주소와 포트 공간을 공유합니다. 덕분에 localhost를 통해 서로 통신할 수 있으며, 마치 한 컴퓨터 안에서 여러 프로세스가 통신하는 것과 같은 환경이 만들어집니다.
  • 💾 스토리지(Storage): 파드 내에서 정의된 스토리지 볼륨(Volume)은 모든 컨테이너가 함께 사용할 수 있습니다. 이를 통해 데이터를 공유하고 유지할 수 있습니다.

이러한 특징 덕분에 메인 애플리케이션 컨테이너와 그 기능을 보조하는 헬퍼(Helper) 컨테이너를 함께 묶어 관리하기 용이합니다. 예를 들어, 웹 서버 컨테이너 옆에 로그를 수집하는 사이드카(Sidecar) 컨테이너를 함께 배치하는 패턴이 대표적입니다.


Lifecycle of a Pod: 파드의 흥미진진한 일생 👶➡️ 

파드는 영원히 사는 존재가 아닙니다. 필요에 따라 생성되고, 역할을 다하면 사라지는 일시적인(ephemeral) 존재죠. 파드는 생성된 후 소멸하기까지 명확한 생명주기를 따릅니다.

파드의 전체적인 상태는 phase라는 필드를 통해 확인할 수 있습니다.

1. 파드의 주요 상태 (Pod Phases)

파드는 다음과 같은 5가지 주요 상태를 거칩니다.

  • Pending (보류) ⏳:
    • 파드가 쿠버네티스 클러스터에 생성되는 것을 승인했지만, 아직 하나 이상의 컨테이너가 준비되지 않은 상태입니다.
    • 스케줄러가 파드를 실행할 적절한 노드(Node)를 찾고 있거나, 노드에 컨테이너 이미지를 다운로드하는 시간을 포함합니다.
  • Running (실행 중) 🏃:
    • 파드가 특정 노드에 성공적으로 할당되었고, 파드 내의 모든 컨테이너가 생성된 상태입니다.
    • 적어도 하나의 컨테이너가 실행 중이거나, 시작 또는 재시작되고 있는 상태를 의미합니다. 'Running'이라고 해서 애플리케이션이 완벽하게 정상 동작한다는 의미는 아닙니다! (자세한 내용은 아래 Probes에서 설명할게요.)
  • Succeeded (성공) ✅:
    • 파드 안의 모든 컨테이너가 오류 없이 정상적으로 종료되었으며, 다시 시작되지 않을 상태입니다.
    • 주로 데이터 처리나 계산 같은 배치(Batch) 작업이 완료되었을 때 이 상태가 됩니다.
  • Failed (실패) ❌:
    • 파드 안의 모든 컨테이너가 종료되었는데, 그중 하나 이상이 오류로 인해 비정상적으로 종료된 상태입니다.
  • Unknown (알 수 없음) ❓:
    • 어떠한 이유로 파드의 상태를 확인할 수 없는 경우입니다. 보통 파드가 할당된 노드와의 통신 문제로 인해 발생합니다.

2. 컨테이너 상태와 프로브(Probes)

파드의 phase는 전체적인 상태를 보여주지만, 더 상세한 내부 동작을 이해하려면 컨테이너의 상태와 이를 점검하는 프로브(Probe)에 대해 알아야 합니다.

 

🔹 컨테이너 상태 (Container States)

  • Waiting: 컨테이너가 실행되기 위해 필요한 작업을 수행 중인 상태입니다. (예: 이미지 pull, 시크릿(Secret) 정보 적용)
  • Running: 컨테이너가 문제없이 실행 중인 상태입니다.
  • Terminated: 컨테이너가 실행을 시작했다가 완료되었거나, 특정 이유로 실패하여 종료된 상태입니다.

🔹 컨테이너 프로브 (Container Probes) 🩺 Kubelet(각 노드의 에이전트)은 프로브를 통해 컨테이너가 살아있는지, 요청을 처리할 준비가 되었는지 주기적으로 진단합니다.

  • Liveness Probe (생존 프로브): "살아있니?"
    • 컨테이너가 정상적으로 실행되고 있는지 확인합니다.
    • 만약 이 프로브에 실패하면, Kubelet은 해당 컨테이너를 비정상으로 간주하고 죽인 후, 파드의 재시작 정책(Restart Policy)에 따라 컨테이너를 다시 시작합니다. 데드락(deadlock) 상태처럼 애플리케이션은 실행 중이지만 응답이 없는 경우를 감지하여 자동 복구하는 데 매우 유용합니다.
  • Readiness Probe (준비 프로브): "일할 준비 됐니?"
    • 컨테이너가 요청을 받아 처리할 준비가 되었는지 확인합니다.
    • 만약 이 프로브에 실패하면, 쿠버네티스는 해당 파드를 서비스(Service)의 엔드포인트(Endpoint) 목록에서 일시적으로 제외합니다. 즉, 트래픽을 보내지 않습니다. 애플리케이션이 시작은 되었지만, 대용량 데이터를 로딩하거나 외부 서비스와 연결하는 데 시간이 걸릴 때 유용합니다. 준비가 완료되면 다시 서비스에 포함시켜 트래픽을 받기 시작합니다.
  • Startup Probe (시작 프로브): "시작은 완료됐니?"
    • 애플리케이션이 느리게 시작하는 경우를 위해 사용됩니다.
    • 이 프로브가 성공할 때까지 Liveness와 Readiness 프로브는 시작되지 않습니다. 만약 정해진 시간 내에 Startup 프로브가 성공하지 못하면, 컨테이너는 Liveness 프로브 실패와 동일하게 처리되어 재시작됩니다.

3. 파드의 종료 (Pod Termination) 👋

파드가 삭제될 때, 쿠버네티스는 애플리케이션이 정상적으로 작업을 마무리하고 연결을 종료할 수 있도록 우아한 종료(Graceful Shutdown) 프로세스를 따릅니다.

  1. 사용자가 kubectl delete pod 명령을 실행합니다.
  2. 파드의 상태가 Terminating으로 변경됩니다.
  3. (Readiness Probe가 설정된 경우) 파드가 서비스 엔드포인트에서 제외되어 더 이상 새로운 트래픽을 받지 않습니다.
  4. 파드 내의 컨테이너에 TERM 시그널이 전송됩니다. 이는 "이제 곧 종료될 테니 하던 작업을 정리해!"라는 신호입니다.
  5. 애플리케이션은 이 신호를 받고 진행 중인 요청을 마무리하고 데이터베이스 연결을 닫는 등의 정리 작업을 수행합니다.
  6. terminationGracePeriodSeconds (기본값 30초) 동안 컨테이너가 종료되기를 기다립니다.
  7. 만약 이 시간 내에 컨테이너가 스스로 종료하지 않으면, KILL 시그널을 보내 강제로 종료시킵니다.
  8. 파드 객체가 클러스터에서 완전히 사라집니다.

✨ 정리하며

지금까지 쿠버네티스의 심장, 파드(Pod)에 대해 알아보았습니다.

  • 파드는 하나 이상의 컨테이너 묶음이며, 네트워크와 스토리지를 공유하는 가장 작은 배포 단위입니다.
  • 파드는 Pending, Running, Succeeded, Failed 등의 명확한 생명주기(Phase)를 가집니다.
  • Liveness, Readiness, Startup 프로브는 파드 내 컨테이너의 상태를 정밀하게 진단하여 서비스의 안정성을 높이는 핵심 기능입니다.
  • 파드는 우아한 종료(Graceful Shutdown) 메커니즘을 통해 데이터 유실 없이 안전하게 사라집니다.

파드의 개념과 생명주기를 정확히 이해하는 것은 쿠버네티스 위에서 안정적이고 회복탄력성 있는 애플리케이션을 구축하기 위한 가장 중요한 첫걸음입니다. 이 글이 여러분의 쿠버네티스 여정에 튼튼한 발판이 되기를 바랍니다!


태그: Kubernetes, Pod, Container, K8s, 쿠버네티스, 파드, 컨테이너, 도커, DevOps, MSA, 파드 생명주기, Liveness Probe, Readiness Probe