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

항상 기본값(foreground)로 두고 사용하는데, 각각의 값들은 어떤 의미를 가질까?
 

1. Prune Propagation Policy 이 실제로 하는 일

이 설정에 따라 실제 내부에서 kube-apiserver 로 날리는 kubectl delete 커맨드의 --cascade 옵션 값이 달라진다. 예를 들어 kubectl 에서는
$ kubectl delete deployment sample-deployment --cascade=background

와 같이 옵션을 줄 수 있다. cascade 옵션에 올 수 있는 값은 foreground, background, orphan 이 있으며, 그 설명은 아래와 같다.

옵션 값 삭제 순서 특징
foreground 자식 -> 부모(synchronous) 기본값. 자식 오브젝트가 모두 삭제될 때까지 부모 오브젝트가 terminating 상태로 대기한다. 가장 안전한 방식.
background 부모 -> 자식(garbage collection. asynchronous 효과) 부모 오브젝트를 바로 삭제하고 바로 응답함. 자식 오브젝트는 백그라운드에서 가비지 컬렉터가 정리한다.
orphan 부모 부모 오브젝트만 삭제하고 자식 오브젝트는 유지(가비지 컬렉트 대상 아님)
deployment > replicaset > pod 순서로 부모-자식 관계가 설정되는데, 이는 리눅스의 프로세스 트리와 비슷하다. background 에서의 동작처럼, 부모 프로세스가 삭제되면 자식 프로세스가 자동으로 삭제되는 식이다. 
 

2. orphan 은 왜 garbage collection 대상이 아닐까?

쿠버네티스서는 부모-자식 관계를 Owner Reference 메커니즘으로 설명하고 있다. 자식 오브젝트들은 본인의 부모 오브젝트가 어떤 오브젝트인지 특정 필드에 그 참조를 저장하고 있다. --cascade=orphan 으로 부모 오브젝트를 삭제하면 아래와 같은 일들이 일어난다.

  1. 소유권 연결고리 변경: kube-apiserver 는 부모를 지우기 직전에 자식들의 설정에 적힌 ownerReferences(부모가 누구인지 적어둔 필드)를 삭제한다.
  2. 독립된 오브젝트가 됨: 부모가 사라진 자식들은 클러스터상에서 부모 없는 독립적인 오브젝트로 인식된다.
  3. 가비지 컬렉터 패스: 가비지 컬렉터는 부모가 명시되어있지만 존재하지는 않는 오브젝트를 정리하는 것이므로, ownerReferences 필드 자체가 없는 오브젝트는 건드리지 않는다.

 

3. orphan 은 언제 쓸까?

pod 들은 유지한 채로, 이를 관리하는 상위 컨트롤러만 교체하고 싶을 때 사용한다. 예를 들어, deployment 설정이 꼬여서 새로 만들고 싶지만, pod 들은 유지해야 하는 경우 사용한다. 다시 부모-자식을 부착하기 위해서는 동일한 라벨을 가진 deployment 를 다시 생성하면 된다. 기존의 pod 들은 다시 그 deployment 의 관리하에 들어가게 된다.

 

참고

https://kubernetes.io/ko/docs/tasks/administer-cluster/use-cascading-deletion/#set-orphan-deletion-policy

 

클러스터에서 캐스케이딩 삭제 사용

이 페이지에서는 가비지 수집 중 클러스터에서 사용할 캐스케이딩 삭제 타입을 지정하는 방법을 보여준다. 시작하기 전에쿠버네티스 클러스터가 필요하고, kubectl 커맨드-라인 툴이 클러스터와

kubernetes.io

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

 

가비지(Garbage) 수집

쿠버네티스가 클러스터 자원을 정리하기 위해 사용하는 다양한 방법을 종합한 용어이다. 다음과 같은 리소스를 정리한다: 종료된 잡 소유자 참조가 없는 오브젝트 사용되지 않는 컨테이너와 컨

kubernetes.io

 

블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,