[DevOps] 파드(Pod)

·2025년 2월 12일

쿠버네티스

목록 보기
2/7
post-thumbnail

✅ 파드(Pod)란?

쿠버네티스 공식문서에는 다음과 같이 소개한다.

파드(Pod) 는 쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위이다.
파드 (고래 떼(pod of whales)나 콩꼬투리(pea pod)와 마찬가지로)는 하나 이상의 컨테이너의 그룹이다. 이 그룹은 스토리지 및 네트워크를 공유하고, 해당 컨테이너를 구동하는 방식에 대한 명세를 갖는다. 파드의 콘텐츠는 항상 함께 배치되고, 함께 스케줄되며, 공유 콘텍스트에서 실행된다. 파드는 애플리케이션 별 "논리 호스트"를 모델링한다. 여기에는 상대적으로 밀접하게 결합된 하나 이상의 애플리케이션 컨테이너가 포함된다. 클라우드가 아닌 콘텍스트에서, 동일한 물리 또는 가상 머신에서 실행되는 애플리케이션은 동일한 논리 호스트에서 실행되는 클라우드 애플리케이션과 비슷하다.

💡 쉽게 말하자면?

  • 도커에서는 하나의 프로그램을 실행시키는 단위를 컨테이너라고 주로 부름
  • 쿠버네티스에서는 하나의 프로그램을 실행시키는 단위 를 파드(Pod)라고 부름
  • 쿠버네티스에서 가장 작은 단위
  • 일반적으로 하나의 파드하나의 컨테이너를 가짐
    • (예외적으로 하나의 파드가 여러 개의 컨테이너를 가지는 경우도 있음)

컨테이너: ‘Docker의 컨테이너’를 뜻함

  • 2개의 결제 서버가 띄워져있다. = 2개의 결제 서버 파드(Pod)가 띄워져있다
  • 1개의 결제 서버가 죽었다. = 1개의 결제 서버 파드(Pod)가 죽었다.
  • 업로드 서버를 하나 띄우자. = 업로드 서버 하나를 파드(Pod)로 띄우자

💡 참고:
파드에서 컨테이너를 다시 시작하는 것과 파드를 다시 시작하는 것을 혼동해서는 안된다. 파드는 프로세스가 아니라 컨테이너를 실행하기 위한 환경이다. 파드는 삭제될 때까지 유지된다.

📌 쿠버네티스도 도커처럼 이미지를 기반으로 파드(Pod)를 띄워 실행시킨다.

❗️파드는 쿠버네티스에서는 하나의 프로그램을 실행시키는 단위


파드 생성방법

파드(Pod)를 생성할 때 CLI를 활용하는 방법이 있고, yaml 파일을 활용하는 방법이 있다.
실제 현업에서는 yaml 파일을 활용하는 경우가 많다. 따라서 yaml 파일을 활용해서 파드(Pod)를 생성해볼 것이다.

웹 서버(Nginx)를 파드(Pod)로 띄워보기

0. 로컬에 Docker Desktop와 kubectl를 설치 (생략)
[Mac] Docker Desktop 설치 / Docker Desktop에서 Kubernetes 활성화
[Mac] kubectl 설치

1. yaml 파일 생성
nginx-pod.yaml

apiVersion: v1 # Pod를 생성할 때는 v1이라고 기재한다. (공식 문서)
kind: Pod # Pod를 생성한다고 명시
metadata:
  name: nginx-pod # Pod에 이름 붙이는 기능
spec:
  containers:
    - name: nginx-container # 생성할 컨테이너의 이름
      image: nginx # 컨테이너를 생성할 때 사용할 Docker 이미지
      ports:
        - containerPort: 80 # 해당 컨테이너가 어떤 포트를 사용하는 지 명시적으로 표현
  • spec.containers.ports.containerPort는 실제 작동에는 영향을 미치지 않는다. 단순히 컨테이너가 어떤 포트를 사용하는지 명시적으로 나타내기 위한 문서화용이다.

2. yaml 파일을 기반으로 파드 생성

kubectl apply -f nginx-pod.yaml # yaml 파일에 적혀져있는 리소스(파드)를 생성

3. 파드 확인

kubectl get pods # 파드(Pod) 조회

  • NAME : Pod의 이름
  • READY : (파드 내 준비 완료된 컨테이너 수)/(파드 내 총 컨테이너 수)
  • STATUS : 파드의 상태 (Running : 정상적으로 실행 중)
  • RESTARTS : 해당 파드의 컨테이너가 재시작된 횟수
  • AGE : 파드가 생성되어 실행된 시간

4. Nginx에 정상적으로 접속이 되는 지 확인

  • 파드로 Nginx로 띄웠는데 접속이 안된다..! 이유가 뭘까?

문제 해결 방법

  • 도커에서는 컨테이너 내부와 컨테이너 외부의 네트워크가 독립적으로 분리되어 있지만, 쿠버네티스에서는 파드(Pod) 내부의 네트워크를 컨테이너가 공유해서 같이 사용한다.
  • 파드(Pod)의 네트워크는 로컬 컴퓨터의 네트워크와는 독립적으로 분리되어 있다. 이 때문에 파드로 띄운 Nginx에 요청을 보내도 응답이 없던 것이다.

Nginx에 접근하는 방법은 2가지 있다.
1. 파드 내부로 들어가서 접근
2. 파드 내부 네트워크를 외부에서도 접속할 수 있도록 포트 포워딩(포트연결)

파드 내부로 들어가서 Nginx 요청

# kubectl exec -it [파드명] -- bash
# 도커에서 컨테이너로 접속하는 명령어(docker exec -it [컨테이너 ID] bash)와 비슷하다. 
$ kubectl exec -it nginx-pod -- bash # nginx-pod 내부 환경으로 접속

# ---Pod 내부---
$ curl localhost:80 # Nginx로 요청보내기

  • 쿠버네티스에서는 파드(Pod) 내부의 네트워크를 컨테이너가 공유해서 같이 사용하기 때문에, 파드로 접속해서 Nginx로 요청을 보냈을 때 정상적으로 응답이 날라온 것이다.

포트 포워딩을 활용해 Nginx 요청

# kubectl port-forward pod/[파드명] [로컬에서의 포트]/[파드에서의 포트]
$ sudo kubectl port-forward pod/nginx-pod 80:80 # sudo mac 기준

  • 브라우저로 Nginx 요청 성공

쿠버네티스에서는 위에서 작성한 yaml 파일을 보고 매니페스트 파일(Manifest File)이라고 부른다. 이 매니페스트 파일쿠버네티스에서 다양한 리소스(파드, 서비스, 볼륨 등)를 생성하고 관리하기 위해 사용하는 파일이라고 기억하자.(Docker로 치면 Dockerfile과 같은 역할을 하는 파일이다.)

0개의 댓글