Container Orchestration/Kubernetes

Kubernetes Garbage Collection

Somaz 2024. 8. 30. 10:46
728x90
반응형

Overview

Kubernetes Garbage Collection(GC)은 클러스터 내 불필요하거나 더 이상 참조되지 않는 리소스(예: Pod, 컨테이너 이미지, 네임스페이스 등)를 자동으로 정리하는 기능이다.


Kubernetes는 API Server, Controller, Kubelet 등 각 컴포넌트를 통해 리소스의 생성과 삭제를 조율하고, OwnerReferences, Finalizers, Threshold 정책을 기반으로 다양한 수준의 GC를 수행한다.

 

 

GC는 다음 세 가지 방식으로 작동한다.

  • Pod 및 Controller 기반 GC
  • Kubelet 이미지 GC (디스크 절약 목적)
  • Finalizer 기반 리소스 GC (네임스페이스, CRD 등)

 

 

이를 통해 클러스터 안정성과 자원 활용도를 높이고, 리소스 누적에 따른 장애를 사전에 방지할 수 있다.

 

 

출처 : https://blog.devops.dev/clean-up-your-kubernetes-cluster-using-this-built-in-feature-651e48ee274f

 

 

 

 

 


 

 

 

 

 

Kubernetes Garbage Collection이란?

Kubernetes GC(Garbage Collection)는 주로 파드, 컨테이너, 이미지 및 기타 Kubernetes 리소스와 같이 사용되지 않는 객체를 제거하는 데 중점을 두고 리소스 정리를 자동으로 관리하는 시스템이다. Kubernetes에는 3가지 주요 유형의 Garbage Collection이 있다.

 

  • Garbage Collection of Pods and Controllers
    • Kubernetes는 더 이상 소유자가 없거나 더 이상 필요하지 않은 리소스의 정리를 자동으로 처리한다.
      • Pod: 컨트롤러가 생성한 Pod(예: Deployments, ReplicaSets, StatefulSets)는 더 이상 필요하지 않거나 부모 객체가 삭제되면 자동으로 제거된다.
      • Owner References: 쿠버네티스는 소유자 참조를 사용하여 종속 리소스의 수명 주기를 관리한다. 배포와 같은 객체가 삭제되면, 명시적으로 다르게 구성되지 않는 한, 모든 연관된 ReplicaSets와 간접적으로 해당 Pod도 삭제된다.

 

 

  • Container Image Garbage Collection
    • 쿠버네티스는 kubelet을 통해 사용되지 않는 컨테이너 이미지에 대한 가비지 수집을 자동으로 수행한다. kubelet은 기본 임계값을 기준으로 사용되지 않는 이미지를 주기적으로 확인하고 정리한다.
      • High Threshold: 컨테이너 이미지의 디스크 사용량이 전체 디스크 공간의 이 백분율을 초과하면 kubelet이 가비지 수집을 트리거한다.
      • Low Threshold: 디스크 사용량이 이 백분율 아래로 떨어지면 kubelet이 이미지 제거를 중단한다.

 

 

  • Resource Finalizers
    • Kubernetes의 리소스가 삭제되면 파이널라이저는 리소스가 시스템에서 완전히 제거되기 전에 정리 작업을 수행할 수 있도록 한다.
    • 예를 들어, 네임스페이스가 삭제되는 경우 파이널라이저는 네임스페이스 자체가 제거되기 전에 해당 네임스페이스 내의 모든 리소스가 정리되도록 한다. 이 프로세스는 자동화되며 Kubernetes 컨트롤러에서 관리한다.

 

 

 

 

Kubernetes Garbage Collection Workflow

 

차트는 Kubernetes가 리소스 관리 및 가비지 수집을 처리하는 방법을 설명한다.

 

 

 

 

  • API Server
    • Kubernetes 클러스터의 중앙 명령 허브이다. 리소스에 대한 생성, 업데이트 및 감시 작업을 처리한다. 변경 사항이 감지되면 API 서버는 해당 컨트롤러에 알린다.

 

  • Controller
    • 컨트롤러는 Kubernetes 리소스를 모니터링하고 시스템 상태를 처리하는 프로세스이다. 시스템의 실제 상태가 Kubernetes 리소스에서 설명하는 원하는 상태와 일치하는지 확인한다. 예를 들어 배포 컨트롤러는 배포의 수명 주기를 관리한다.

 

  • ReplicaSet, Deployments, etc.
    • 이러한 리소스는 특정 시간에 지정된 수의 복제본 Pod가 실행되도록 보장하는 등 Pod 세트에 대해 원하는 상태를 정의한다.

 

  • Pod
    • Pod는 Kubernetes에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위이다. 이는 클러스터에서 실행되는 컨테이너이다.

 

  • Garbage Collector
    • 이 구성 요소는 더 이상 소유자 참조(Owner References)가 없거나 삭제 대상으로 명시된 개체(i.e., they are orphans)를 제거하여 리소스를 정리한다. 이는 리소스를 확보하는 데 매우 중요하다.

 

  • Kubelet
    • 각 노드에서 실행되는 Kubelet은 API 서버의 지침에 따라 Pod의 수명 주기를 관리한다. 컨트롤 플레인의 지시에 따라 포드로 구성된 애플리케이션 컨테이너를 시작, 중지 및 유지 관리한다.

 

  • Node
    • 클러스터에 따라 VM 또는 물리적 머신일 수 있는 Kubernetes의 작업자 머신을 나타낸다.

 

  • Container Images
    • 컨테이너에서 실행하는 데 필요한 모든 요소가 포함된 실행 가능한 소프트웨어 패키지니다. Kubelet은 노드에서 사용되지 않는 컨테이너 이미지를 가비지로 수집하여 디스크 공간을 효율적으로 사용할 수 있도록 하는 역할을 한다.

 

 

아래의 명령어로 Grabage Collection log를 확인가능하다.

sudo journalctl -u kubelet | grep -i garbage

 

 

 

 


 

 

 

마무리

Kubernetes의 Garbage Collection은 클러스터 내 리소스가 과도하게 누적되는 것을 방지하고, 시스템의 효율적인 동작을 보장하기 위한 핵심 기능이다.


사용하지 않는 Pod, 컨테이너 이미지, 네임스페이스 등의 리소스를 자동으로 정리해줌으로써, 디스크 공간 확보와 운영 안정성 확보에 기여한다.

 

운영 환경에서는 GC 로그 모니터링, 적절한 OwnerReferences 구성, Finalizer 정책 관리가 중요하다.

 


불필요한 리소스가 누적되기 전에 Kubernetes의 GC 메커니즘을 정확히 이해하고 적절히 활용하는 것이 클러스터 운영의 핵심이라 할 수 있다.

정기적인 점검 및 모니터링으로 Kubernetes 리소스를 최적 상태로 유지하세요!

 

 

 

 

 

 

 

 


Reference

https://kubernetes.io/docs/concepts/architecture/garbage-collection/

https://binux.tistory.com/130

https://blog.devops.dev/clean-up-your-kubernetes-cluster-using-this-built-in-feature-651e48ee274f

728x90
반응형