본문 바로가기
Server/🚢 Kubernetes

[minikube] 쿠버네티스 포드(pod) 구조와 실행

by 코딩하는 동현 2025. 4. 8.

쿠버네티스 포드(Pod)란 무엇인가

쿠버네티스(Kubernetes)를 본격적으로 사용하기 전, 가장 기본적인 개념인 포드(Pod)부터 이해해봅니다.

포드는 쿠버네티스에서 가장 작고 기본적인 배포 유닛으로, 하나 또는 그 이상의 컨테이너를 감싸는 추상화된 단위입니다.

 

포드는 왜 중요한가?

  • 마이크로서비스 아키텍처에서는 여러 개의 컨테이너를 배포해야 합니다.
  • 도커(Docker)만 사용한다면 각각의 컨테이너를 수동으로 관리해야 하는데, 이는 매우 번거로운 작업입니다.
  • 쿠버네티스는 이러한 컨테이너를 효율적으로 배포하고 관리할 수 있도록 '포드'라는 개념을 도입했습니다.

포드의 구성

공식 문서에 따르면, 포드는 다음과 같은 구성 요소를 가집니다:

  • 하나 이상의 컨테이너 (주로 도커 기반)
  • 공유 스토리지 및 네트워크
  • 실행 방법이 정의된 메타데이터

왜 하나의 포드에 여러 컨테이너를 넣을까?

대부분의 경우 포드에는 하나의 컨테이너만 존재합니다. 하지만, 다음과 같은 경우 보조 컨테이너(Sidecar)를 함께 넣기도 합니다:

  • 로그 수집 컨테이너
  • 보안, 인증을 담당하는 프록시 컨테이너
  • 예: 웹 서버 + 로그 가공기

그러나 일반적인 실습 환경이나 학습에서는 대부분 포드당 하나의 컨테이너만 사용합니다.


포드는 컨테이너의 '포장지'다

  • 포드는 컨테이너를 감싸는 일종의 포장지라고 이해하면 쉽습니다.
  • 쿠버네티스에서는 포드를 기준으로 자원(CPU, 메모리, 네트워크)을 할당하고, 이를 모니터링합니다.

실습: 첫 번째 포드 정의하기

아래는 YAML 형식으로 작성된 포드 정의입니다:

apiVersion: v1
kind: Pod
metadata:
  name: webapp
spec:
  containers:
  - name: webapp
    image: richardchesterwood/k8s-fleetman-webapp-angular:release0-arm64
  • apiVersion: 사용된 쿠버네티스 API의 버전입니다.
  • kind: 객체의 종류를 나타냅니다. 여기선 Pod.
  • metadata.name: 포드의 이름입니다.
  • spec.containers: 포드에 들어갈 컨테이너의 리스트입니다.
  • image: 사용할 도커 이미지입니다.


포드 생성 및 적용

kubectl apply -f first-pod.yaml

적용 후, 상태 확인은 아래 명령어로 확인합니다:

kubectl get all


포드 상태 상세 확인

kubectl describe pod webapp

특히 Events 섹션에서 컨테이너의 생성 상태, 오류 여부 등을 확인할 수 있습니다.

 


포드 내부에 접속하기

kubectl exec -it webapp sh

이 명령어는 포드 내부 쉘에 접속합니다.

 

wget <http://localhost:80>
cat index.html

웹 서버가 잘 실행되고 있는지 확인할 수 있습니다.

 


포드는 외부에서 직접 접근할 수 없다

  • 클러스터 외부에서 포드에 직접 접근하려고 하면 접속할 수 없습니다.
  • 브라우저로 minikube ip 주소를 입력해도 포드에는 연결되지 않습니다.
  • 이를 해결하려면 Service 개념을 배워야 합니다 (다음 포스트에서 다룸).


요약

  • 포드는 컨테이너를 쿠버네티스에서 관리 가능하도록 추상화한 최소 단위입니다.
  • 대부분 포드 하나에 컨테이너 하나를 할당합니다.
  • 포드는 클러스터 내부에서만 접근 가능합니다.
  • 외부 접근이 필요하면 Service를 통해 연결해야 합니다.

다음 포스트에서는 Service 구성 요소를 다루며, 포드를 외부와 연결하는 방법을 배워보겠습니다.

반응형

댓글