k8s로 Spring 띄우기 (window)

최준호·2022년 12월 18일
0

molu

목록 보기
1/3
post-thumbnail

📗 쿠버네티스로 Spring 띄우기

참고 해당 실습은 Window11 환경에서 진행되며 Docker Desktop이 설치된 환경, Docker hub에 회원가입이 완료된 상태에서 진행됩니다!

Spring Boot k8s 배포
Spring Boot로 만든 Hello Minikube 예제

📄 Spring Application 만들기

✅ Spring Initializr

Spring Initializr를 사용하여 프로젝트를 생성했다. 테스트용도이므로 다른 의존성은 추가하지 않았다.

MVC 형태의 Spring Web이 아닌 Non-Blocking application 생성을 위해 Reactive Web을 선택했다. 그 이유는 k8s를 통해 MSA 프로젝트를 주로 실행하게 될텐데 MSA에서 동기 application보다는 non-blocking application 프로젝트를 주로 생성해볼것이기 때문에 reactive web으로 설정했다.

✅ Controller 작성

@Getter
@Builder
public class TempDto {
    private String name;
}
@RestController
public class HelloController {
    @GetMapping("/test")
    public Mono<ResponseEntity<TempDto>> test(){
        return Mono.just(ResponseEntity.ok(
                TempDto.builder()
                        .name("juno!")
                        .build()));
    }
}

정말 간단하게 테스트 용도의 Controller를 작성했다.

서버를 실행해보자

정상 호출이 되는 것을 확인했다!

이제 이 서버를 쿠버네티스로 올려보자!

📄 Docker 설정부터!

✅ Dockerfile 작성

#Dockerfile
FROM openjdk:17.0.2-slim
ADD build/libs/sticker-0.1.jar sticker.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","sticker.jar"]

나의 경우는 gradle을 사용하고 있기 때문에 다음과 같이 작성해주었다. 또한 버전은

gradle 설정에서 다음과 같이 수정해주었기 때문에 0.1이 나온다. 만약 설정을 하지 않았다면 xxx.0.0.1-SNAPSHOT.jar 파일이 생성될것이다.

gradlew clean build

명령어를 사용하여 build jar 파일을 생성해두자!

✅ docker hub

docker build --no-cache -t ililil9482/test:1.0 .

이미지를 build 명령어를 통해 생성해준다.

docker login

그 이후 docker hub 전송을 위해 login을 해주고

docker push ililil9482/test:1.0

docker hub에 미리 생성한 repository에 push 해준다.

📄 k8s 사용하기

이미지 출처

✅ k8s 설치

쿠버네티스 공식 홈페이지에서 자신의 os에 맞게 설치를 진행하면 된다.

minikube start

설치를 완료하고 다음과 같이 start를 해주면

정상적으로 실행되는 것을 확인할 수 있다! default 값이 Docker 설정이므로 Docker가 실행된 상태여야 정상 실행이 된다!

✅ Depolyment 정의

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
        - name: test
          image: ililil9482/test:1.0
          imagePullPolicy: Always
          ports:
            - containerPort: 8080

test-deplyment.yaml 파일을 다음과 같이 정의해주었다.

kubectl apply -f test-deployment.yaml

다음 명령어로 deployment를 실행해주자.

kubectl get pod
kubectl get deployment

명령어를 실행하여 정상 실행되었는지 확인도 가능하다.

apiVersion: v1
kind: Service
metadata:
  name: test
  namespace: default
  labels:
    app: test
spec:
  selector:
    app: test
  ports:
    - protocol: TCP
      port: 8080
      nodePort: 30000
  type: NodePort

그 후 test-service.yaml 파일을 작성한다.

kubectl apply -f test-service.yaml
kubectl get serivce

minikube service test

다음과 같이 쿠버네티스를 사용하여 윈도우에서 실행한 것을 확인해봤다!

하지만 아직 터미널을 종료하면 바로 종료되어 버린다... 이게 리눅스 환경에서는 조금 다른거 같은데 계속 공부해봐야 제대로 알거 같다!

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

1개의 댓글

comment-user-thumbnail
2023년 6월 12일

k8s 랑 minikube랑 차이가 다른가요?
k8s 사용중인데 똑같이 적용하면 될까요?

답글 달기