본문으로 건너뛰기

Pods

December 5, 2025

Pod란?

  • Kubernetes는 컨테이너를 워커 노드에 직접 배포하지 않는다.
  • Kubernetes에서 컨테이너는 Pod라는 Kubernetes 객체로 캡슐화된다.
  • Pod는 쿠버네티스에서 생성할 수 있는 가장 작은 객체이다.
  • Pod는 애플리케이션의 단일 인스턴스이다.

Pod와 컨테이너

  • 일반적으로 컨테이너와 Pod는 1대1 관계이지만, Pod에 반드시 컨테이너가 하나만 존재해야하는 것은 아니다.
    • 예시: 주 컨테이너는 애플리케이션 실행, 보조 컨테이너가 로그 수집. 이 2가지 컨테이너가 하나의 Pod를 구성하는 경우
  • 하지만, 대부분의 경우 Pod와 컨테이너는 1대1 관계로 사용하며, 위와같은 경우에도 따로 분리하는 경우가 대부분이다. 이에 1대1 관계라고 보아도 무방하다.
애플리케이션의 트래픽이 증가할 경우, 우선 Pod를 추가하여 여러 Pod에 로드밸런싱한다. 이후 트래픽이 더 증가하여 해당 노드에서 감당하기 힘든 상황이 되었을 경우 노드를 추가하며 Pod들이 여러 노드에 분산되어 배치된다.

cf) 이 때, ServiceDeployment가 관리하는 여러개의 Pod로 트래픽을 분산하는 것은 L4 로드밸런싱이다.


명령어 예시

kubectl run nginx --image nginx
  • Nginx Pod를 생성하고 배포하는 명령어
kubectl get pods
  • Pod 목록을 얻는 명령어
kubectl describe pod <pod-name>
  • Pod에 대한 자세한 정보를 보는 명령어

YAML

# pod-definition.yml
apiVersion: v1
kind: Pod
metadata:
name: my-app-pod
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: nginx
  • apiVersion(String): 객체를 생성하는데 사용하는 Kubernetes API 버전
    • Pod - v1 / Service - v1 / ReplicaSet - apps/v1 / Deployment - apps/v1
  • kind(String): 생성하려는 객체의 유형
  • metadata(Dictionary): 이름, 라벨과 같은 개체를 나타내는 데이터
    • 와야하는 값들이 정해진 Dictionary 형태
    • name(String): 이름을 나타내는 문자열
    • label(Dictionary):
      • 원하는대로 key와 value를 가질 수 있다. (필요에 따라 key, value 추가 가능)
      • 예를 들어, 수백개의 프론트엔드, 백엔드 pod가 있다고 했을 때, labeltype를 지정해두면 필터링하기 편하다.
    • 원하는 값들을 넣을 수 있는 영역은 metadata뿐이다.
  • spec(Dictionary): 객체와 관련된 추가 정보들
    • 객체마다 이 하위 항목은 다를 수 있으므로 해당 객체의 documentation을 참조해서 작성해야한다.
    • containers(List/Array):
      • List/Array인 이유는 Pod가 여러 컨테이너를 가질 수 있기 때문이다.
      • - 는 List/Array 항목을 나타내며, Dictionary 타입이다.
        • name(String): 컨테이너의 이름
        • image(String): 이미지의 이름 (위의 경우 Docker Hub에 있는 이미지의 이름을 뜻함)
          • Docker Hub에 있는 이미지가 아닐 경우 전체 경로를 모두 작성해야함
kubectl create -f pod-definition.yml
  • 위 명령어로 작성한 yaml에 맞는 Pod를 생성한다.
  • kubectl apply -f pod-definition.yml 도 정확히 똑같이 동작한다.
Yaml에서 Indentation 의 경우 2칸을 띄우던, 4칸을 띄우던 더 많은 칸을 띄우던 상관없지만, 같은 계층의 요소들이 띄워쓰기 갯수가 다르면 안된다.

일반적로는 공백 2칸을 사용하며 이를 추천한다.


레퍼런스