Container Orchestration/Kubernetes

Kubernetes Garbage Collection

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

Overview

Kubernetes Garbage Collection에 대해서 알아본다.

출처 : 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

 

 


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
반응형