4일 차 4장 MSA Application 배포 실습

jhin·2025년 3월 13일
0

K-PaaS

목록 보기
16/16

Redis 배포 및 DB 구축

Minikube 실행

  • Podman 드라이버를 사용하여 Minikube를 실행
$ minikube start --driver=podman --container-runtime=cri-o

Minikube 배포 확인

$ kubectl get node
$ kubectl get pods -n kube-system

CoreDNS 스크립트 적용

  • 쿠버네티스 내부 통신을 위한 스크립트 파일 적용
$ cd ~/edu-msa-file
$ chmod +x coredns-apply.sh
$ ./coredns-apply.sh

CoreDNS 적용 확인

  • CoreDNS YAML 파일에 'localdomain' 문구가 적용되었는지 확인
$ kubectl get cm coredns -n kube-system -o yaml

Minikube IP 주소 조회

  • 서비스 포트의 외부 통신을 위한 Minikube IP 주소를 확인
$ minikube ip

Redis 배포 준비

  • redis-msa-ui.yaml 파일 수정
$ vim ~/edu-msa-file/Kubernetes/redis-msa-ui.yaml
${REDIS_MSA_UI}를 "30801"로 수정

Redis 배포

  • redis-msa-ui.yaml 배포
$ cd ~/edu-msa-file/Kubernetes/
$ kubectl apply -f redis-msa-ui.yaml

MySql 배포 준비

$ vim ~/edu-msa-file/Kubernetes/mysql-msa-board.yaml
${MYSQL_MSA_BOARD}을 "30501"로 수정

$ vim ~/edu-msa-file/Kubernetes/mysql-msa-comment.yaml
${MYSQL_MSA_COMMENT}을 "30601"로 수정

$ vim ~/edu-msa-file/Kubernetes/mysql-msa-user.yaml
${MYSQL_MSA_USER}을 "30701"로 수정

MySql 배포 및 DB 구축 (board, comment, user)

$ cd ~/edu-msa-file/Kubernetes/
$ kubectl apply -f mysql-msa-board.yaml -f mysql-msa-comment.yaml -f mysql-msa-user.yaml

MySql 배포 확인

$ kubectl get pods

Board DB 접속, DB 구축

# kubectl exec -it ${POD_NAME} -- /bin/bash  
#조회한 파드의 이름을 아래와 같이 입력하시면 됩니다.
예시) $ kubectl exec -it mysql-msa-board-85bb55fb4f-gpj9f -- /bin/bash

# mysql -u root -p
Enter password: password

mysql> CREATE DATABASE msa_board default CHARACTER SET UTF8;
mysql> USE msa_board;
mysql> CREATE TABLE `TB_BOARD` (
  `board_seq` int(11) NOT NULL AUTO_INCREMENT,
  `board_title` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `board_text` mediumtext COLLATE utf8_unicode_ci,
  `write_user_id` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `write_user_name` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `use_yn` varchar(1) COLLATE utf8_unicode_ci DEFAULT 'Y',
  `create_dt` datetime NOT NULL,
  `update_dt` datetime NOT NULL,
  PRIMARY KEY (`board_seq`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

> exit
# exit

Comment DB 접속, DB 구축

# kubectl exec -it ${POD_NAME} -- /bin/bash  
#조회한 파드의 이름을 아래와 같이 입력하시면 됩니다.
예시) $ kubectl exec -it mysql-msa-comment-694d68d4ff-562wk -- /bin/bash

# mysql -u root -p
Enter password: password

mysql> CREATE DATABASE msa_comment default CHARACTER SET UTF8;
mysql> USE msa_comment;
mysql> CREATE TABLE `TB_COMMENT` (
  `comment_seq` int(11) NOT NULL AUTO_INCREMENT,
  `board_seq` int(11) NOT NULL,
  `comment` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `write_user_id` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `write_user_name` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `use_yn` varchar(1) COLLATE utf8_unicode_ci DEFAULT 'Y',
  `create_dt` datetime NOT NULL,
  `update_dt` datetime NOT NULL,
  PRIMARY KEY (`comment_seq`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

> exit
# exit

User DB 접속, DB 구축

# kubectl exec -it ${POD_NAME} -- /bin/bash  
#조회한 파드의 이름을 아래와 같이 입력하시면 됩니다.
예시) $ kubectl exec -it mysql-msa-user-6c5499bbb5-29skb -- /bin/bash

# mysql -u root -p
Enter password: password

mysql> CREATE DATABASE msa_user default CHARACTER SET UTF8;
mysql> USE msa_user;
mysql> CREATE TABLE `TB_USER` (
  `user_seq` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `user_passwd` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
  `user_name` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `use_yn` varchar(1) COLLATE utf8_unicode_ci DEFAULT 'Y',
  `create_dt` datetime NOT NULL,
  `update_dt` datetime NOT NULL,
  PRIMARY KEY (`user_seq`),
  UNIQUE KEY `id_key` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

> exit
# exit

🚨 (참고) 실습 시 유의사항
VM 재시작 시 CoreDNS 스크립트 적용, Mysql DB 재구축 필요

  1. Minikube 실행
  2. Pod, Service 정상 동작 확인, CoreDNS 스크립트 적용
  3. 파드 별 Mysql DB 재구축 필요
  4. 실습포털 접속하여 각 기능 정상 동작 확인

war 파일 생성

JDK 8 다운로드

eGovFrameDev 다운로드

API 소스 다운로드

  • Download URL
  • 'edu-msa'로 검색하여 edu-msa-ui, edu-msa-zuul, edu-msa-user, edu-msa-comment, edu-msa-board API 소스 파일 다운로드

프로젝트 추가 후 설정 파일 수정

  • edu-msa-[board, comment, user] api.properties
    • ${NAMESPACE}: "default" 입력
    • ${KUBERNETES_URL}: Minikube IP 주소 입력
    • ${MYSQL_MSA_BOARD}: 30501
    • ${MYSQL_MSA_COMMENT}: 30601
    • ${MYSQL_MSA_USER}: 30701
  • edu-msa-ui api.properties
    • ${NAMESPACE}: "default"
    • ${KUBERNETES_URL}: Minikube IP 주소 입력
    • ${REDIS_MSA_UI}: 30801

각 프로젝트(board, comment, ui, user, zuul) Maven build를 통해 war 파일 생성

각 war 파일을 서버의 /edu-msa-file/Docker/ 폴더 안의 edu-msa-* 각 폴더로 이동

이미지 생성 및 배포

war 파일과 server.xml이 같은 폴더 안에 구성되어 있는지 확인 (board, comment, ui, user)

war 파일과 application.yml이 같은 폴더 안에 구성되어 있는지 확인 (zuul)

Docker hub

  • 도커에서 운영하는 도커 이미지 저장소 서비스

Docker hub URL

계정 생성 후, Repositories 클릭하여 Repository Name 입력 후 이미지 저장소 생성 (board, comment, ui, user, zuul)

이미지 저장소 로그인

$ podman login docker.io
Username: 아이디 입력
Password: 패스워드 입력

이미지 빌드, 태그, 업로드 (board, comment, ui, user, zuul)

$ cd ~/edu-msa-file/Docker/edu-msa-board/ 
$ podman build --tag edu-msa-board:latest .
$ podman tag edu-msa-board ${도커허브 ID}/edu-msa-board
$ podman push ${도커허브 ID}/edu-msa-board

$ cd ~/edu-msa-file/Docker/edu-msa-comment/ 
$ podman build --tag edu-msa-comment:latest .
$ podman tag edu-msa-comment ${도커허브 ID}/edu-msa-comment
$ podman push ${도커허브 ID}/edu-msa-comment

$ cd ~/edu-msa-file/Docker/edu-msa-ui/ 
$ podman build --tag edu-msa-ui:latest .
$ podman tag edu-msa-ui ${도커허브 ID}/edu-msa-ui
$ podman push ${도커허브 ID}/edu-msa-ui

$ cd ~/edu-msa-file/Docker/edu-msa-user/ 
$ podman build --tag edu-msa-user:latest .
$ podman tag edu-msa-user ${도커허브 ID}/edu-msa-user
$ podman push ${도커허브 ID}/edu-msa-user

$ cd ~/edu-msa-file/Docker/edu-msa-zuul/ 
$ podman build --tag edu-msa-zuul:latest .
$ podman tag edu-msa-zuul ${도커허브 ID}/edu-msa-zuul
$ podman push ${도커허브 ID}/edu-msa-zuul

MSA Application 배포

edu-msa-[board, comment, ui, user, zuul] yaml 파일 수정

$ vim ~/edu-msa-file/Kubernetes/edu-msa-board.yaml
${DOCKER_HUB_ID}을 "도커허브계정"로 입력
${EDU_MSA_BOARD}을 "30201"로 수정

$ vim ~/edu-msa-file/Kubernetes/edu-msa-comment.yaml
${DOCKER_HUB_ID}을 "도커허브계정"로 입력
${EDU_MSA_COMMENT}을 "30301"로 수정

$ vim ~/edu-msa-file/Kubernetes/edu-msa-ui.yaml
${DOCKER_HUB_ID}을 "도커허브계정"로 입력
${EDU_MSA_UI}을 "30001"로 수정

$ vim ~/edu-msa-file/Kubernetes/edu-msa-user.yaml
${DOCKER_HUB_ID}을 "도커허브계정"로 입력
${EDU_MSA_USER}을 "30401"로 수정

$ vim ~/edu-msa-file/Kubernetes/edu-msa-zuul.yaml
${DOCKER_HUB_ID}을 "도커허브계정"로 입력
${NAMESPACE}을 "default"로 입력 (총 3줄)
${EDU_MSA_ZULL}을 "30101"로 수정

edu-msa-[board, comment, ui, user, zuul] yaml 파일 API 배포

$ cd ~/edu-msa-file/Kubernetes/
$ kubectl apply -f edu-msa-board.yaml -f edu-msa-comment.yaml -f edu-msa-ui.yaml -f edu-msa-user.yaml -f edu-msa-zuul.yaml

Pod 및 Service 배포 확인

$ kubectl get pods
$ kubectl get service

MSA Application 포털 접속

  • VMware 화면 속 웹 브라우저에서 Minikube IP 주소와 edu-msa-ui의 노드 포트 번호를 통해 MSA 앱 접속을 실행하여 회원가입, 게시판, 댓글 기능이 정상 작동하는지 확인
  • ex. 192.168.49.2:30001/user/login

0개의 댓글