본문 바로가기

Cloud/Kubernetes

Kubernetes Garbage Collection

Garbage Collection은 소유자가 없는 오브젝트를 찾아 삭제해주는 Kubernetes의 기능이다. 이 기능에 대해 간단히 정리해보았다.

예시로 작성한 yaml은 3개의 포드를 가지고 있는 Nginx ReplicaSet이다.

controllers/replicaset.yaml 

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: my-repset
spec:
  replicas: 3
  selector:
    matchLabels:
      pod-is-for: garbage-collection-example
  template:
    metadata:
      labels:
        pod-is-for: garbage-collection-example
    spec:
      containers:
      - name: nginx
        image: nginx

 

kubectl apply -f controllers.yaml을 통해 ReplicaSet을 생성해준다.

포드 3개와 레플리카셋 1개가 생성된 것을 확인할 수 있다.

일부 Kubernetes Object는 다른 개체의 소유자이기도 하다. 예를 들어 ReplicaSet은 포드들의 소유자이다. 방금 생성한 포드의 소유자를 확인해보면 지정해준 레플리카셋인 것을 볼 수 있다. 소유자는 ownerReferences 항목에서 찾을 수 있다.

이렇게 종속적인 항목들은 garbage collection이 삭제할 때 상위 개체를 따라 죽을지 죽지 않을지 선택할 수 있다. 자동으로 삭제하는 것을 cascading deletion이라고 부른다. 자동으로 삭제하지 않으면 종속 항목이 분리되고 끝난다. cascading에는 두 가지 옵션이 있다.

- foreground cascading deletion : 종속 항목을 먼저 삭제, 상위 항목은 종속 항목이 삭제 된 뒤 삭제

- background cascading deletion : 상위 항목을 먼저 삭제, 종속 항목은 백단에서 알아서 삭제 됨.

 레플리카셋을 삭제하되 포드들은 남아있게 해본다.

kubectl delete replicaset my-repset --cascade=false

포드들은 삭제되지 않고 계속 떠있는 것을 볼 수 있다. 기본적으로 true로 되어 있기 때문에 replicaset을 삭제하면 종속되어 있는 pod들이 삭제되었던 것이다.