본문으로 건너뛰기

Pods

December 5, 2025

Pod란?​

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

Pod와 컨테이너​

  • 일반적으로 컨테이너와 Pod는 1대1 관계이지만, Pod에 반드시 컨테이너가 하나만 존재해야하는 것은 아니다.
    • 예시: 주 컨테이너는 애플리케이션 실행, 보조 컨테이너가 로그 수집. 이 2가지 컨테이너가 하나의 Pod를 구성하는 경우
  • 하지만, 대부분의 경우 Pod와 컨테이너는 1대1 관계로 사용하며, 위와같은 경우에도 따로 분리하는 경우가 대부분이다. 이에 1대1 관계라고 보아도 무방하다.

명령어 예시​

Pod 생성

kubectl run nginx --image nginx

Pod 목록 조회

kubectl get pods

특정 Pod 정보 조회

kubectl describe pod <pod-name>

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가 있다고 했을 때, label에 type를 지정해두면 필터링하기 편하다.
    • 원하는 값들을 넣을 수 있는 영역은 metadata뿐이다.
  • spec(Dictionary): 객체와 관련된 추가 정보들
    • 객체마다 이 하위 항목은 다를 수 있으므로 해당 객체의 documentation을 참조해서 작성해야한다.
    • containers(List/Array):
      • List/Array인 이유는 Pod가 여러 컨테이너를 가질 수 있기 때문이다.
      • - 는 List/Array 항목을 나타내며, Dictionary 타입이다.
        • name(String): 컨테이너의 이름
        • image(String): 이미지의 이름 (위의 경우 Docker Hub에 있는 이미지의 이름을 뜻함)
          • Docker Hub에 있는 이미지가 아닐 경우 전체 경로를 모두 작성해야함

yaml 파일로 Pod 생성

  • kubectl apply -f pod-definition.yml 도 정확히 똑같이 동작한다.
kubectl create -f pod-definition.yml
Yaml에서 Indentation 의 경우 2칸을 띄우던, 4칸을 띄우던 더 많은 칸을 띄우던 상관없지만, 같은 계층의 요소들이 띄워쓰기 갯수가 다르면 안된다.

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


레퍼런스​