개발자 쿠키

[k8s] SpringBoot 서버를 pod로 띄우기 본문

k8s

[k8s] SpringBoot 서버를 pod로 띄우기

개발자 쿠키 2025. 6. 8. 12:42

1. Spring Boot 프로젝트 세팅


2. AppController 코드 작성

 

3. 프로젝트 실행

 

4. Dockerfile 작성

FROM openjdk:17-jdk

COPY build/libs/*SNAPSHOT.jar app.jar

ENTRYPOINT ["java", "-jar", "/app.jar"]


4-1. 빌드가 안되는 사람만, 잘 되면 pass

# java version 확인
java --version

# jvm version 확인
./gradlew --version

java, jvm 17로 세팅 
jvm은 ctrl + alt + s -> gradle

환경변수 
윈도우 검색창에 환경 변수 입력 → 시스템 환경 변수 편집 클릭

PATH=%JAVA_HOME%\bin;%PATH%

 

5. Spring Boot 프로젝트 빌드

./gradlew clean build

 

6. Dockerfile을 바탕으로 이미지 빌드하기

docker build -t spring-server .

 

7. 이미지 확인

docker image ls


8. spring-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: spring-pod
spec:
  containers:
    - name: spring-container
      image: spring-server
      ports:
        - containerPort: 8080

 

9. 매니페스트 파일 기반 파드 생성

kubectl apply -f spring-pod.yaml

 

10. 파드 생성 확인

kubectl get pods

 

이미지 풀 정책

쿠버네티스가 .yaml 파일을 읽어 파드를 생성할 때, 이미지를 어떻게 pull할지에 대한 정책을 의미
1. Always : 무조건 레지스트리(=dockerhub, ECR과 같은 원격 이미지 저장소)에서 가져옴
2. IfNotPresent : 로컬에서 이미지를 먼저 가져옴. 만약 로컬에 없다면 레지스트리에서 가져옴
3. Never : 로컬에서만 이미지를 가져옴

이미지 풀 정책 설정 방법

apiVersion: v1
kind: pod
metadata
  name: spring-pod
spec:
  containers:
    - name: spring-container
      image: spring-server
      ports:
        - containerPort: 8080
      imagePullPolicy: IfNotPresent

이미지의 태그가 latest or 명시하지 않으면 imagePullPolicy는 Always로 설정됨
이미지의 태그가 laters가 아닌 경우: imagePullPolicy는 IfNotPresent로 설정됨

 

STATUS가 ImagePullBackOff로 에러가 발생했다면?

기존에는 imagepullPolicy가 always로 작동했는데, spring-server라는 이미지는 dockerhub에 올린적이 없기 때문에 이미지를 받아 온 것이다. 

 

기존 파드 삭제 후 다시 생성

kubectl delete pod spring-pod
kubectl apply -f spring.pod.yaml
kubectl get pods


11. Spring Boot 서버에 요청 보내 잘 응답 확인

11-1. 파드 내부로 들어가서 요청 보내기

kubectl exec -it spring-pod -- bash
curl localhost:8080


11-2. 포트 포워딩

kubectl port-forward pod/spring-pod 12345:8080

localhost:12345로 접속시 hello world 출력됨

 

파드 삭제

kubectl delete pod spring-pod