Kubernetes 개요
Kubernetes 란
- 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 오픈소스 플랫폼
MacOS에 Kubernetes 설치
대시보드 설치
Docker Hub 가입하기
Kubernetes에 Spring Boot 프로젝트 배포하기
Dockerfile 생성
- 프로젝트 루트에 Dockerfile을 생성합니다.
FROM openjdk:11-jdk-slim
COPY target/*.jar app.jar
CMD ["java", "-XX:+UseG1GC", "-XX:MaxMetaspaceSize=512m", "-XX:MetaspaceSize=256m", "-jar", "app.jar"]
프로젝트 빌드
- 애플리케이션을 빌드해서 jar 파일을 생성합니다.
# Maven 프로젝트
./mvnw clean package
# Gradle 프로젝트
./gradlew clean build
Docker 이미지 빌드
- Dockerfile이 있는 루트에서 실행하여 Docker 이미지를 생성합니다.
docker build -t mycat83/sample .
- 빌드 성공 후 아래 명령어를 실행하여 이미지가 정상적으로 생성되었는지 확인이 가능합니다.
docker images
Docker 이미지 푸시
- Docker Hub에 로그인 합니다.
docker login
- 생성된 Docker 이미지를 Docker Hub에 푸시합니다.
docker push mycat83/sample
Kubernetes에 배포
- 아래 명령어 3개를 실행하여 배포를 deployment.yml 파일을 생성합니다.
kubectl create deployment sample --image=mycat83/sample --dry-run -o=yaml > deployment.yml
echo --- >> deployment.yml
kubectl create service clusterip sample --tcp=8080:8080 --dry-run -o=yaml >> deployment.yml
- 생성된 deployment.yml 파일
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: sample
name: sample
spec:
replicas: 1
selector:
matchLabels:
app: sample
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: sample
spec:
containers:
- image: mycat83/sample
name: sample
resources: {}
status: {}
---
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: sample
name: sample
spec:
ports:
- name: 8080-8080
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: sample
type: ClusterIP
status:
loadBalancer: {}
- 배포를 위해 명령어를 수행합니다.
kubectl apply -f deployment.yaml
배포된 애플리케이션 확인
-
대시보드 확인
-
포트 포워딩을 사용해서 애플리케이션에 접근합니다.
kubectl port-forward svc/sample 8080:8080