Kubernetes 에 올릴 테스트용 MSA 만들기
💡 jar 파일 앞에 붙을 prefix는 pom.xml의 artifactId에 따라 생성되니 수정이 필요하면 수정하세요
<groupId>com.moondy</groupId>
<artifactId>simple-svc</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>simple-api-msa</name>
<description>simple-api-msa</description>
로컬 환경에서 Container Registry에 Docker 이미지를 Push 해도 되지만, 여러명의 백엔드 개발자가 개발하기 때문에 jar파일의 버전관리 및 설정파일(Dockerfile 등) 통일을 위해 devsta-master 서버에서 Docker Build & Push 하는 방식을 채택
FROM adoptopenjdk:11-jre-openj9
ADD simple-svc-0.0.1-SNAPSHOT.jar simple-svc.jar
ADD application.yml application.yml
ENV JAVA_OPTS=""
ENTRYPOINT ["java","-jar","-Duser.timezone=Asia/Seoul","/simple-svc.jar"]
EXPOSE 8080
# 이동
cd ~/docker-files/<서비스 이름>
# Dockerfile 있는 위치에서 build (끝에 . 꼭 붙여야함)
sudo docker build -t mahnacwv.kr.private-ncr.ntruss.com/<서비스이름>:latest .
# push
sudo docker push mahnacwv.kr.private-ncr.ntruss.com/<서비스이름>:latest
# 이동
mkdir ~/msa-yaml
cd ~/msa-yaml
# 배포 파일 폴더로 이동
mkdir deployment
cd deployment
# yaml 파일 생성
vi simplesvc.yaml
# simplesvc.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: simplesvc-deployment
labels:
app: simplesvc
spec:
replicas: 1
selector:
matchLabels:
app: simplesvc
template:
metadata:
labels:
app: simplesvc
spec:
imagePullSecrets:
- name: regcred
containers:
- name: simplesvc
image: mahnacwv.kr.private-ncr.ntruss.com/simplesvc:latest
ports:
- containerPort: 8080
# deployment 배포
kubectl apply -f simplesvc.yaml
# 확인
kubectl get deployment
💡 지금은 simple test 이기 때문에 바로 외부에서 접속 가능하게 Load Balancer로 만든 것이지만, 실제 운영될 서비스는 ClusterIP로 만들어서 내부접근만 가능하게 만드는 것이 바람직하다. (어차피 Gateway를 통해 들어올 것이니깐)
# 이동
mkdir ../svc
cd ../svc
# 파일 생성 <서비스이름>-svc.yaml
## 나만의 파일 생성 규칙일 뿐 파일 명은 상관 없다
vi simplesvc-svc.yaml
#simplesvc-svc.yaml
kind: Service
apiVersion: v1
metadata:
name: simplesvc-svc
spec:
type: LoadBalancer
selector:
app: simplesvc
ports:
# nodePort - a static port assigned on each the node
# port - port exposed internally in the cluster
# targetPort - the container port to send requests to
- nodePort: 30163
port: 8080
targetPort: 8080
# 적용
kubectl apply -f simplesvc-svc.yaml
# 확인
kubectl get svc
이렇게 나오면 성공
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 198.19.128.1 <none> 443/TCP 28h
simplesvc-svc LoadBalancer 198.19.231.96 [default-simplesvc-svc-e1555-11422156-a9e5e7b2e004.kr.lb.naverncp.com](http://default-simplesvc-svc-e1555-11422156-a9e5e7b2e004.kr.lb.naverncp.com/) 8080:30163/TCP 69s
curl --location --request GET 'http://default-simplesvc-svc-e1555-11422156-a9e5e7b2e004.kr.lb.naverncp.com:8080/health'