ArgoCD 를 사용하던 중 application 을 생성할 때 설정하는 GENERAL > Prune Propagation Policy 이 눈에 띄었다.

1. Prune Propagation Policy 이 실제로 하는 일
$ kubectl delete deployment sample-deployment --cascade=background
와 같이 옵션을 줄 수 있다. cascade 옵션에 올 수 있는 값은 foreground, background, orphan 이 있으며, 그 설명은 아래와 같다.
| 옵션 값 | 삭제 순서 | 특징 |
| foreground | 자식 -> 부모(synchronous) | 기본값. 자식 오브젝트가 모두 삭제될 때까지 부모 오브젝트가 terminating 상태로 대기한다. 가장 안전한 방식. |
| background | 부모 -> 자식(garbage collection. asynchronous 효과) | 부모 오브젝트를 바로 삭제하고 바로 응답함. 자식 오브젝트는 백그라운드에서 가비지 컬렉터가 정리한다. |
| orphan | 부모 | 부모 오브젝트만 삭제하고 자식 오브젝트는 유지(가비지 컬렉트 대상 아님) |
2. orphan 은 왜 garbage collection 대상이 아닐까?
쿠버네티스서는 부모-자식 관계를 Owner Reference 메커니즘으로 설명하고 있다. 자식 오브젝트들은 본인의 부모 오브젝트가 어떤 오브젝트인지 특정 필드에 그 참조를 저장하고 있다. --cascade=orphan 으로 부모 오브젝트를 삭제하면 아래와 같은 일들이 일어난다.
- 소유권 연결고리 변경: kube-apiserver 는 부모를 지우기 직전에 자식들의 설정에 적힌 ownerReferences(부모가 누구인지 적어둔 필드)를 삭제한다.
- 독립된 오브젝트가 됨: 부모가 사라진 자식들은 클러스터상에서 부모 없는 독립적인 오브젝트로 인식된다.
- 가비지 컬렉터 패스: 가비지 컬렉터는 부모가 명시되어있지만 존재하지는 않는 오브젝트를 정리하는 것이므로, ownerReferences 필드 자체가 없는 오브젝트는 건드리지 않는다.
3. orphan 은 언제 쓸까?
pod 들은 유지한 채로, 이를 관리하는 상위 컨트롤러만 교체하고 싶을 때 사용한다. 예를 들어, deployment 설정이 꼬여서 새로 만들고 싶지만, pod 들은 유지해야 하는 경우 사용한다. 다시 부모-자식을 부착하기 위해서는 동일한 라벨을 가진 deployment 를 다시 생성하면 된다. 기존의 pod 들은 다시 그 deployment 의 관리하에 들어가게 된다.
참고
클러스터에서 캐스케이딩 삭제 사용
이 페이지에서는 가비지 수집 중 클러스터에서 사용할 캐스케이딩 삭제 타입을 지정하는 방법을 보여준다. 시작하기 전에쿠버네티스 클러스터가 필요하고, kubectl 커맨드-라인 툴이 클러스터와
kubernetes.io
https://kubernetes.io/ko/docs/concepts/architecture/garbage-collection/
가비지(Garbage) 수집
쿠버네티스가 클러스터 자원을 정리하기 위해 사용하는 다양한 방법을 종합한 용어이다. 다음과 같은 리소스를 정리한다: 종료된 잡 소유자 참조가 없는 오브젝트 사용되지 않는 컨테이너와 컨
kubernetes.io
'Kubernetes' 카테고리의 다른 글
| [KUBERNETES] 서비스의 종류와 기능 간단 정리 (1) | 2026.06.16 |
|---|---|
| [Kubernetes] HorizontalPodAutoscaler(HPA)의 동작 방식과 behavior 설정 (0) | 2026.05.08 |
| [Kubernetes] Pod 상태 체크를 위한 Probe 의 이해 (0) | 2026.05.01 |
| [Kubernetes] 리소스별 selector 정리 (0) | 2026.04.26 |
| [Kubernetes] 오브젝트 라벨링 및 네이밍 가이드 (0) | 2026.04.26 |