![[Kubernetes] 파드(Pod)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FduK8RX%2FbtsNMbNyeas%2F1O2O5y1BTJkKRK4nOtQ2pK%2Fimg.png)
[Kubernetes] 파드(Pod)DevOps/Kubernetes2025. 5. 9. 00:45
Table of Contents
이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.
파드(Pod)
도커에서는 하나의 프로그램을 실행시키는 단위를 컨테이너라고 부른다. 쿠버네티스에서는 하나의 프로그램을 실행시키는 단위를 파드(Pod)라고 부른다.
- 도커 : 컨테이너
- 쿠버네티스 : 파드(하나 또는 여러개의 컨테이너로 구성)
따라서 파드(Pod)는 일반적으로 쿠버네티스에서 하나의 프로그램을 실행시키는 단위라고 기억해두면 이해하기 편하다.
- 쿠버네티스에서 가장 작은 단위
- 일반적으로 하나의 파드가 하나의 컨테이너를 가진다. (예외적으로 하나의 파드가 여러 개의 컨테이너를 가지는 경우도 있다.)
쿠버네티스도 도커처럼 이미지를 기반으로 파드를 띄워 실행시킨다.
Pod 생성 및 실행
Nginx
- 먼저 Manifest File을 만들어야한다.
- Manifest File은 쿠버네티스에서 다양한 리소스(파드, 서비스, 볼륨 등)를 생성하고 관리하기 위한 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 : 실제 작동에는 영향을 미치지 않는다. 단순히 컨테이너가 어떤 포트를 사용하는 지 명시적으로 나타내기 위한 문서화용이다. (Dockerfile의 EXPOSE와 비슷한 역할)
yaml 파일을 기반으로 파드(Pod) 생성
kubectl apply -f nginx-pod.yaml # yaml 파일에 적혀져있는 리소스(파드)를 생성
파드(Pod)가 잘 생성됐는 지 확인
kubectl get pods # 파드(Pod) 조회
포트 포워딩을 통해 Nginx로 요청
로컬에서 80번 포트로 요청을 보내면 파드의 80의 포트로 매핑되도록 포트포워딩하는 명령어는 아래와 같다.
# kubectl port-forward pod/[파드명] [로컬에서의 포트]/[파드에서의 포트]
sudo kubectl port-forward pod/nginx-pod 80:80
파드 삭제
# kubectl delete pod [파드명]
kubectl delete pod nginx-pod # nginx-pod라는 파드 삭제
kubectl get pods # 파드가 잘 삭제됐는 지 확인
SpringBoot 애플리케이션
도커파일 작성
Dockerfile
FROM openjdk:17-jdk COPY build/libs/*SNAPSHOT.jar app.jar ENTRYPOINT ["java", "-jar", "/app.jar"] |
프로젝트 빌드
./gradlew clean build
도커파일을 바탕으로 이미지 빌드
docker build -t spring-server .
이미지가 잘 생성됐는지 확인
docker image ls
Manifest File 작성
apiVersion: v1 kind: Pod metadata: name: spring-pod spec: containers: - name: spring-container image: spring-server ports: - containerPort: 8080 imagePullPolicy: IfNotPresent |
이미지 풀 정책 (Image Pull Policy)
이미지 풀 정책(Image Pull Policy)이란 쿠버네티스가 yaml 파일을 읽어들여 파드를 생성할 때, 이미지를 어떻게 Pull을 받아올 건지에 대한 정책을 의미한다.
- Always : 로컬에서 이미지를 가져오지 않고, 무조건 레지스트리(= Dockerhub, ECR과 같은 원격 이미지 저장소)에서 가져온다.
- IfNotPresent : 로컬에서 이미지를 먼저 가져온다. 만약 로컬에 이미지가 없는 경우에만 레지스트리에서 가져온다.
- Never : 로컬에서만 이미지를 가져온다.
- 이미지의 태그가 latest이거나 명시되지 않은 경우 : imagePullPolicy는 Always로 설정됨
- 이미지의 태그가 latest가 아닌 경우 : imagePullPolicy는 IfNotPresent로 설정됨
Manifest File을 기반으로 파드 생성
kubectl apply -f spring-pod.yaml
파드가 잘 생성됐는지 확인
kubectl get pods
포트 포워딩을 활용해 스프링부트에 요청
kubectl port-forward pod/spring-pod 12345:8080
파드 삭제
kubectl delete pod spring-pod
'DevOps > Kubernetes' 카테고리의 다른 글
[Kubernetes] 핵심 명령어 정리 (1) | 2025.05.13 |
---|---|
[Kubernetes] 볼륨(Volume) (0) | 2025.05.12 |
[Kubernetes] 환경변수 관리(ConfigMap, Secret) (0) | 2025.05.11 |
[Kubernetes] Deployment와 Service (0) | 2025.05.10 |
[Kubernetes] 쿠버네티스 설치(Mac) (0) | 2025.05.08 |