IT

[K8S] 쿠버네티스로 Spring Boot 프로젝트 배포해보기(1)

뽀리님 2023. 12. 18. 14:01

일단 개념 알아뒀고, 그냥 무작정 설치해봤다.

 

개발환경

MAC OS (M1 chip)

VsCode

Gradle

도커설치

 

✅ Docker에서 쿠버네티스 설치

도커앱에서 오른쪽상단위 설정 창을 누르면 왼쪽에 쿠버네티스 메뉴를 볼 수 있다.

체크를 한 후 설치를 진행한다.

 

 

설치가 잘되었는지 확인해보려면 터미널에서 다음 명령어 입력

MacBookAir IdeaProjects % kubectl cluster-info

 

 

MacBookAir IdeaProjects % kubectl get all

Pop, Service 등의 정보를 알 수 있다.

 

✅ 쿠버네티스 대시보드

1) 대시보드 UI 배포

대시보드 UI는 기본으로 배포되지 않는다. 배포하려면 다음 커맨드를 실행한다.

MacBookAir KbTest % kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml

 

2) 커맨드 라인 프록시

kubectl 커맨드라인 도구를 이용해 다음 커맨드를 실행함으로써 대시보드로의 접속을 활성화할 있다.

 

MacBookAir IdeaProjects % kubectl proxy

 

접속해보면 이상한 명령어만 잔뜩있음..그래서 알아보니 가입해야한다고 한다.

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

여기로 접속하면 Token 으로 로그인할 수 있다. 계정을 만들어보자

 

3) 대시보드 계정 만들기

나는 .yaml 을 일일이 입력하기 귀찮아서 cat 으로 했다.

- ClusterRoleBinding

MacBookAir IdeaProjects % cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
EOF

 

- ServiceAccount

MacBookAir IdeaProjects % cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
EOF

 

4) 토큰값 생성

MacBookAir IdeaProjects % kubectl -n kubernetes-dashboard create token admin-user

조회하면 엄청나게 무언가 긴 문자열이 있다. 이걸 복사해서 아까 로그인 창에 붙여넣자.

그런다음 접속!

 

 

 

 

✅  Spring Boot 로 간단한 프로그램 만들기

@RestController
@RequestMapping("/api")
public class TestController {
    @GetMapping("/test")
    public String helloworld(){
        return "hello kube world";
    }
    
}

 

✅  Spring Boot에 도커파일 작성

FROM openjdk:17-ea-11-jdk-slim
ARG JAR_FILE=/build/libs/test-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","app.jar"]

 

  Gradle 빌드

MacBookAir test % ./gradlew clean build

 

✅ 도커이미지 빌드

MacBookAir test % docker build -t ha/sample .

 

 

이미지가 잘생성된걸 도커앱에서 확인할 수 있다.

 

✅  도커이미지 Hub 에 Push 하기

일단 먼저 허브 레파지토리부터 만들자.

 

 

 

그런다음 내가 만든 이미지의 tag를 확인후 먼저 레파지토리에도 동일하게 매긴다

MacBookAir test % docker login                                       
Authenticating with existing credentials...
Login Succeeded
MacBookAir test % docker tag ha/sample:latest hahahayoung/mydocker:latest

 

그런다음 Tag를 이용하여 푸쉬

MacBookAir test % docker push hahahayoung/mydocker:latest

 

 

확인해보면 잘되었다.

 

✅  쿠버네티스 배포

MacBookAir KbTest % kubectl create deployment hasample --image=hahahayoung/mydocker:latest --dry-run -o=yaml > deployment.yaml
MacBookAir KbTest % echo --->> deployment.yaml
MacBookAir KbTest % kubectl create service clusterip hasample --tcp=8080:8080 --dry-run -o=yaml >> deployment.yaml

Image 이름에 내가 만든 Docker/Hub 에 올라가있는 이미지이름:Tag 여야 한다.

 

명령어를 수행하면 .yaml 파일이 생성된다

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: hasample
  name: hasample
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hasample
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: hasample
    spec:
      containers:
      - image: hahahayoung/mydocker:latest
        name: mydocker
        imagePullPolicy: Always
        command: ["java", "-jar", "app.jar"]
        ports:
        - containerPort: 8080        
        resources: {}
status: {}
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: hasample
  name: hasample
spec:
  ports:
  - name: 8080-8080
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: hasample
  type: ClusterIP
status:
  loadBalancer: {}

 

 

배포를 위해 아래 명령어를 수행

MacBookAir KbTest % kubectl apply -f deployment.yaml

 

정상적으로 배포가완료되었는지 확인하자.

MacBookAir KbTest % kubectl get all | grep hasample

 

Pod 에도 잘올라갔다. 그럼 쿠버네티스 대시보드에서 확인해보자

 

- 디플로이먼트

 

- 파드

 

- 파드안에서 로그를 확인할 수 있다.

 

 

 

 

마지막으로 외부에서 http 접근하기위해 port-foward 사용해보자

MacBookAir KbTest % kubectl port-forward svc/hasample 8080:8080

 

 

- 접속해보면 잘뜬다

 

 

참조

https://brunch.co.kr/@springboot/324

https://park-hw.tistory.com/entry/%EB%8C%80%EC%8B%9C%EB%B3%B4%EB%93%9C-%ED%86%A0%ED%81%B0-%EB%B0%9C%ED%96%89