Kubernetes 노드 디스크 부족 해결: containerd 이미지와 로그 정리

2026. 4. 25. 10:55k8s

Kubernetes 노드에서 root filesystem 사용량이 높아지면 아직 DiskPressure=False 상태라도 이미지 pull 실패, pod eviction, kubelet 이상 동작으로 이어질 수 있다. 이럴 때는 무작정 파일을 지우기보다 containerd 이미지, journald 로그, 실제 사용량을 순서대로 확인하는 것이 안전하다.

이 글에서는 Kubernetes 노드 디스크 사용량이 높을 때 확인한 순서와 정리 방법을 정리한다.

1. 노드 상태 확인

먼저 노드가 실제로 압박 상태인지 확인한다.

kubectl describe node <node-name>

확인할 항목은 아래와 같다.

  • DiskPressure
  • MemoryPressure
  • PIDPressure
  • Ready
  • event에 eviction 관련 메시지가 있는지

DiskPressure=False라도 root filesystem 사용률이 계속 올라가고 있다면 미리 정리하는 편이 낫다.

2. 디스크 사용량 확인

노드에 직접 접속할 수 있다면 dfdu로 확인한다.

df -h
du -xh /var/lib/containerd 2>/dev/null | sort -h | tail
du -xh /var/log 2>/dev/null | sort -h | tail

직접 SSH가 어렵다면 kubectl debug node로 확인할 수 있다.

kubectl debug node/<node-name> -q --image=busybox:1.36 -- sleep 600

3. 자주 커지는 위치

Kubernetes 노드에서 자주 커지는 위치는 보통 아래다.

  • /var/lib/containerd
  • /var/log
  • /var/log/journal
  • pod 로그 경로
  • 오래된 이미지와 사용하지 않는 snapshot

containerd를 쓰는 환경에서는 Docker 명령이 아니라 crictl 또는 nerdctl 기준으로 확인해야 한다.

4. journald 로그 정리

journald 로그가 크면 보관 크기를 제한해 정리할 수 있다.

journalctl --disk-usage
journalctl --vacuum-size=1G

운영 환경에서는 일회성 정리만 하지 말고 /etc/systemd/journald.conf에 보관 제한을 두는 것이 좋다.

예시는 아래와 같다.

SystemMaxUse=1G
SystemKeepFree=2G

설정 변경 후에는 journald를 재시작한다.

systemctl restart systemd-journald

5. containerd 이미지 정리

사용하지 않는 이미지는 crictl로 정리할 수 있다.

crictl images
crictl rmi --prune

정리 전에는 현재 실행 중인 pod가 사용하는 이미지를 지우지 않는지 확인해야 한다. --prune은 사용하지 않는 이미지를 대상으로 하지만, 운영 중에는 작업 전후 상태를 반드시 확인하는 것이 좋다.

6. 정리 후 확인

정리 후에는 다시 사용량과 노드 상태를 확인한다.

df -h
kubectl describe node <node-name>

확인할 것은 아래다.

  • root filesystem 사용률이 내려갔는지
  • DiskPressureFalse인지
  • pod 재시작이나 eviction이 새로 발생하지 않았는지
  • kubelet/containerd 로그에 오류가 없는지

7. 재발 방지

반복되는 문제라면 아래 설정을 같이 봐야 한다.

  • journald 보관 크기 제한
  • logrotate 설정
  • kubelet image GC 설정
  • containerd snapshot 정리 정책
  • 모니터링에서 root filesystem 사용률 알림

이미 한 번 찬 노드는 시간이 지나면 다시 찰 가능성이 높다. 임계치 알림을 걸고, 어떤 디렉터리가 커지는지 주기적으로 보는 편이 안전하다.

같이 보면 좋은 글

정리

Kubernetes 노드 디스크가 부족할 때는 /var/lib/containerd/var/log를 먼저 확인한다. journalctl --vacuum-size, crictl rmi --prune으로 급한 사용량을 줄일 수 있지만, 재발 방지를 위해 journald 제한, logrotate, image GC 설정까지 같이 봐야 한다.