kompose 적용보단 쿠버네티스로 직접 관리해보는게 배울 게 많겠다 생각했습니다.
쿠버네티스 deployment, service.yaml 파일 생성

서비스

mysql pvc

mysql은 정상적으로 파드가 생성되었으나 springboot는 아래의 오류 발생
Failed to pull image "qwer9545/app-spring": Error response from daemon: pull access denied for qwer9545/app-spring, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

Springboot 파드의 이벤트 확인

#Pod의 상세 정보 조회
kubectl describe pod springboot-app-6975456949-4vm82 -n api-base
도커 이미지 확인

도커 허브에 업로드 후 이미지 pull 확인
kangwonseo@Kangwonui-MacBookAir step05_probono % docker push qwer9545/app-spring:latest
The push refers to repository [docker.io/qwer9545/app-spring]
004aceb6b1c8: Pushed
6dc167b1672d: Pushed
e017d39c755a: Mounted from library/openjdk
03ee828ef0e4: Mounted from library/openjdk
b0d4c4485e7e: Mounted from library/openjdk
latest: digest: sha256:69ce004ae5ff370e220fb8ea902438dc5a04f300f809ae6be436e6a3fa4beca7 size: 1373
'''

CrashLoopBackOff: 재시작 해도 실행 불가,, / 상태: True → Error → False
메시지: back-off 2m40s restarting failed container=springboot-container pod=springboot-app-6975456949-4vm82_api-base(fd2064e9-b7fd-44f7-8b23-55ea94e4d795)
kangwonseo@Kangwonui-MacBookAir step05_probono % kubectl logs springboot-app-6975456949-hrfhx --namespace api-base
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.2.2)
2024-08-05T08:33:11.521Z INFO 1 --- [ main] edu.fisa.lab.Step05ProbonoApplication : Starting Step05ProbonoApplication v0.0.1-SNAPSHOT using Java 17.0.2 with PID 1 (/app-spring/app.jar started by root in /app-spring)
2024-08-05T08:33:11.523Z INFO 1 --- [ main] edu.fisa.lab.Step05ProbonoApplication : No active profile set, falling back to 1 default profile: "default"
2024-08-05T08:33:13.087Z INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2024-08-05T08:33:13.143Z INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 49 ms. Found 2 JPA repository interfaces.
2024-08-05T08:33:13.687Z INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8989 (http)
2024-08-05T08:33:13.704Z INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2024-08-05T08:33:13.704Z INFO 1 --- [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.18]
2024-08-05T08:33:14.623Z INFO 1 --- [ main] org.apache.jasper.servlet.TldScanner : At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
2024-08-05T08:33:14.725Z INFO 1 --- [ main] o.a.c.c.C.[.[localhost].[/probono] : Initializing Spring embedded WebApplicationContext
2024-08-05T08:33:14.726Z INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3175 ms
2024-08-05T08:33:15.076Z INFO 1 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2024-08-05T08:33:15.107Z INFO 1 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.4.1.Final
2024-08-05T08:33:15.127Z INFO 1 --- [ main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled
2024-08-05T08:33:15.326Z INFO 1 --- [ main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer
2024-08-05T08:33:15.343Z INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2024-08-05T08:33:16.464Z ERROR 1 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization.
java.sql.SQLSyntaxErrorException: Unknown database '${DB_NAME}'
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:121) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
application.yaml 파일에서 환경변수를 docker-compose 파일에 넣고 전달하였으나, {DB_NAME}값을 올바르게 가져오지 못함을 확인.. 또한 쿠버네티스에서 별도로 정의해서 사용해야 하는구나.
-> 수정완료
모니터링 시스템 구축을 위한 프로메테우스, 그라파나 Deployment, Service 파일 추가

Minikube로 스프링부트 서비스 시작: readinessProbe와 livenessProbe로 헬스체크
readinessProbe:
httpGet:
path: /probono/actuator/health
port: 8999
initialDelaySeconds: 10
periodSeconds: 5
livenessProbe:
httpGet:
path: /probono/actuator/health
port: 8999
initialDelaySeconds: 15
periodSeconds: 20


프로메테우스: Target 엔드포인트 상태 확인


그라파나: 서비스 성능 모니터링을 위해 12900_rev3 탬플릿으로 Springboot APM 대시보드 구현


mysql: mysqlDB는 정상적으로 데이터를 갖고 있으나 Springboot에서 가져오지 못함


→ 문제 해결 및 테라폼 적용 필요
쿠버네티스 dashboard

상세 코드
https://github.com/qwer9545/k8s-api-server-base/tree/develop/step05_probono