본문 바로가기
Backend 개발자/Springboot

로컬PC 쿠버네티스 minikube 에서 springboot 프로젝트 실행 삽질하기 챕터5

by by 앵과장 2023. 4. 14.
반응형

오늘은 minikube 를 통해서 Springboot 프로젝트를 실행하고 접근되는지가지 진행해보도록 하겠습니다.

 

바로전시간 챕터4에서는 쿠버네티스 minikube 를 설치하는부분까지 진행하였습니다.

https://angryfullstack.tistory.com/98

 

쿠버네티스 환경 맛보기 미니멀라이즘 minikube 설치 및 설정 springboot 프로젝트 실행하기 챕터4

챕터4에서는 쿠버네티스 설치 후 실행하는 과정을 구성해보려고합니다. 챕터1,2,3 에서는 springboot 사전과제에 필요한 준비과정 gradle ,application docker 파일을만들고 실행하는부분까지 진행하였습

angryfullstack.tistory.com

 

minikube 에서 Springboot 프로젝트 실행하기

1.Docker 실행

open /Applications/Docker.app

2.Dockerfile 생성

# 베이스 이미지 설정
FROM openjdk:11-jre-slim

# 저자 정보
LABEL maintainer="lswteen@gmail.com"

# 프로젝트의 실행 파일 이름 설정
ARG JAR_FILE=build/libs/*.jar

# 실행 파일을 컨테이너에 추가
COPY ${JAR_FILE} app.jar

# 컨테이너의 실행 명령 정의
ENTRYPOINT ["java","-jar","/app.jar"]

3.Docker 이미지 빌드합니다.

docker build -t my-spring-boot-app:latest .

 

4.로컬 Docker 레지스트리에 이미지가 있어야합니다. 
그러나 Minikube는 자체 Docker데몬을 사용하므로 minikube Docker데몬을 사용하도록 터미널 환경을 설정해야 합니다.

eval $(minikube docker-env)

해당 명령어로 로컬 터미널 세션의 Docker CLI를 Minikube  Docker데몬에 연결합니다.

5.minikube 의 Docker 데몬을 사용하여 이미지를 다시 빌드합니다.

docker build -t my-spring-boot-app:latest .

6. 쿠버네티스에 적용할 springboot-deployment.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: springboot-deployment
spec:
  selector:
    matchLabels:
      app: my-springboot-app
  replicas: 1
  template:
    metadata:
      labels:
        app: my-springboot-app
    spec:
      containers:
        - name: springboot-container
          image: my-spring-boot-app:latest
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: my-springboot-app
spec:
  selector:
    app: my-springboot-app
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
  type: LoadBalancer

imagePullPolicy 를 추가하지 않으면 Remote에 있는 정보를 찾으려하기때문에 로컬에 있는 Docker를 연결하려면 필수로 넣어야한다.

해당 내용을 넣지않는다면 

쿠버네티스 Dashboard에서 아래와같은 내용을 확인하게됩니다.

Failed to pull image "my-spring-boot-app:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for my-spring-boot-app, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

kubectl apply -f springboot-deployment.yaml
kubectl get pods

 

아래 명령어 입력시 dashboard창으로 확인가능합니다.

minikube dashboard

7. 쿠버네티스 서비스 URL 접근방법

minikube service my-springboot-app --url

이래와같이 진행되면 성공입니다.
(base) renzo@renzoui-MacBookPro tax % minikube service my-springboot-app --url
http://127.0.0.1:53960
❗  Because you are using a Docker driver on darwin, the terminal needs to be open to run it.

터미널 세션이 살아있어야만 접근된다는거라서 닫으면 끊어집니다. 

관련 포트 계속 변경됩니다. (이게 원래이런건지 설정을 추가적으로 해야되는건지 확인해볼필요가 있습니다.)

이렇게 쿠버네티스를 로컬에서 설치하고 설정파일을 Springboot 프로젝트에 추가하고 실행해서 접근하는부분까지

가볍게(?) 삽질하면서 정리해보겠습니다.