1. 개요
안녕하세요. 이 글은 쿠버네티스에서 Nestjs 헬스체크를 하기 위한 LivenessProbe, ReadinessProbe 설정 전략에 대해 이야기 합니다. 설정 방법이 아니라 설정 전략입니다.
2. 설정 방법
LivenessProbe, ReadinessProbe 설정 방법은 Nestjs Healthchecks 공식문서에 너무 자세히 설명되어 있습니다. Terminus패키지를 사용합니다.
- Nestjs Healthchecks 공식문서: https://docs.nestjs.com/recipes/terminus
LivenessProbe ReadinessProbe API를 생성하고, 어떤 목록을 검사할지 구현하면 끝입니다. 구현 시 Terminus패키지에서 제공하는 Health Indicator를 사용합니다.
아래 예제는 LivenessProbe에서 disk를 점검하고, ReadinessProbe에서는 헬스체크 API호출을 검사합니다.
@Get('/liveness')
@HealthCheck()
async checkLiveness() {
return this.healthCheckService.check([
async () => this.diskHealthIndicator.checkStorage('disk', { thresholdPercent: 0.90, path: '/' })
]);
}
@Get('/readiness')
@HealthCheck()
async checkReadiness() {
return this.healthCheckService.check([
async () => this.httpHealthIndicator.pingCheck('self', 'http://localhost:3000/health/healthCheck'),
]);
}
Health Indicator 검사가 성공하면 API응답의 status 필드가 ok가 나옵니다.
3. 설정 전략
LivenessProbe, ReadinessProbe는 공식문서를 따라하면 매우 쉽게 설정이 가능합니다. 어려운 점은 어떤 것을 검사할지 기준을 만들어야 합니다. Nestjs는 예제를 제공할 뿐 검사 기준을 제공하지 않습니다.
저의 생각은 LivenessProbe는 pod를 재시작해야 하는 상황이 필요한지 검사하면 됩니다. 예를 들어 디스크 크기 부족, 힙메모리 사용이 100% 근접이 있습니다.
ReadinessProbe는 애플리케이션 외부 의존성을 검사하여, 의존성 문제로 인한 장애시 트래픽이 유입되지 않게 합니다. 예를 들어 데이터베이스 연결 실패, 외부 API 연결 실패 등이 있습니다.
4. 도움이 되는 자료
Nestjs와 다르게 Spring Boot Actuator는 Liveness와 Readiness API가 구현되어 있습니다. 저는 아직 분석하지 않았지만 코드를 분석하면 기준을 세우는데 많은 도움이 될 것 같습니다.
5. 참고자료
- Nestjs Healthchecks 공식문서: https://docs.nestjs.com/recipes/terminus
'전공영역 공부 기록' 카테고리의 다른 글
NestJS HttpHealthIndicator를 사용하다가 만난 오류 (1) | 2025.02.04 |
---|---|
ReactJS와 Kubernetes Controller의 원리는 비슷 (0) | 2025.01.30 |
ReactJS에 Tailwind CSS v4.0 적용하는 방법 (0) | 2025.01.30 |
EKS Pod 운영비용: 비용 절약과 안정성 사이의 현실적인 선택 (0) | 2025.01.14 |
쿠버네티스 노드 헬스체크 원리(lease API) (1) | 2025.01.13 |