containerd에서 Garbage Collection 관리하기

2–3분

containerd는 컨테이너를 관리하는 경량의 컨테이너 런타임입니다. Kubernetes 환경에서 널리 사용되는 이 런타임은 이미지와 컨테이너 리소스를 효율적으로 관리해줍니다. 하지만 시간이 지남에 따라 사용하지 않는 이미지들이 쌓이면 디스크 용량을 불필요하게 차지할 수 있습니다. 이를 방지하기 위해, containerd에서 쓰이지 않는 이미지를 정리하는 Garbage Collection 작업이 필요합니다.

이 글에서는 사용되지 않는 이미지를 식별하고 삭제하는 스크립트를 사용해 containerd에서 효과적으로 이미지 정리를 수행하는 방법을 설명하겠습니다.

containerd에서 Garbage Collection이 필요한 이유

Kubernetes와 containerd를 사용하는 환경에서는 애플리케이션의 배포 및 업데이트가 빈번하게 발생합니다. 그 과정에서 컨테이너 이미지는 계속해서 풀(pull)되며, 새로운 이미지들이 추가됩니다. 하지만 오래된 이미지들은 더 이상 사용되지 않더라도 시스템에 남아있어 저장 공간을 차지합니다. 이러한 불필요한 이미지를 주기적으로 정리하지 않으면 디스크 사용량이 증가하여 시스템의 성능 저하를 일으킬 수 있습니다.

따라서, containerd의 Garbage Collection을 통해 현재 사용 중인 이미지를 제외한 나머지 이미지를 안전하게 삭제하는 것이 중요합니다.

Garbage Collection을 위한 스크립트

아래는 사용되지 않는 이미지를 식별하고 삭제하는 간단한 스크립트입니다. 이 스크립트는 Kubernetes 네임스페이스(k8s.io)에서 실행되며, 현재 사용 중인 이미지와 그렇지 않은 이미지를 구분한 뒤, 사용되지 않는 이미지만을 삭제합니다.

# 실행 중인 컨테이너에서 사용하는 이미지 목록
used_images=$(ctr -n k8s.io containers ls -q | xargs -I {} ctr -n k8s.io containers info {} | jq -r .image | sort | uniq)

# 모든 이미지 목록
all_images=$(ctr -n k8s.io images ls -q)

# 삭제할 이미지 목록 (사용 중인 이미지를 제외한 이미지)
unused_images=$(comm -23 <(echo "$all_images") <(echo "$used_images"))

# 사용되지 않는 이미지 삭제
for image in $unused_images; do
    echo "Deleting unused image: $image"
    ctr -n k8s.io images rm "$image"
done


스크립트 설명

  1. used_images: 현재 실행 중인 모든 컨테이너가 사용하는 이미지를 확인합니다. ctr 명령어를 사용하여 컨테이너 정보를 얻고, jq로 이미지 정보를 필터링한 뒤, 중복 이미지를 제거합니다.
  2. all_images: 현재 containerd에 존재하는 모든 이미지를 리스트로 출력합니다.
  3. unused_images: comm 명령어를 사용하여, 사용 중인 이미지를 제외한 나머지 이미지를 추출합니다.
  4. 이미지 삭제: 사용되지 않는 이미지를 하나씩 삭제합니다. 각 이미지가 삭제될 때마다 해당 이미지를 출력하면서 ctr 명령어로 제거합니다.

스크립트 실행 방법

위 스크립트를 사용하여 containerd에서 사용되지 않는 이미지를 자동으로 정리할 수 있습니다. 이 스크립트를 주기적으로 실행하면, 디스크 공간을 효율적으로 관리하고 불필요한 이미지가 쌓이지 않도록 할 수 있습니다. cron이나 다른 스케줄링 도구를 사용해 일정 간격으로 스크립트를 실행하도록 설정하는 것도 좋은 방법입니다.

결론

containerd의 Garbage Collection은 Kubernetes 환경에서 시스템 자원을 효율적으로 관리하는 중요한 작업입니다. 주기적으로 사용되지 않는 이미지를 정리하면, 디스크 공간을 절약하고 시스템 성능을 유지할 수 있습니다. 위에서 설명한 스크립트를 활용하여 간단하게 containerd의 이미지 정리를 자동화해보세요.