startupProbe 를 사용하여 기동이 느린 컨테이너 대응
# Spring Boot 초기 기동 시 CPU 사용률 문제와 Startup Probe로 해결 Spring Boot 애플리케이션을 Kubernetes 환경에서 처음 기동할 때, **JVM 초기화** 때문인지 일시적으로 **CPU 사용률이 급증**하여 HPA(Horizontal Pod Autoscaler)가 작동하는 문제가 발생했습니다. 이 문제를 **Kubernetes의 Startup Probe**를 활용하여 해결한 사례를 공유합니다. --- ## 문제 상황 1. Spring Boot 애플리케이션의 Pod가 처음 기동되면서 **JVM 초기화**로 인해 **CPU 사용량이 일시적으로 높아짐**. 2. HPA가 이 CPU 사용량을 감지하고 Pod의 개수를 늘리는 비효율적인 스케일링 발생. 3. Pod가 정상적으로 기동되고 나면 CPU 사용량이 안정화되지만, HPA가 이미 불필요한 스케일링을 실행한 상태. --- ## 해결 방안: Startup Probe 활용 Startup Probe는 컨테이너의 **초기 상태를 확인**하고, 기동이 완료될 때까지 Liveness Probe의 실행을 지연시켜 문제를 해결할 수 있습니다. ### 설정 예시 아래는 Startup Probe와 Liveness Probe를 사용하여 문제를 해결한 설정입니다: ```yaml livenessProbe: httpGet: path: /healthz port: liveness-port failureThreshold: 1 # 실패 시도 횟수가 설정값에 도달하면 컨테이너 재시작 periodSeconds: 10 # 10초 주기로 Probe 실행 startupProbe: httpGet: path: /actuator/health port: 9898 failureThreshold: 10 # 최대 실패 횟수 (10회 시도 실패 시 컨테이너 종료) periodSeconds: 15 # 15초 주기로 Probe 실행 ``` --- ## 설정 동작 설명 1. **Startup Probe** - `(failureThreshold [10] * periodSeconds [15] = 150초)` 동안 컨테이너 기동 여부를 확인. - **컨테이너가 정상적으로 기동되면** Liveness Probe로 전환. 2. **Liveness Probe** - Startup Probe가 성공하면 작동 시작. - 컨테이너가 정상적으로 실행 중인지 주기적으로 확인. 3. **실패 시 처리** - Startup Probe가 150초 내에 성공하지 못하면 컨테이너를 종료하고 `restartPolicy`에 따라 Pod를 재시작. --- ## 적용 결과 1. Spring Boot 애플리케이션의 초기 CPU 사용량이 높아도 HPA가 잘못 작동하지 않음. 2. 컨테이너가 정상적으로 기동 완료된 이후 Liveness Probe가 작동. 3. 불필요한 Pod 스케일링 방지 및 리소스 낭비 최소화. --- ## 정리 Startup Probe는 애플리케이션 초기화 시간 동안 상태를 점검하여, 컨테이너가 준비되기 전에 불필요한 Liveness Probe 또는 HPA 작동을 방지할 수 있는 강력한 도구입니다. Spring Boot와 같이 초기화 과정에서 높은 CPU 사용량이 발생할 수 있는 애플리케이션에 특히 유용합니다. --- ### 참고 자료 - [Kubernetes 공식 문서 - Probes](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) - [Spring Boot Actuator 공식 문서](https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html)
되돌아가기
수정
댓글 쓰기
댓글