쿠버네티스

[쿠버네티스] Pod, namespace란

woo0doo 2025. 2. 17. 17:51

Pod란?

  • 컨테이너를 표현하는 K8S API의 최소 단위
  • Pod에는 하나 또는 여러 개의 컨테이너가 포함될 수 있음
  • Pod 내의 컨테이너는 IP와 Port를 공유

❓ 왜 Pod에 여러 개의 컨테이너를 넣을까?

최근 애플리케이션들은 실행할 때 애플리케이션만 올라가는 것이 아니라 로그 수집기와 같은 다양한 솔루션이 함께 배포되는 경우가 많습니다.

특히 로그수집기 같은 경우에는 애플리케이션의 로그 파일을 읽어서 수집하기 때문에 애플리케이션과 로그 수집기를 다른 컨테이너로 배포하게 될 경우, 일반적으로는 컨테이너에 의해서 독립적인 환경으로 파일 시스템이 분리되기 때문에 로그 수집기가 애플리케이션에 배포된 컨테이너의 로그 파일을 읽는 것이 불가능하지만, 쿠버네티스의 경우 하나의 파드 안에서 컨테이너끼리 볼륨을 공유할 수 있기 때문에 다른 컨테이너의 파일을 읽어올 수 있습니다.

Pod 특징

  • 파드 실행 방식
    • 단일 컨테이너 실행 : 파드 당 하나의 컨테이너 모델은 가장 일반적인 경우 이며, 쿠버네티스 는 컨테이너 대신 이런 파드를 관리한다.
    • 다중 컨테이너 실행 : 파드는 리소스를 공유하는 다중 컨테이너로 구성된 애플리케이션을 캡슐화할 수 있다. 캡슐화된 것은 하나의 서비스 단위를 형성한다.
  • 파드의 확장
    • 수평적 확장애플리케이션 성능을 높이기 위해 애플리케이션의 인스턴스를 여러 개 파드에서 실행하는 것. 쿠버네티스에서는 일반적으로 레플리케이션 이라 한다.
    • 수직적 확장하나의 인스턴스가 사용하는 리소스를 증가시키는 방법으로 인스턴스 자체의 성능을 높이는 것

 

Pod 라이프사이클

상태 설명
Pending 파드가 k8s 클러스터의 api 서버에 의해 승인되었지만 하나 이상의 컨테이너가 설정되지 않았거나 실행할 준비가 되지 않은 상태이다.
Running 파드가 노드에 바인딩되었고, 모든 컨테이너가 생성되어 적어도 하나 이상의 컨테이너가 실행 중인 상태
Succeeded 파드에 있는 모든 컨테이너가 성공적으로 종료된 상태
Failed 파드 내의 하나 이상의 컨테이너가 실패로 종료된 상태. 컨테이너가  0이 아닌 상태로 종료되거나 시스템에 의해서 종료된 상태 
Unknown 파드의 상태를 알 수 없는 경우이며, 주로 API 서버가 파드의 상태를 알 수 없을 때 발생. 일반적인 경우 통신 오류

 

 

Pod 조건 (Condition)

  • Pod는 하나의 PodStatus를 가지며 이는 Pod의 상태와 이유를 나타내며, Pod LifeCycle과 달리 동시에 여러 조건을 가질 수 있습니다.

 

조건 설명
PodScheduled 파드가 노드에 스케줄된 상태
PodHasNetworking 샌드박스가 성공적으로 생성되고 네트워킹이 구성된 상태
ContainersReady 파드의 모든 컨테이너가 준비된 상태
Initialized 모든 초기화 컨테이너가 성공적으로 완료된 상태
Ready 파드가 요청을 처리할 수 있고, 서비스 제공이 가능한 상태

 

 

컨테이너 상태

  • 쿠버네티스는 Pod 전체의 단계뿐만 아니라 Pod 내부의 각 컨테이너 상태도 추적합니다.

상태 설명
Waiting Running 또는 Terminated 상태가 아니면, Waiting 상태이고, Waiting 상태의 컨테이너는 시작을 완료하는 데 필요한 작업을 계속 실행하고 있는 중이다. kubectl 을 사용하면  Waiting 단계에 머물고 있는 이유를 Reason 필드를 통해 알 수 있음. 
  - ImagePullBackOff - 컨테이너 이미지를 가져오는 데 실패하여 다시 시도하기 전까지 대기 중
  - ErrImagePull - 이미지 풀링 중 오류가 발생
  - CrashLoopBackOff - 컨테이너가 반복적으로 크래시가 발생하여 재시작 대기 중
  - ContainerCreating - 컨테이너가 생성 중이며, 주로 초기화 작업이 진행되고 있는 상태
Running 컨테이너가 정상적으로 실행 중인 상태이며, postStart 훅이 구성되어 있다면 이미 실행되고 완료되었다.
Terminated Terminating 상태의 컨테이너는 실행을 시작한 후 실행이 완료되거나 어떤 이유로 실패한 상태 입니다. 컨테이너에 preStop 후크가 구성되어 있는 경우 이 후크는 컨테이너가 종료됨 상태로 전환되기 전에 실행됩니다.

 


 

Namespace란?

다음과 같이 용도와 목적이 다른 수많은 오브젝트들이 배포되면 어떻게 될까?

 

 쿠버네티스는 pod, label, deploymennt 등 다양한 리소스가 있습니다.

그렇기 때문에 비슷한 이름의 오브젝틀들이 수없이 생길 것이고, 쿠버네티스 환경 운영자와 사용자는 관리와 사용 측면에서 어려움을 겪을 것 입니다.

 

그래서 쿠버네티스에서는 namespace를 제공합니다.

namespace란, 쿠버네티스 클러스터 내의 논리적인 분리 단위입니다.

 

위의 그림처럼 쿠버네티스 클러스터를 dev/stg/prd 세 개의 네임스페이스로 구분했습니다.

dev 목적의 사용자는 dev namespace에 접근해서 오브젝트를 배치, 운영하고,

stage 목적의 사용자는 stg namespace에 접근해서 운영할 수 있습니다.

 

여기서 namespace는 클러스터를 논리적으로 분리하는 것이지, 물리적으로 분리하지 않습니다.

 

 


참조:

https://artist-developer.tistory.com/33

https://white-polarbear.tistory.com/169