[K8S] 쿠버네티스로 Spring Boot 프로젝트 배포해보기(1)
일단 개념 알아뒀고, 그냥 무작정 설치해봤다.
개발환경
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
- 접속해보면 잘뜬다
참조