쿠버네티스 Deployment, Service

strong1·2024년 8월 5일

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 오류 확인
CrashLoopBackOff: 재시작 해도 실행 불가,, / 상태: True → Error → False
메시지: back-off 2m40s restarting failed container=springboot-container pod=springboot-app-6975456949-4vm82_api-base(fd2064e9-b7fd-44f7-8b23-55ea94e4d795)
  • POD의 실행 로그 확인
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

profile
클라우드 엔지니어로 성장하고 있습니다.

0개의 댓글