
https://coodori.notion.site/Kubernetes-2f15740a21a64575b40c0214c574281c?pvs=74

Could not initialize class org.codehaus.groovy.runtime.InvokerHelper
해당 에러를 검색해보니 자바버전이 맞지 않아서 발생하는 에러라고 한다.
해결하기 위해 맥에 깔려있는 자바버전을 확인해준다.

/usr/libexec/java_home -V
를 통해 확인을 하였으면 이제 깔려있는 버전으로 바꾸어 보자
export JAVA_HOME=$(/usr/libexec/java_home -v 11)

그 후 프로젝트를 빌드하면
BUILD SUCCESSFUL in 37s 성공
FROM openjdk:11
ARG JAR_FILE=./jpashop2/build/libs/jpashop-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
작성 후
docker build -t [docker 닉네임]/sample .
작성하여 이미지로 빌드

또한 빌드완료한다음 docker hub에 해당 만들어진 이미지를 올려주어야한다.
docker push [docker닉네임]/sample
만약 도커 로그인이 필요하다면 로그인을 해주자
근데 이 과정이 굉장히 오래걸린다.
타 블로그를 참고하여 최적화를 진행해보자
Jib은 Docker 사용 없이 Java 어플리케이션 컨테이너를 빌드할 수 있게 해주는 Google의 오픈 소스 Java 컨테이너라이저이다.
Dockerfile을 작성하거나 도커를 설치할 필요가 없으며 Maven 및 Gradle의 플러그인으로 동작하며, 플러그인을 설치한 다음 타깃 이미지에 대한 설정과 빌드에 대한 정의만 하면 Java 애플리케이션을 즉시 컨테이너화 할 수 있다.

확실히 두 개의 설정을 보고 이미지로 만드는 과정을 바로 Project에서 몇가지 세팅을 통해서 간소화해주니 빠를 수 밖에 없는 구조다.
그래서 해당으로도 한번 이미지를 배포해보겠습니다
플러그인에 id 'com.google.cloud.tools.jib' version '3.2.0' 추가
아래 설정파일 참고
plugins {
id 'org.springframework.boot' version '2.4.1'
id 'io.spring.dependency-management' version '1.0.10.RELEASE'
id 'com.google.cloud.tools.jib' version '3.2.0'
id 'java'
}
jib {
from {
image = "eclipse-temurin:11-jre"
}
to {
image = "coodori/springK8s"
tags = ["latest"]
}
container {
jvmFlags = ["-Xms128m", "-Xmx128m"]
}
}
다시 빌드
./gradlew jib
주의사항 to 다음 프로젝트명을 명시할 때 대문자 쓰면 안됩니다.
* What went wrong:
Execution failed for task ':jib'.
> com.google.cloud.tools.jib.plugins.common.BuildStepsExecutionException: Build image failed, perhaps you should make sure your credentials for 'registry-1.docker.io/library/eclipse-temurin'
에러 발견
Task가 가장 기본 task지만 Docker Image를 등록할 Repository에 인증 설정이 되어 있지 않아서 발생
여기에 명시되어있는대로 실행하여 인증하는 4가지 방법중 하나 수행 혹은
./gradlew jibDockerBuild로
Jib은 Docker 데몬에 직접 이미지를 빌드할 수도 있습니다.
수행속도는 기존 97초에서 40로 줄어들었다.


사이즈도 기존 상단에 비해 새로 빌드해서 배포한것이 절반 가량 가볍다.
Pod를 Deployment를 통해 배포하고
외부에서 연결할 수 있도록 Service 만들어주자
apiVersion: apps/v1
kind: Deployment
metadata:
name: jpashop-k8s
spec:
selector:
matchLabels:
app: jpashop
replicas: 1
template:
metadata:
labels:
app: jpashop
spec:
containers:
- name: core
image: daoh98/sample:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
protocol: TCP
resources:
requests:
cpu: 500m
memory: 1000Mi
---
apiVersion: v1
kind: Service
metadata:
name: jpashop-service
spec:
type: NodePort
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: jpashop
다 작성한 후 이제 yml을 적용시켜주나
kubctl apply -f deployment.yml
실행되는거 확인 k get all

정상적으로 실행되는 것을 확인할 수 있었고
이제 한번 접속을 해보자
docker 사용하기 때문에
minikube service jpashop-service
를 통해 
접속하고 
정상적으로 접속이 가능해졌다.
스프링부트랑 쿠버네티스랑 연관시키고 싶은 마음에 해놨던 프로젝트를 찾아보았다.
이번엔 김영한팀장님의 스프링 부트 +jpa 실습하면서 작성한 스프링 부트 코드를 기반으로 서비스를 올려보았다.
다음엔 내가 만든 서비스를 도커 허브에 올려서 쿠버네티스 환경을 구축해보고싶다.
생각보다 많은 에러들을 만나서 많은 검색을 했지만
오히려 이런 경험이 쌓이는거지