Kubernetes에서 컨테이너 로그는 노드에 계속 쌓일 수 있기 때문에, 별도의 관리가 없다면 디스크 사용량 문제가 발생할 수 있습니다.
다행히 kubelet은 기본적으로 컨테이너 로그에 대해 로테이션을 수행합니다. 즉, 로그 파일이 일정 크기를 넘으면 새 파일로 교체하고, 오래된 로그 파일은 일정 개수까지만 유지합니다.
이번 글에서는 kubelet의 컨테이너 로그 로테이션 기본 설정과, 로그 보관 시 주의할 점을 정리합니다.
kubelet의 기본 컨테이너 로그 로테이션 설정
Kubernetes 공식 문서에 따르면 kubelet은 컨테이너 로그 로테이션을 위해 다음 설정을 제공합니다.
containerLogMaxSize: 10Mi
containerLogMaxFiles: 5
각 설정의 의미는 다음과 같습니다.
containerLogMaxSize: 컨테이너 로그 파일 하나의 최대 크기containerLogMaxFiles: 컨테이너 하나당 유지할 로그 파일 개수
기본값 기준으로 보면, 컨테이너 로그 파일 하나가 10Mi를 넘으면 로그 로테이션이 발생합니다. 그리고 컨테이너 하나당 최대 5개의 로그 파일만 유지됩니다.
따라서 단순 계산으로는 컨테이너 하나당 최대 약 50Mi 정도의 로그 파일이 노드에 저장될 수 있습니다.
10Mi × 5 files = 50Mi
다만 이는 컨테이너 하나를 기준으로 한 값입니다. 실제 노드 전체 로그 사용량은 실행 중인 Pod 수, 컨테이너 수, 로그 발생량에 따라 훨씬 커질 수 있습니다.
kubelet 로그 로테이션의 목적
kubelet의 로그 로테이션은 일반적인 logrotate처럼 로그를 압축해서 장기 보관하기 위한 기능은 아닙니다.
목적은 다음에 더 가깝습니다.
컨테이너 로그가 노드에 무한히 쌓여 디스크를 계속 사용하는 상황을 방지하는 것
즉, kubelet의 로그 로테이션은 노드 디스크 보호를 위한 최소한의 안전장치입니다. 로그를 장기간 보관하고 검색해야 한다면, Loki, Fluentd 같은 중앙 로그 저장소를 별도로 구성하는 것이 일반적입니다.
Kubernetes 자체는 클러스터 수준의 로그 저장소를 기본 제공하지 않으며, 로그를 저장하고 분석하기 위한 별도의 백엔드가 필요합니다.
kubectl logs 조회 시 주의할 점
로그 용량을 줄이기 위해 containerLogMaxSize 값을 작게 설정할 수도 있습니다. 하지만 이 경우 주의해야 할 점이 있습니다.
공식 문서에 따르면 kubectl logs는 최신 로그 파일의 내용만 제공합니다. 즉, 로그 로테이션으로 이전 파일로 넘어간 로그는 kubectl logs에서 직접 확인할 수 없습니다.
예를 들어 기본 설정인 10Mi를 사용 중이라면, 특정 컨테이너가 많은 로그를 출력해 로테이션이 발생했을 때 kubectl logs로 확인할 수 있는 범위는 최신 로그 파일에 남아 있는 내용으로 제한됩니다.
containerLogMaxSize: 10Mi
이 경우 kubectl logs로 볼 수 있는 로그는 최대 최신 10Mi 파일의 내용입니다.
따라서 containerLogMaxSize를 너무 작게 설정하면 문제가 발생했을 때 필요한 로그가 이미 로테이션되어 사라졌을 수 있습니다.
로그 용량을 줄이고 싶을 때 고려할 점
컨테이너 로그 용량을 줄이고 싶다면 kubelet 설정을 조정할 수 있습니다.
예를 들어 다음 값을 줄이면 컨테이너별 로그 저장량을 줄일 수 있습니다.
containerLogMaxSize: 5Mi
containerLogMaxFiles: 3
이 경우 컨테이너 하나당 대략 다음 정도의 로그만 유지됩니다.
5Mi × 3 files = 15Mi
하지만 단순히 값을 줄이기보다는 다음을 함께 고려하는 것이 좋습니다.
- 장애 분석에 필요한 최소 로그량은 어느 정도인지
- 애플리케이션이 과도하게 로그를 출력하고 있지는 않은지
- 로그 레벨이 운영 환경에 적절하게 설정되어 있는지
- Loki 같은 중앙 로그 저장소에서 정상적으로 로그를 수집하고 있는지
- 노드 디스크 용량과 Pod 수를 고려했을 때 적절한 보관량인지
특히 중앙 로그 저장소를 사용하고 있다면, 노드에는 짧은 기간의 로그만 남기고 장기 보관과 검색은 중앙 로그 시스템에 맡기는 구조가 더 적절할 수 있습니다.
정리
kubelet은 기본적으로 컨테이너 로그 로테이션을 수행합니다.
기본 설정은 다음과 같습니다.
containerLogMaxSize: 10Mi
containerLogMaxFiles: 5
이 설정은 컨테이너 로그가 노드에 무한히 쌓이는 것을 방지하기 위한 장치입니다. 다만 장기 보관이나 검색 목적의 기능은 아니므로, 운영 환경에서 로그를 지속적으로 보관해야 한다면 Loki 같은 중앙 로그 저장소를 함께 구성해야 합니다.
또한 containerLogMaxSize를 너무 작게 설정하면 kubectl logs로 확인할 수 있는 최신 로그 범위가 줄어들 수 있습니다. 따라서 로그 용량 절감과 장애 분석 가능성 사이에서 적절한 균형을 잡는 것이 중요합니다.
'Devops > Kubernetes' 카테고리의 다른 글
| Kustomize secretGenerator와 Argo CD 동기화 오류 해결하기 (0) | 2026.05.26 |
|---|---|
| Helm으로 Argo CD 설치 후 Gateway API와 TLS로 접속 구성하기 (0) | 2026.05.26 |
| Kubernetes 로컬 환경에 Private Registry 배포하고 이미지 Push/Pull 설정하기 (0) | 2026.05.20 |
| 로컬 Kubernetes에서 MetalLB로 LoadBalancer IP 할당하기 (0) | 2026.05.20 |
| Gateway API와 Envoy Gateway로 로컬 Kubernetes 서비스 노출하기 (0) | 2026.05.20 |